diff --git a/.buildinfo b/.buildinfo index caa395a..27da3cc 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 5ee66292091ff32fcf1050388dd8a28f +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 83bd936c301cd0b925123da4791576cd tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/__intersphinx_cache__/constraints_objects.inv b/.doctrees/__intersphinx_cache__/constraints_objects.inv new file mode 100644 index 0000000..6711fa5 Binary files /dev/null and b/.doctrees/__intersphinx_cache__/constraints_objects.inv differ diff --git a/.doctrees/__intersphinx_cache__/python_objects.inv b/.doctrees/__intersphinx_cache__/python_objects.inv new file mode 100644 index 0000000..5898de9 Binary files /dev/null and b/.doctrees/__intersphinx_cache__/python_objects.inv differ diff --git a/.doctrees/compatibility/board.doctree b/.doctrees/compatibility/board.doctree new file mode 100644 index 0000000..9d4d8fd Binary files /dev/null and b/.doctrees/compatibility/board.doctree differ diff --git a/.doctrees/compatibility/cable.doctree b/.doctrees/compatibility/cable.doctree new file mode 100644 index 0000000..cbeaf1c Binary files /dev/null and b/.doctrees/compatibility/cable.doctree differ diff --git a/.doctrees/compatibility/fpga.doctree b/.doctrees/compatibility/fpga.doctree new file mode 100644 index 0000000..d04c9fb Binary files /dev/null and b/.doctrees/compatibility/fpga.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000..3526c4f Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/guide/advanced.doctree b/.doctrees/guide/advanced.doctree new file mode 100644 index 0000000..f1f0fa9 Binary files /dev/null and b/.doctrees/guide/advanced.doctree differ diff --git a/.doctrees/guide/first-steps.doctree b/.doctrees/guide/first-steps.doctree new file mode 100644 index 0000000..5951a76 Binary files /dev/null and b/.doctrees/guide/first-steps.doctree differ diff --git a/.doctrees/guide/install.doctree b/.doctrees/guide/install.doctree new file mode 100644 index 0000000..6947d62 Binary files /dev/null and b/.doctrees/guide/install.doctree differ diff --git a/.doctrees/guide/troubleshooting.doctree b/.doctrees/guide/troubleshooting.doctree new file mode 100644 index 0000000..11fbdc6 Binary files /dev/null and b/.doctrees/guide/troubleshooting.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000..db01b98 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/todo.doctree b/.doctrees/todo.doctree new file mode 100644 index 0000000..89ffd63 Binary files /dev/null and b/.doctrees/todo.doctree differ diff --git a/.doctrees/vendors/anlogic.doctree b/.doctrees/vendors/anlogic.doctree new file mode 100644 index 0000000..40dd359 Binary files /dev/null and b/.doctrees/vendors/anlogic.doctree differ diff --git a/.doctrees/vendors/colognechip.doctree b/.doctrees/vendors/colognechip.doctree new file mode 100644 index 0000000..26da4d9 Binary files /dev/null and b/.doctrees/vendors/colognechip.doctree differ diff --git a/.doctrees/vendors/efinix.doctree b/.doctrees/vendors/efinix.doctree new file mode 100644 index 0000000..350dabe Binary files /dev/null and b/.doctrees/vendors/efinix.doctree differ diff --git a/.doctrees/vendors/gowin.doctree b/.doctrees/vendors/gowin.doctree new file mode 100644 index 0000000..d4fed7e Binary files /dev/null and b/.doctrees/vendors/gowin.doctree differ diff --git a/.doctrees/vendors/intel.doctree b/.doctrees/vendors/intel.doctree new file mode 100644 index 0000000..93a5fa3 Binary files /dev/null and b/.doctrees/vendors/intel.doctree differ diff --git a/.doctrees/vendors/lattice.doctree b/.doctrees/vendors/lattice.doctree new file mode 100644 index 0000000..ea69b17 Binary files /dev/null and b/.doctrees/vendors/lattice.doctree differ diff --git a/.doctrees/vendors/xilinx.doctree b/.doctrees/vendors/xilinx.doctree new file mode 100644 index 0000000..5a00a5a Binary files /dev/null and b/.doctrees/vendors/xilinx.doctree differ diff --git a/_sources/guide/install.rst.txt b/_sources/guide/install.rst.txt index 4d543bb..511697f 100644 --- a/_sources/guide/install.rst.txt +++ b/_sources/guide/install.rst.txt @@ -7,7 +7,7 @@ Linux ===== Debian/Ubuntu ----------- +------------- openFPGALoader is available in the default repositories: @@ -194,6 +194,70 @@ Alternatively, if you want to build it by hand: Windows ======= +MSYS2 (Native Build) +-------------------- + +openFPGALoader can be installed via MSYS2: + +.. code-block:: bash + + pacman -S mingw-w64-ucrt-x86_64-openFPGALoader + +Cross-compilation from Linux +---------------------------- + +openFPGALoader can be cross-compiled for Windows from Linux using MinGW-w64. +The build system will automatically download and build the required dependencies +(libusb, libftdi). + +**Prerequisites (Debian/Ubuntu):** + +.. code-block:: bash + + sudo apt install \ + mingw-w64 \ + cmake \ + pkg-config \ + p7zip-full + +**Prerequisites (Fedora/RHEL/Rocky):** + +.. code-block:: bash + + sudo dnf install \ + mingw64-gcc \ + mingw64-gcc-c++ \ + mingw64-zlib \ + mingw64-zlib-static \ + cmake \ + p7zip \ + p7zip-plugins + +**Build:** + +.. code-block:: bash + + git clone https://github.com/trabucayre/openFPGALoader + cd openFPGALoader + mkdir build-win64 + cd build-win64 + cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-x86_64-w64-mingw32.cmake .. + cmake --build . --parallel + +The resulting ``openFPGALoader.exe`` will be a statically-linked executable +that only depends on standard Windows system DLLs (KERNEL32, msvcrt, WS2_32). + +**Optional: Strip debug symbols to reduce size:** + +.. code-block:: bash + + x86_64-w64-mingw32-strip openFPGALoader.exe + +**Cross-compilation options:** + +- ``-DCROSS_COMPILE_DEPS=OFF`` - Disable automatic dependency download (use system libraries) +- ``-DENABLE_CMSISDAP=ON`` - Enable CMSIS-DAP support (requires manually providing hidapi) + Common ====== diff --git a/_sources/guide/troubleshooting.rst.txt b/_sources/guide/troubleshooting.rst.txt index a6e1547..64e40d6 100644 --- a/_sources/guide/troubleshooting.rst.txt +++ b/_sources/guide/troubleshooting.rst.txt @@ -1,7 +1,7 @@ .. _troubleshooting: -Troubleshooting -############### +Troubleshooting Guide +##################### I installed openFPGALoader but it says `command not found` when I try to launch it ================================================================================== diff --git a/_sources/vendors/efinix.rst.txt b/_sources/vendors/efinix.rst.txt index a47115b..0b64f17 100644 --- a/_sources/vendors/efinix.rst.txt +++ b/_sources/vendors/efinix.rst.txt @@ -41,11 +41,11 @@ bin file load openFPGALoader --cable jlink_base -m /somewhere/project/outflow/*.bin hex file flash -------------- +-------------- Example for ti60f225. NOTE: JTAG chains with more than one device (eg --index-chain) are currently not supported for writing to SPI flash .. code-block:: bash - openFPGALoader --cable jlink_base --fpga-part ti60f225 -f /somewhere/project/outflow/*.hex \ No newline at end of file + openFPGALoader --cable jlink_base --fpga-part ti60f225 -f /somewhere/project/outflow/*.hex diff --git a/_static/alabaster.css b/_static/alabaster.css new file mode 100644 index 0000000..7e75bf8 --- /dev/null +++ b/_static/alabaster.css @@ -0,0 +1,663 @@ +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox { + margin: 1em 0; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: unset; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + +@media screen and (max-width: 940px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.sphinxsidebar { + display: block; + float: none; + width: unset; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + min-width: auto; /* fixes width on small screens, breaks .hll */ + padding: 0; + } + + .hll { + /* "fixes" the breakage */ + width: max-content; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} + +img.github { + position: absolute; + top: 0; + border: 0; + right: 0; +} \ No newline at end of file diff --git a/_static/base-stemmer.js b/_static/base-stemmer.js new file mode 100644 index 0000000..e6fa0c4 --- /dev/null +++ b/_static/base-stemmer.js @@ -0,0 +1,476 @@ +// @ts-check + +/**@constructor*/ +BaseStemmer = function() { + /** @protected */ + this.current = ''; + this.cursor = 0; + this.limit = 0; + this.limit_backward = 0; + this.bra = 0; + this.ket = 0; + + /** + * @param {string} value + */ + this.setCurrent = function(value) { + this.current = value; + this.cursor = 0; + this.limit = this.current.length; + this.limit_backward = 0; + this.bra = this.cursor; + this.ket = this.limit; + }; + + /** + * @return {string} + */ + this.getCurrent = function() { + return this.current; + }; + + /** + * @param {BaseStemmer} other + */ + this.copy_from = function(other) { + /** @protected */ + this.current = other.current; + this.cursor = other.cursor; + this.limit = other.limit; + this.limit_backward = other.limit_backward; + this.bra = other.bra; + this.ket = other.ket; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor++; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) + return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) + return true; + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor--; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true; + this.cursor--; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) { + this.cursor++; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) { + this.cursor++; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) { + this.cursor--; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) { + this.cursor--; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor--; + } + return false; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s = function(s) + { + /** @protected */ + if (this.limit - this.cursor < s.length) return false; + if (this.current.slice(this.cursor, this.cursor + s.length) != s) + { + return false; + } + this.cursor += s.length; + return true; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s_b = function(s) + { + /** @protected */ + if (this.cursor - this.limit_backward < s.length) return false; + if (this.current.slice(this.cursor - s.length, this.cursor) != s) + { + return false; + } + this.cursor -= s.length; + return true; + }; + + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among = function(v) + { + /** @protected */ + var i = 0; + var j = v.length; + + var c = this.cursor; + var l = this.limit; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >>> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; // smaller + // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional) + var w = v[k]; + var i2; + for (i2 = common; i2 < w[0].length; i2++) + { + if (c + common == l) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; // v->s has been inspected + if (j == i) break; // only one item in v + + // - but now we need to go round once more to get + // v->s inspected. This looks messy, but is actually + // the optimal approach. + + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c + w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c + w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + // find_among_b is for backwards processing. Same comments apply + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among_b = function(v) + { + /** @protected */ + var i = 0; + var j = v.length + + var c = this.cursor; + var lb = this.limit_backward; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; + var w = v[k]; + var i2; + for (i2 = w[0].length - 1 - common; i2 >= 0; i2--) + { + if (c - common == lb) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c - w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c - w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + /* to replace chars between c_bra and c_ket in this.current by the + * chars in s. + */ + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + * @return {number} + */ + this.replace_s = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = s.length - (c_ket - c_bra); + this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket); + this.limit += adjustment; + if (this.cursor >= c_ket) this.cursor += adjustment; + else if (this.cursor > c_bra) this.cursor = c_bra; + return adjustment; + }; + + /** + * @return {boolean} + */ + this.slice_check = function() + { + /** @protected */ + if (this.bra < 0 || + this.bra > this.ket || + this.ket > this.limit || + this.limit > this.current.length) + { + return false; + } + return true; + }; + + /** + * @param {number} c_bra + * @return {boolean} + */ + this.slice_from = function(s) + { + /** @protected */ + var result = false; + if (this.slice_check()) + { + this.replace_s(this.bra, this.ket, s); + result = true; + } + return result; + }; + + /** + * @return {boolean} + */ + this.slice_del = function() + { + /** @protected */ + return this.slice_from(""); + }; + + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + */ + this.insert = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = this.replace_s(c_bra, c_ket, s); + if (c_bra <= this.bra) this.bra += adjustment; + if (c_bra <= this.ket) this.ket += adjustment; + }; + + /** + * @return {string} + */ + this.slice_to = function() + { + /** @protected */ + var result = ''; + if (this.slice_check()) + { + result = this.current.slice(this.bra, this.ket); + } + return result; + }; + + /** + * @return {string} + */ + this.assign_to = function() + { + /** @protected */ + return this.current.slice(0, this.limit); + }; +}; diff --git a/_static/basic.css b/_static/basic.css index 30fee9d..0028826 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -1,12 +1,5 @@ /* - * basic.css - * ~~~~~~~~~ - * * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ /* -- main layout ----------------------------------------------------------- */ @@ -115,15 +108,11 @@ img { /* -- search page ----------------------------------------------------------- */ ul.search { - margin: 10px 0 0 20px; - padding: 0; + margin-top: 10px; } ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; + padding: 5px 0; } ul.search li a { @@ -222,7 +211,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 360px; + min-width: inherit; max-width: 800px; } @@ -752,14 +741,6 @@ abbr, acronym { cursor: help; } -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - /* -- code displays --------------------------------------------------------- */ pre { diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css deleted file mode 100644 index ec0f9a8..0000000 --- a/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1f1f;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#262626;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #404040}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb6000..0000000 Binary files a/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e23..0000000 Binary files a/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63..0000000 Binary files a/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5..0000000 Binary files a/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845..0000000 --- a/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2..0000000 Binary files a/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b..0000000 Binary files a/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d80..0000000 Binary files a/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51..0000000 Binary files a/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb19504..0000000 Binary files a/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc..0000000 Binary files a/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37..0000000 Binary files a/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307f..0000000 Binary files a/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf9843..0000000 Binary files a/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/_static/css/theme.css b/_static/css/theme.css deleted file mode 100644 index 2d18194..0000000 --- a/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * 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:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;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.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-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:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{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%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.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}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:15px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:15px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:30px;display:inline-block;line-height:30px;padding:0 15px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#9b9b9b;height:30px;line-height:30px;padding:0 .809em;margin:6px 0 0;border-top:1px solid #9b9b9b;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4d4d4d;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#333;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:0;z-index:200;background-color:#333;text-align:center}.wy-side-nav-search input[type=text]{width:100%;border-radius:0;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#333;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.4045em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin:0 0 .809em;font-weight:400}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#333;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#333;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#333;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#333;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:1024px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey;font-size:95%;text-align:center}footer p{margin-bottom:0;font-size:95%}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,p{margin-bottom:12px}h1{display:none}.rst-content .toctree-wrapper>p.caption,h2{border-bottom:1px solid #e1e4e5;padding:0 0 3px;font-size:130%}h3{font-size:115%;text-decoration:underline}.section p,.simple li,section>p{text-align:justify}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1f1f;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#262626;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #404040}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#b3b3b3;color:#333;border-top:3px solid #666;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#666}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #737373;background:#b3b3b3;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_static/doctools.js b/_static/doctools.js index d06a71d..807cdb1 100644 --- a/_static/doctools.js +++ b/_static/doctools.js @@ -1,12 +1,5 @@ /* - * doctools.js - * ~~~~~~~~~~~ - * * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ "use strict"; @@ -66,7 +59,7 @@ const Documentation = { Object.assign(Documentation.TRANSLATIONS, catalog.messages); Documentation.PLURAL_EXPR = new Function( "n", - `return (${catalog.plural_expr})` + `return (${catalog.plural_expr})`, ); Documentation.LOCALE = catalog.locale; }, @@ -96,7 +89,7 @@ const Documentation = { const togglerElements = document.querySelectorAll("img.toggler"); togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) + el.addEventListener("click", (event) => toggler(event.currentTarget)), ); togglerElements.forEach((el) => (el.style.display = "")); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); @@ -105,14 +98,15 @@ const Documentation = { initOnKeyListeners: () => { // only install a listener if it is really needed if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS + && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS ) return; document.addEventListener("keydown", (event) => { // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; // bail with special keys if (event.altKey || event.ctrlKey || event.metaKey) return; diff --git a/_static/english-stemmer.js b/_static/english-stemmer.js new file mode 100644 index 0000000..056760e --- /dev/null +++ b/_static/english-stemmer.js @@ -0,0 +1,1066 @@ +// Generated from english.sbl by Snowball 3.0.1 - https://snowballstem.org/ + +/**@constructor*/ +var EnglishStemmer = function() { + var base = new BaseStemmer(); + + /** @const */ var a_0 = [ + ["arsen", -1, -1], + ["commun", -1, -1], + ["emerg", -1, -1], + ["gener", -1, -1], + ["later", -1, -1], + ["organ", -1, -1], + ["past", -1, -1], + ["univers", -1, -1] + ]; + + /** @const */ var a_1 = [ + ["'", -1, 1], + ["'s'", 0, 1], + ["'s", -1, 1] + ]; + + /** @const */ var a_2 = [ + ["ied", -1, 2], + ["s", -1, 3], + ["ies", 1, 2], + ["sses", 1, 1], + ["ss", 1, -1], + ["us", 1, -1] + ]; + + /** @const */ var a_3 = [ + ["succ", -1, 1], + ["proc", -1, 1], + ["exc", -1, 1] + ]; + + /** @const */ var a_4 = [ + ["even", -1, 2], + ["cann", -1, 2], + ["inn", -1, 2], + ["earr", -1, 2], + ["herr", -1, 2], + ["out", -1, 2], + ["y", -1, 1] + ]; + + /** @const */ var a_5 = [ + ["", -1, -1], + ["ed", 0, 2], + ["eed", 1, 1], + ["ing", 0, 3], + ["edly", 0, 2], + ["eedly", 4, 1], + ["ingly", 0, 2] + ]; + + /** @const */ var a_6 = [ + ["", -1, 3], + ["bb", 0, 2], + ["dd", 0, 2], + ["ff", 0, 2], + ["gg", 0, 2], + ["bl", 0, 1], + ["mm", 0, 2], + ["nn", 0, 2], + ["pp", 0, 2], + ["rr", 0, 2], + ["at", 0, 1], + ["tt", 0, 2], + ["iz", 0, 1] + ]; + + /** @const */ var a_7 = [ + ["anci", -1, 3], + ["enci", -1, 2], + ["ogi", -1, 14], + ["li", -1, 16], + ["bli", 3, 12], + ["abli", 4, 4], + ["alli", 3, 8], + ["fulli", 3, 9], + ["lessli", 3, 15], + ["ousli", 3, 10], + ["entli", 3, 5], + ["aliti", -1, 8], + ["biliti", -1, 12], + ["iviti", -1, 11], + ["tional", -1, 1], + ["ational", 14, 7], + ["alism", -1, 8], + ["ation", -1, 7], + ["ization", 17, 6], + ["izer", -1, 6], + ["ator", -1, 7], + ["iveness", -1, 11], + ["fulness", -1, 9], + ["ousness", -1, 10], + ["ogist", -1, 13] + ]; + + /** @const */ var a_8 = [ + ["icate", -1, 4], + ["ative", -1, 6], + ["alize", -1, 3], + ["iciti", -1, 4], + ["ical", -1, 4], + ["tional", -1, 1], + ["ational", 5, 2], + ["ful", -1, 5], + ["ness", -1, 5] + ]; + + /** @const */ var a_9 = [ + ["ic", -1, 1], + ["ance", -1, 1], + ["ence", -1, 1], + ["able", -1, 1], + ["ible", -1, 1], + ["ate", -1, 1], + ["ive", -1, 1], + ["ize", -1, 1], + ["iti", -1, 1], + ["al", -1, 1], + ["ism", -1, 1], + ["ion", -1, 2], + ["er", -1, 1], + ["ous", -1, 1], + ["ant", -1, 1], + ["ent", -1, 1], + ["ment", 15, 1], + ["ement", 16, 1] + ]; + + /** @const */ var a_10 = [ + ["e", -1, 1], + ["l", -1, 2] + ]; + + /** @const */ var a_11 = [ + ["andes", -1, -1], + ["atlas", -1, -1], + ["bias", -1, -1], + ["cosmos", -1, -1], + ["early", -1, 5], + ["gently", -1, 3], + ["howe", -1, -1], + ["idly", -1, 2], + ["news", -1, -1], + ["only", -1, 6], + ["singly", -1, 7], + ["skies", -1, 1], + ["sky", -1, -1], + ["ugly", -1, 4] + ]; + + /** @const */ var /** Array */ g_aeo = [17, 64]; + + /** @const */ var /** Array */ g_v = [17, 65, 16, 1]; + + /** @const */ var /** Array */ g_v_WXY = [1, 17, 65, 208, 1]; + + /** @const */ var /** Array */ g_valid_LI = [55, 141, 2]; + + var /** boolean */ B_Y_found = false; + var /** number */ I_p2 = 0; + var /** number */ I_p1 = 0; + + + /** @return {boolean} */ + function r_prelude() { + B_Y_found = false; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + base.bra = base.cursor; + if (!(base.eq_s("'"))) + { + break lab0; + } + base.ket = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.cursor = v_1; + /** @const */ var /** number */ v_2 = base.cursor; + lab1: { + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab1; + } + base.ket = base.cursor; + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + } + base.cursor = v_2; + /** @const */ var /** number */ v_3 = base.cursor; + lab2: { + while(true) + { + /** @const */ var /** number */ v_4 = base.cursor; + lab3: { + golab4: while(true) + { + /** @const */ var /** number */ v_5 = base.cursor; + lab5: { + if (!(base.in_grouping(g_v, 97, 121))) + { + break lab5; + } + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab5; + } + base.ket = base.cursor; + base.cursor = v_5; + break golab4; + } + base.cursor = v_5; + if (base.cursor >= base.limit) + { + break lab3; + } + base.cursor++; + } + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + continue; + } + base.cursor = v_4; + break; + } + } + base.cursor = v_3; + return true; + }; + + /** @return {boolean} */ + function r_mark_regions() { + I_p1 = base.limit; + I_p2 = base.limit; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + lab1: { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + if (base.find_among(a_0) == 0) + { + break lab2; + } + break lab1; + } + base.cursor = v_2; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + } + I_p1 = base.cursor; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + I_p2 = base.cursor; + } + base.cursor = v_1; + return true; + }; + + /** @return {boolean} */ + function r_shortv() { + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.out_grouping_b(g_v_WXY, 89, 121))) + { + break lab1; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + lab2: { + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (base.cursor > base.limit_backward) + { + break lab2; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("past"))) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_R1() { + return I_p1 <= base.cursor; + }; + + /** @return {boolean} */ + function r_R2() { + return I_p2 <= base.cursor; + }; + + /** @return {boolean} */ + function r_Step_1a() { + var /** number */ among_var; + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab0: { + base.ket = base.cursor; + if (base.find_among_b(a_1) == 0) + { + base.cursor = base.limit - v_1; + break lab0; + } + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.ket = base.cursor; + among_var = base.find_among_b(a_2); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + if (!base.slice_from("ss")) + { + return false; + } + break; + case 2: + lab1: { + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + { + /** @const */ var /** number */ c1 = base.cursor - 2; + if (c1 < base.limit_backward) + { + break lab2; + } + base.cursor = c1; + } + if (!base.slice_from("i")) + { + return false; + } + break lab1; + } + base.cursor = base.limit - v_2; + if (!base.slice_from("ie")) + { + return false; + } + } + break; + case 3: + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1b() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_5); + base.bra = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + switch (among_var) { + case 1: + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + lab3: { + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + lab4: { + if (base.find_among_b(a_3) == 0) + { + break lab4; + } + if (base.cursor > base.limit_backward) + { + break lab4; + } + break lab3; + } + base.cursor = base.limit - v_3; + if (!r_R1()) + { + break lab2; + } + if (!base.slice_from("ee")) + { + return false; + } + } + } + base.cursor = base.limit - v_2; + break; + case 2: + break lab1; + case 3: + among_var = base.find_among_b(a_4); + if (among_var == 0) + { + break lab1; + } + switch (among_var) { + case 1: + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (base.cursor > base.limit_backward) + { + break lab1; + } + base.cursor = base.limit - v_4; + base.bra = base.cursor; + if (!base.slice_from("ie")) + { + return false; + } + break; + case 2: + if (base.cursor > base.limit_backward) + { + break lab1; + } + break; + } + break; + } + break lab0; + } + base.cursor = base.limit - v_1; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + base.cursor = base.limit - v_5; + if (!base.slice_del()) + { + return false; + } + base.ket = base.cursor; + base.bra = base.cursor; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + among_var = base.find_among_b(a_6); + switch (among_var) { + case 1: + if (!base.slice_from("e")) + { + return false; + } + return false; + case 2: + { + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + lab5: { + if (!(base.in_grouping_b(g_aeo, 97, 111))) + { + break lab5; + } + if (base.cursor > base.limit_backward) + { + break lab5; + } + return false; + } + base.cursor = base.limit - v_7; + } + break; + case 3: + if (base.cursor != I_p1) + { + return false; + } + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + if (!r_shortv()) + { + return false; + } + base.cursor = base.limit - v_8; + if (!base.slice_from("e")) + { + return false; + } + return false; + } + base.cursor = base.limit - v_6; + base.ket = base.cursor; + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1c() { + base.ket = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("y"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("Y"))) + { + return false; + } + } + base.bra = base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + return false; + } + lab2: { + if (base.cursor > base.limit_backward) + { + break lab2; + } + return false; + } + if (!base.slice_from("i")) + { + return false; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_2() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_7); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ence")) + { + return false; + } + break; + case 3: + if (!base.slice_from("ance")) + { + return false; + } + break; + case 4: + if (!base.slice_from("able")) + { + return false; + } + break; + case 5: + if (!base.slice_from("ent")) + { + return false; + } + break; + case 6: + if (!base.slice_from("ize")) + { + return false; + } + break; + case 7: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 8: + if (!base.slice_from("al")) + { + return false; + } + break; + case 9: + if (!base.slice_from("ful")) + { + return false; + } + break; + case 10: + if (!base.slice_from("ous")) + { + return false; + } + break; + case 11: + if (!base.slice_from("ive")) + { + return false; + } + break; + case 12: + if (!base.slice_from("ble")) + { + return false; + } + break; + case 13: + if (!base.slice_from("og")) + { + return false; + } + break; + case 14: + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_from("og")) + { + return false; + } + break; + case 15: + if (!base.slice_from("less")) + { + return false; + } + break; + case 16: + if (!(base.in_grouping_b(g_valid_LI, 99, 116))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_3() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_8); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 3: + if (!base.slice_from("al")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ic")) + { + return false; + } + break; + case 5: + if (!base.slice_del()) + { + return false; + } + break; + case 6: + if (!r_R2()) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_4() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_9); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R2()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_del()) + { + return false; + } + break; + case 2: + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("s"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("t"))) + { + return false; + } + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_5() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_10); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + lab0: { + lab1: { + if (!r_R2()) + { + break lab1; + } + break lab0; + } + if (!r_R1()) + { + return false; + } + { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab2: { + if (!r_shortv()) + { + break lab2; + } + return false; + } + base.cursor = base.limit - v_1; + } + } + if (!base.slice_del()) + { + return false; + } + break; + case 2: + if (!r_R2()) + { + return false; + } + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_exception1() { + var /** number */ among_var; + base.bra = base.cursor; + among_var = base.find_among(a_11); + if (among_var == 0) + { + return false; + } + base.ket = base.cursor; + if (base.cursor < base.limit) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("sky")) + { + return false; + } + break; + case 2: + if (!base.slice_from("idl")) + { + return false; + } + break; + case 3: + if (!base.slice_from("gentl")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ugli")) + { + return false; + } + break; + case 5: + if (!base.slice_from("earli")) + { + return false; + } + break; + case 6: + if (!base.slice_from("onli")) + { + return false; + } + break; + case 7: + if (!base.slice_from("singl")) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_postlude() { + if (!B_Y_found) + { + return false; + } + while(true) + { + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + golab1: while(true) + { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + base.bra = base.cursor; + if (!(base.eq_s("Y"))) + { + break lab2; + } + base.ket = base.cursor; + base.cursor = v_2; + break golab1; + } + base.cursor = v_2; + if (base.cursor >= base.limit) + { + break lab0; + } + base.cursor++; + } + if (!base.slice_from("y")) + { + return false; + } + continue; + } + base.cursor = v_1; + break; + } + return true; + }; + + this.stem = /** @return {boolean} */ function() { + lab0: { + /** @const */ var /** number */ v_1 = base.cursor; + lab1: { + if (!r_exception1()) + { + break lab1; + } + break lab0; + } + base.cursor = v_1; + lab2: { + { + /** @const */ var /** number */ v_2 = base.cursor; + lab3: { + { + /** @const */ var /** number */ c1 = base.cursor + 3; + if (c1 > base.limit) + { + break lab3; + } + base.cursor = c1; + } + break lab2; + } + base.cursor = v_2; + } + break lab0; + } + base.cursor = v_1; + r_prelude(); + r_mark_regions(); + base.limit_backward = base.cursor; base.cursor = base.limit; + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + r_Step_1a(); + base.cursor = base.limit - v_3; + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + r_Step_1b(); + base.cursor = base.limit - v_4; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + r_Step_1c(); + base.cursor = base.limit - v_5; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + r_Step_2(); + base.cursor = base.limit - v_6; + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + r_Step_3(); + base.cursor = base.limit - v_7; + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + r_Step_4(); + base.cursor = base.limit - v_8; + /** @const */ var /** number */ v_9 = base.limit - base.cursor; + r_Step_5(); + base.cursor = base.limit - v_9; + base.cursor = base.limit_backward; + /** @const */ var /** number */ v_10 = base.cursor; + r_postlude(); + base.cursor = v_10; + } + return true; + }; + + /**@return{string}*/ + this['stemWord'] = function(/**string*/word) { + base.setCurrent(word); + this.stem(); + return base.getCurrent(); + }; +}; diff --git a/_static/github-banner.svg b/_static/github-banner.svg new file mode 100644 index 0000000..c47d9dc --- /dev/null +++ b/_static/github-banner.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_static/js/badge_only.js b/_static/js/badge_only.js deleted file mode 100644 index 526d723..0000000 --- a/_static/js/badge_only.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); \ No newline at end of file diff --git a/_static/js/html5shiv-printshiv.min.js b/_static/js/html5shiv-printshiv.min.js deleted file mode 100644 index 2b43bd0..0000000 --- a/_static/js/html5shiv-printshiv.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** -* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"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",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js deleted file mode 100644 index cd1c674..0000000 --- a/_static/js/html5shiv.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** -* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"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",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js deleted file mode 100644 index 1fddb6e..0000000 --- a/_static/js/theme.js +++ /dev/null @@ -1 +0,0 @@ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - +/* Non-minified versions are copied as separate JavaScript files, if available */ +BaseStemmer=function(){this.current="",this.cursor=0,this.limit=0,this.limit_backward=0,this.bra=0,this.ket=0,this.setCurrent=function(t){this.current=t,this.cursor=0,this.limit=this.current.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},this.getCurrent=function(){return this.current},this.copy_from=function(t){this.current=t.current,this.cursor=t.cursor,this.limit=t.limit,this.limit_backward=t.limit_backward,this.bra=t.bra,this.ket=t.ket},this.in_grouping=function(t,r,i){return!(this.cursor>=this.limit||i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i))||(this.cursor++,0))},this.go_in_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.in_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward||i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i))||(this.cursor--,0))},this.go_in_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(i>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.out_grouping=function(t,r,i){return!(this.cursor>=this.limit)&&(i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i)))&&(this.cursor++,!0)},this.go_out_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.out_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward)&&(i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i)))&&(this.cursor--,!0)},this.go_out_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(s<=i&&r<=s&&0!=(t[(s-=r)>>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.eq_s=function(t){return!(this.limit-this.cursor>>1),o=0,a=e=(l=t[r])[0].length){if(this.cursor=s+l[0].length,l.length<4)return l[2];var g=l[3](this);if(this.cursor=s+l[0].length,g)return l[2]}}while(0<=(r=l[1]));return 0},this.find_among_b=function(t){for(var r=0,i=t.length,s=this.cursor,h=this.limit_backward,e=0,n=0,c=!1;;){for(var u,o=r+(i-r>>1),a=0,l=e=(u=t[r])[0].length){if(this.cursor=s-u[0].length,u.length<4)return u[2];var g=u[3](this);if(this.cursor=s-u[0].length,g)return u[2]}}while(0<=(r=u[1]));return 0},this.replace_s=function(t,r,i){var s=i.length-(r-t);return this.current=this.current.slice(0,t)+i+this.current.slice(r),this.limit+=s,this.cursor>=r?this.cursor+=s:this.cursor>t&&(this.cursor=t),s},this.slice_check=function(){return!(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length)},this.slice_from=function(t){var r=!1;return this.slice_check()&&(this.replace_s(this.bra,this.ket,t),r=!0),r},this.slice_del=function(){return this.slice_from("")},this.insert=function(t,r,i){r=this.replace_s(t,r,i);t<=this.bra&&(this.bra+=r),t<=this.ket&&(this.ket+=r)},this.slice_to=function(){var t="";return t=this.slice_check()?this.current.slice(this.bra,this.ket):t},this.assign_to=function(){return this.current.slice(0,this.limit)}}; +var EnglishStemmer=function(){var a=new BaseStemmer,c=[["arsen",-1,-1],["commun",-1,-1],["emerg",-1,-1],["gener",-1,-1],["later",-1,-1],["organ",-1,-1],["past",-1,-1],["univers",-1,-1]],o=[["'",-1,1],["'s'",0,1],["'s",-1,1]],u=[["ied",-1,2],["s",-1,3],["ies",1,2],["sses",1,1],["ss",1,-1],["us",1,-1]],t=[["succ",-1,1],["proc",-1,1],["exc",-1,1]],l=[["even",-1,2],["cann",-1,2],["inn",-1,2],["earr",-1,2],["herr",-1,2],["out",-1,2],["y",-1,1]],n=[["",-1,-1],["ed",0,2],["eed",1,1],["ing",0,3],["edly",0,2],["eedly",4,1],["ingly",0,2]],f=[["",-1,3],["bb",0,2],["dd",0,2],["ff",0,2],["gg",0,2],["bl",0,1],["mm",0,2],["nn",0,2],["pp",0,2],["rr",0,2],["at",0,1],["tt",0,2],["iz",0,1]],_=[["anci",-1,3],["enci",-1,2],["ogi",-1,14],["li",-1,16],["bli",3,12],["abli",4,4],["alli",3,8],["fulli",3,9],["lessli",3,15],["ousli",3,10],["entli",3,5],["aliti",-1,8],["biliti",-1,12],["iviti",-1,11],["tional",-1,1],["ational",14,7],["alism",-1,8],["ation",-1,7],["ization",17,6],["izer",-1,6],["ator",-1,7],["iveness",-1,11],["fulness",-1,9],["ousness",-1,10],["ogist",-1,13]],m=[["icate",-1,4],["ative",-1,6],["alize",-1,3],["iciti",-1,4],["ical",-1,4],["tional",-1,1],["ational",5,2],["ful",-1,5],["ness",-1,5]],b=[["ic",-1,1],["ance",-1,1],["ence",-1,1],["able",-1,1],["ible",-1,1],["ate",-1,1],["ive",-1,1],["ize",-1,1],["iti",-1,1],["al",-1,1],["ism",-1,1],["ion",-1,2],["er",-1,1],["ous",-1,1],["ant",-1,1],["ent",-1,1],["ment",15,1],["ement",16,1]],k=[["e",-1,1],["l",-1,2]],g=[["andes",-1,-1],["atlas",-1,-1],["bias",-1,-1],["cosmos",-1,-1],["early",-1,5],["gently",-1,3],["howe",-1,-1],["idly",-1,2],["news",-1,-1],["only",-1,6],["singly",-1,7],["skies",-1,1],["sky",-1,-1],["ugly",-1,4]],d=[17,64],v=[17,65,16,1],i=[1,17,65,208,1],w=[55,141,2],p=!1,y=0,h=0;function q(){var r=a.limit-a.cursor;return!!(a.out_grouping_b(i,89,121)&&a.in_grouping_b(v,97,121)&&a.out_grouping_b(v,97,121)||(a.cursor=a.limit-r,a.out_grouping_b(v,97,121)&&a.in_grouping_b(v,97,121)&&!(a.cursor>a.limit_backward))||(a.cursor=a.limit-r,a.eq_s_b("past")))}function z(){return h<=a.cursor}function Y(){return y<=a.cursor}this.stem=function(){var r=a.cursor;if(!(()=>{var r;if(a.bra=a.cursor,0!=(r=a.find_among(g))&&(a.ket=a.cursor,!(a.cursora.limit)a.cursor=i;else{a.cursor=e,a.cursor=r,(()=>{p=!1;var r=a.cursor;if(a.bra=a.cursor,!a.eq_s("'")||(a.ket=a.cursor,a.slice_del())){a.cursor=r;r=a.cursor;if(a.bra=a.cursor,a.eq_s("y")){if(a.ket=a.cursor,!a.slice_from("Y"))return;p=!0}a.cursor=r;for(r=a.cursor;;){var i=a.cursor;r:{for(;;){var e=a.cursor;if(a.in_grouping(v,97,121)&&(a.bra=a.cursor,a.eq_s("y"))){a.ket=a.cursor,a.cursor=e;break}if(a.cursor=e,a.cursor>=a.limit)break r;a.cursor++}if(!a.slice_from("Y"))return;p=!0;continue}a.cursor=i;break}a.cursor=r}})(),h=a.limit,y=a.limit;i=a.cursor;r:{var s=a.cursor;if(0==a.find_among(c)){if(a.cursor=s,!a.go_out_grouping(v,97,121))break r;if(a.cursor++,!a.go_in_grouping(v,97,121))break r;a.cursor++}h=a.cursor,a.go_out_grouping(v,97,121)&&(a.cursor++,a.go_in_grouping(v,97,121))&&(a.cursor++,y=a.cursor)}a.cursor=i,a.limit_backward=a.cursor,a.cursor=a.limit;var e=a.limit-a.cursor,r=((()=>{var r=a.limit-a.cursor;if(a.ket=a.cursor,0==a.find_among_b(o))a.cursor=a.limit-r;else if(a.bra=a.cursor,!a.slice_del())return;if(a.ket=a.cursor,0!=(r=a.find_among_b(u)))switch(a.bra=a.cursor,r){case 1:if(a.slice_from("ss"))break;return;case 2:r:{var i=a.limit-a.cursor,e=a.cursor-2;if(!(e{a.ket=a.cursor,o=a.find_among_b(n),a.bra=a.cursor;r:{var r=a.limit-a.cursor;i:{switch(o){case 1:var i=a.limit-a.cursor;e:{var e=a.limit-a.cursor;if(0==a.find_among_b(t)||a.cursor>a.limit_backward){if(a.cursor=a.limit-e,!z())break e;if(!a.slice_from("ee"))return}}a.cursor=a.limit-i;break;case 2:break i;case 3:if(0==(o=a.find_among_b(l)))break i;switch(o){case 1:var s=a.limit-a.cursor;if(!a.out_grouping_b(v,97,121))break i;if(a.cursor>a.limit_backward)break i;if(a.cursor=a.limit-s,a.bra=a.cursor,a.slice_from("ie"))break;return;case 2:if(a.cursor>a.limit_backward)break i}}break r}a.cursor=a.limit-r;var c=a.limit-a.cursor;if(!a.go_out_grouping_b(v,97,121))return;if(a.cursor--,a.cursor=a.limit-c,!a.slice_del())return;a.ket=a.cursor,a.bra=a.cursor;var o,c=a.limit-a.cursor;switch(o=a.find_among_b(f)){case 1:return a.slice_from("e");case 2:var u=a.limit-a.cursor;if(a.in_grouping_b(d,97,111)&&!(a.cursor>a.limit_backward))return;a.cursor=a.limit-u;break;case 3:return a.cursor!=h||(u=a.limit-a.cursor,q()&&(a.cursor=a.limit-u,a.slice_from("e")))}if(a.cursor=a.limit-c,a.ket=a.cursor,a.cursor<=a.limit_backward)return;if(a.cursor--,a.bra=a.cursor,!a.slice_del())return}})(),a.cursor=a.limit-r,a.limit-a.cursor),r=(a.ket=a.cursor,e=a.limit-a.cursor,(a.eq_s_b("y")||(a.cursor=a.limit-e,a.eq_s_b("Y")))&&(a.bra=a.cursor,a.out_grouping_b(v,97,121))&&a.cursor>a.limit_backward&&a.slice_from("i"),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(_))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ence"))break;return;case 3:if(a.slice_from("ance"))break;return;case 4:if(a.slice_from("able"))break;return;case 5:if(a.slice_from("ent"))break;return;case 6:if(a.slice_from("ize"))break;return;case 7:if(a.slice_from("ate"))break;return;case 8:if(a.slice_from("al"))break;return;case 9:if(a.slice_from("ful"))break;return;case 10:if(a.slice_from("ous"))break;return;case 11:if(a.slice_from("ive"))break;return;case 12:if(a.slice_from("ble"))break;return;case 13:if(a.slice_from("og"))break;return;case 14:if(!a.eq_s_b("l"))return;if(a.slice_from("og"))break;return;case 15:if(a.slice_from("less"))break;return;case 16:if(!a.in_grouping_b(w,99,116))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.limit-a.cursor),i=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(m))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ate"))break;return;case 3:if(a.slice_from("al"))break;return;case 4:if(a.slice_from("ic"))break;return;case 5:if(a.slice_del())break;return;case 6:if(!Y())return;if(a.slice_del())break}})(),a.cursor=a.limit-e,a.limit-a.cursor),r=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(b))&&(a.bra=a.cursor,Y()))switch(r){case 1:if(a.slice_del())break;return;case 2:var i=a.limit-a.cursor;if(!a.eq_s_b("s")&&(a.cursor=a.limit-i,!a.eq_s_b("t")))return;if(a.slice_del())break}})(),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(k)))switch(a.bra=a.cursor,r){case 1:if(!Y()){if(!z())return;var i=a.limit-a.cursor;if(q())return;a.cursor=a.limit-i}if(a.slice_del())break;return;case 2:if(!Y())return;if(!a.eq_s_b("l"))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.cursor=a.limit_backward,a.cursor);(()=>{if(p)for(;;){var r=a.cursor;r:{for(;;){var i=a.cursor;if(a.bra=a.cursor,a.eq_s("Y")){a.ket=a.cursor,a.cursor=i;break}if(a.cursor=i,a.cursor>=a.limit)break r;a.cursor++}if(a.slice_from("y"))continue;return}a.cursor=r;break}})(),a.cursor=e}}return!0},this.stemWord=function(r){return a.setCurrent(r),this.stem(),a.getCurrent()}}; +window.Stemmer = EnglishStemmer; diff --git a/_static/pygments.css b/_static/pygments.css index 6bae782..9392ddc 100644 --- a/_static/pygments.css +++ b/_static/pygments.css @@ -3,83 +3,82 @@ td.linenos .normal { color: inherit; background-color: transparent; padding-left span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #49483e } -.highlight { background: #232629; color: #cccccc } -.highlight .c { color: #777777; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .esc { color: #cccccc } /* Escape */ -.highlight .g { color: #cccccc } /* Generic */ -.highlight .k { color: #7686bb; font-weight: bold } /* Keyword */ -.highlight .l { color: #cccccc } /* Literal */ -.highlight .n { color: #cccccc } /* Name */ -.highlight .o { color: #cccccc } /* Operator */ -.highlight .x { color: #cccccc } /* Other */ -.highlight .p { color: #cccccc } /* Punctuation */ -.highlight .ch { color: #777777; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #777777; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #777777; font-style: italic } /* Comment.Preproc */ -.highlight .cpf { color: #777777; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #777777; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #777777; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #cccccc } /* Generic.Deleted */ -.highlight .ge { color: #cccccc } /* Generic.Emph */ -.highlight .ges { color: #cccccc } /* Generic.EmphStrong */ -.highlight .gr { color: #cccccc } /* Generic.Error */ -.highlight .gh { color: #cccccc } /* Generic.Heading */ -.highlight .gi { color: #cccccc } /* Generic.Inserted */ -.highlight .go { color: #cccccc } /* Generic.Output */ -.highlight .gp { color: #ffffff } /* Generic.Prompt */ -.highlight .gs { color: #cccccc } /* Generic.Strong */ -.highlight .gu { color: #cccccc } /* Generic.Subheading */ -.highlight .gt { color: #cccccc } /* Generic.Traceback */ -.highlight .kc { color: #7686bb; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #7686bb; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #7686bb; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #7686bb; font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { color: #7686bb; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #7686bb; font-weight: bold } /* Keyword.Type */ -.highlight .ld { color: #cccccc } /* Literal.Date */ -.highlight .m { color: #4FB8CC } /* Literal.Number */ -.highlight .s { color: #51cc99 } /* Literal.String */ -.highlight .na { color: #cccccc } /* Name.Attribute */ -.highlight .nb { color: #cccccc } /* Name.Builtin */ -.highlight .nc { color: #cccccc } /* Name.Class */ -.highlight .no { color: #cccccc } /* Name.Constant */ -.highlight .nd { color: #cccccc } /* Name.Decorator */ -.highlight .ni { color: #cccccc } /* Name.Entity */ -.highlight .ne { color: #cccccc } /* Name.Exception */ -.highlight .nf { color: #6a6aff } /* Name.Function */ -.highlight .nl { color: #cccccc } /* Name.Label */ -.highlight .nn { color: #cccccc } /* Name.Namespace */ -.highlight .nx { color: #e2828e } /* Name.Other */ -.highlight .py { color: #cccccc } /* Name.Property */ -.highlight .nt { color: #cccccc } /* Name.Tag */ -.highlight .nv { color: #7AB4DB; font-weight: bold } /* Name.Variable */ -.highlight .ow { color: #cccccc } /* Operator.Word */ -.highlight .pm { color: #cccccc } /* Punctuation.Marker */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #4FB8CC } /* Literal.Number.Bin */ -.highlight .mf { color: #4FB8CC } /* Literal.Number.Float */ -.highlight .mh { color: #4FB8CC } /* Literal.Number.Hex */ -.highlight .mi { color: #4FB8CC } /* Literal.Number.Integer */ -.highlight .mo { color: #4FB8CC } /* Literal.Number.Oct */ -.highlight .sa { color: #51cc99 } /* Literal.String.Affix */ -.highlight .sb { color: #51cc99 } /* Literal.String.Backtick */ -.highlight .sc { color: #51cc99 } /* Literal.String.Char */ -.highlight .dl { color: #51cc99 } /* Literal.String.Delimiter */ -.highlight .sd { color: #51cc99 } /* Literal.String.Doc */ -.highlight .s2 { color: #51cc99 } /* Literal.String.Double */ -.highlight .se { color: #51cc99 } /* Literal.String.Escape */ -.highlight .sh { color: #51cc99 } /* Literal.String.Heredoc */ -.highlight .si { color: #51cc99 } /* Literal.String.Interpol */ -.highlight .sx { color: #51cc99 } /* Literal.String.Other */ -.highlight .sr { color: #51cc99 } /* Literal.String.Regex */ -.highlight .s1 { color: #51cc99 } /* Literal.String.Single */ -.highlight .ss { color: #51cc99 } /* Literal.String.Symbol */ -.highlight .bp { color: #cccccc } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #6a6aff } /* Name.Function.Magic */ -.highlight .vc { color: #7AB4DB; font-weight: bold } /* Name.Variable.Class */ -.highlight .vg { color: #BE646C; font-weight: bold } /* Name.Variable.Global */ -.highlight .vi { color: #7AB4DB; font-weight: bold } /* Name.Variable.Instance */ -.highlight .vm { color: #7AB4DB; font-weight: bold } /* Name.Variable.Magic */ -.highlight .il { color: #4FB8CC } /* Literal.Number.Integer.Long */ \ No newline at end of file +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8F5902; font-style: italic } /* Comment */ +.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */ +.highlight .g { color: #000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000 } /* Literal */ +.highlight .n { color: #000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000 } /* Other */ +.highlight .p { color: #000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8F5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A40000 } /* Generic.Deleted */ +.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000 } /* Generic.EmphStrong */ +.highlight .gr { color: #EF2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000 } /* Literal.Date */ +.highlight .m { color: #900 } /* Literal.Number */ +.highlight .s { color: #4E9A06 } /* Literal.String */ +.highlight .na { color: #C4A000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000 } /* Name.Class */ +.highlight .no { color: #000 } /* Name.Constant */ +.highlight .nd { color: #888 } /* Name.Decorator */ +.highlight .ni { color: #CE5C00 } /* Name.Entity */ +.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000 } /* Name.Function */ +.highlight .nl { color: #F57900 } /* Name.Label */ +.highlight .nn { color: #000 } /* Name.Namespace */ +.highlight .nx { color: #000 } /* Name.Other */ +.highlight .py { color: #000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #F8F8F8 } /* Text.Whitespace */ +.highlight .mb { color: #900 } /* Literal.Number.Bin */ +.highlight .mf { color: #900 } /* Literal.Number.Float */ +.highlight .mh { color: #900 } /* Literal.Number.Hex */ +.highlight .mi { color: #900 } /* Literal.Number.Integer */ +.highlight .mo { color: #900 } /* Literal.Number.Oct */ +.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */ +.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4E9A06 } /* Literal.String.Char */ +.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */ +.highlight .se { color: #4E9A06 } /* Literal.String.Escape */ +.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4E9A06 } /* Literal.String.Other */ +.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */ +.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000 } /* Name.Function.Magic */ +.highlight .vc { color: #000 } /* Name.Variable.Class */ +.highlight .vg { color: #000 } /* Name.Variable.Global */ +.highlight .vi { color: #000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000 } /* Name.Variable.Magic */ +.highlight .il { color: #900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js index 7918c3f..e29b1c7 100644 --- a/_static/searchtools.js +++ b/_static/searchtools.js @@ -1,12 +1,5 @@ /* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ "use strict"; @@ -20,7 +13,7 @@ if (typeof Scorer === "undefined") { // and returns the new score. /* score: result => { - const [docname, title, anchor, descr, score, filename] = result + const [docname, title, anchor, descr, score, filename, kind] = result return score }, */ @@ -47,6 +40,15 @@ if (typeof Scorer === "undefined") { }; } +// Global search result kind enum, used by themes to style search results. +// prettier-ignore +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + const _removeChildren = (element) => { while (element && element.lastChild) element.removeChild(element.lastChild); }; @@ -57,6 +59,15 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +const _escapeHTML = (text) => { + return text + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """) + .replaceAll("'", "'"); +}; + const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; @@ -64,9 +75,13 @@ const _displayItem = (item, searchTerms, highlightTerms) => { const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; const contentRoot = document.documentElement.dataset.content_root; - const [docName, title, anchor, descr, score, _filename] = item; + const [docName, title, anchor, descr, score, _filename, kind] = item; let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); let requestUrl; let linkUrl; if (docBuilder === "dirhtml") { @@ -85,25 +100,30 @@ const _displayItem = (item, searchTerms, highlightTerms) => { let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; - linkEl.innerHTML = title; + linkEl.innerHTML = _escapeHTML(title); if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; + ` (${_escapeHTML(descr)})`; // highlight search terms in the description - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - } - else if (showSearchSummary) + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor), ); // highlight search terms in the summary - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); }); Search.output.appendChild(listItem); }; @@ -112,12 +132,14 @@ const _finishSearch = (resultCount) => { Search.title.innerText = _("Search Results"); if (!resultCount) Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.", ); else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace("${resultCount}", resultCount); }; const _displayNextItem = ( results, @@ -131,12 +153,28 @@ const _displayNextItem = ( _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), - 5 + 5, ); } // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -147,9 +185,10 @@ const _displayNextItem = ( * This is the same as ``\W+`` in Python, preserving the surrogate pair area. */ if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query + var splitQuery = (query) => + query .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings + .filter((term) => term); // remove remaining empty strings } /** @@ -160,13 +199,33 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString( + htmlString, + "text/html", + ); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { + el.remove(); + }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector( + `[role="main"] ${anchor}`, + ); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`, + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.", ); return ""; }, @@ -219,6 +278,7 @@ const Search = { searchSummary.classList.add("search-summary"); searchSummary.innerText = ""; const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); searchList.classList.add("search"); const out = document.getElementById("search-results"); @@ -239,16 +299,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -259,12 +310,8 @@ const Search = { const queryTermLower = queryTerm.toLowerCase(); // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; + // stopwords set is from language_data.js + if (stopwords.has(queryTermLower) || queryTerm.match(/^\d+$/)) return; // stem the word let word = stemmer.stemWord(queryTermLower); @@ -276,30 +323,63 @@ const Search = { } }); - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + if (SPHINX_HIGHLIGHT_ENABLED) { + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + localStorage.setItem( + "sphinx_highlight_terms", + [...highlightTerms].join(" "), + ); } // console.debug("SEARCH: searching for:"); // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: ( + query, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if ( + title.toLowerCase().trim().includes(queryLower) + && queryLower.length >= title.length / 2 + ) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round( + (Scorer.title * queryLower.length) / title.length, + ); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], + SearchResultKind.title, ]); } } @@ -307,53 +387,61 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + if (entry.includes(queryLower) && queryLower.length >= entry.length / 2) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round((100 * queryLower.length) / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)), ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push( + ...Search.performTermsSearch(searchTerms, excludedTerms), + ); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept let seen = new Set(); results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + let resultStr = result + .slice(0, 4) + .concat([result[5]]) + .map((v) => String(v)) + .join(","); if (!seen.has(resultStr)) { acc.push(result); seen.add(resultStr); @@ -361,7 +449,24 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [ + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ] = Search._parseQuery(query); + const results = Search._performSearch( + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ); // for debugging //Search.lastresults = results.slice(); // a copy @@ -384,7 +489,7 @@ const Search = { const results = []; const objectSearchCallback = (prefix, match) => { - const name = match[4] + const name = match[4]; const fullname = (prefix ? prefix + "." : "") + name; const fullnameLower = fullname.toLowerCase(); if (fullnameLower.indexOf(object) < 0) return; @@ -432,12 +537,11 @@ const Search = { descr, score, filenames[match[0]], + SearchResultKind.object, ]); }; Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) + objects[prefix].forEach((array) => objectSearchCallback(prefix, array)), ); return results; }, @@ -459,21 +563,33 @@ const Search = { // perform the search on the required terms searchTerms.forEach((word) => { const files = []; + // find documents, if any, containing the query word in their text/title term indices + // use Object.hasOwnProperty to avoid mismatching against prototype properties const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, + { + files: terms.hasOwnProperty(word) ? terms[word] : undefined, + score: Scorer.term, + }, + { + files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, + score: Scorer.title, + }, ]; // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -489,16 +605,17 @@ const Search = { // set score for the word in each file recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; + if (!scoreMap.has(file)) scoreMap.set(file, new Map()); + const fileScores = scoreMap.get(file); + fileScores.set(word, record.score); }); }); // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); - else fileMap.set(file, [word]); }); }); @@ -509,11 +626,11 @@ const Search = { // as search terms with length < 3 are discarded const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 + (term) => term.length > 2, ).length; if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount + wordList.length !== searchTerms.size + && wordList.length !== filteredTermCount ) continue; @@ -521,16 +638,16 @@ const Search = { if ( [...excludedTerms].some( (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) + terms[term] === file + || titleTerms[term] === file + || (terms[term] || []).includes(file) + || (titleTerms[term] || []).includes(file), ) ) break; // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w))); // add result to the result list results.push([ docNames[file], @@ -539,6 +656,7 @@ const Search = { null, score, filenames[file], + SearchResultKind.text, ]); } return results; @@ -549,8 +667,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); @@ -565,7 +683,8 @@ const Search = { let summary = document.createElement("p"); summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + summary.textContent = + top + text.substr(startWithContext, 240).trim() + tail; return summary; }, diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js index 8a96c69..a74e103 100644 --- a/_static/sphinx_highlight.js +++ b/_static/sphinx_highlight.js @@ -1,7 +1,7 @@ /* Highlighting utilities for Sphinx HTML documentation. */ "use strict"; -const SPHINX_HIGHLIGHT_ENABLED = true +const SPHINX_HIGHLIGHT_ENABLED = true; /** * highlight a given string on a node by wrapping it in @@ -13,9 +13,9 @@ const _highlight = (node, addItems, text, className) => { const parent = node.parentNode; const pos = val.toLowerCase().indexOf(text); if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") + pos >= 0 + && !parent.classList.contains(className) + && !parent.classList.contains("nohighlight") ) { let span; @@ -30,13 +30,7 @@ const _highlight = (node, addItems, text, className) => { span.appendChild(document.createTextNode(val.substr(pos, text.length))); const rest = document.createTextNode(val.substr(pos + text.length)); - parent.insertBefore( - span, - parent.insertBefore( - rest, - node.nextSibling - ) - ); + parent.insertBefore(span, parent.insertBefore(rest, node.nextSibling)); node.nodeValue = val.substr(0, pos); /* There may be more occurrences of search term in this node. So call this * function recursively on the remaining fragment. @@ -46,7 +40,7 @@ const _highlight = (node, addItems, text, className) => { if (isInSVG) { const rect = document.createElementNS( "http://www.w3.org/2000/svg", - "rect" + "rect", ); const bbox = parent.getBBox(); rect.x.baseVal.value = bbox.x; @@ -65,7 +59,7 @@ const _highlightText = (thisNode, text, className) => { let addItems = []; _highlight(thisNode, addItems, text, className); addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) + obj.parent.insertAdjacentElement("beforebegin", obj.target), ); }; @@ -73,25 +67,31 @@ const _highlightText = (thisNode, text, className) => { * Small JavaScript module for the documentation. */ const SphinxHighlight = { - /** * highlight the search words provided in localstorage in the text */ highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight // get and clear terms from localstorage const url = new URL(window.location); const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms"); + // Update history only if '?highlight' is present; otherwise it + // clears text fragments (not set in window.location by the browser) + if (url.searchParams.has("highlight")) { + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + } // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + const terms = highlight + .toLowerCase() + .split(/\s+/) + .filter((x) => x); if (terms.length === 0) return; // nothing to do // There should never be more than one element matching "div.body" @@ -107,11 +107,11 @@ const SphinxHighlight = { document .createRange() .createContextualFragment( - '" - ) + '", + ), ); }, @@ -125,7 +125,7 @@ const SphinxHighlight = { document .querySelectorAll("span.highlighted") .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") + localStorage.removeItem("sphinx_highlight_terms"); }, initEscapeListener: () => { @@ -134,10 +134,15 @@ const SphinxHighlight = { document.addEventListener("keydown", (event) => { // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) + return; + if ( + DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + && event.key === "Escape" + ) { SphinxHighlight.hideSearchWords(); event.preventDefault(); } diff --git a/compatibility/board.html b/compatibility/board.html index 8c17193..e74ea03 100644 --- a/compatibility/board.html +++ b/compatibility/board.html @@ -1,99 +1,38 @@ - - - - - Boards — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Boards — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Boards

@@ -120,7 +59,7 @@ openFPGALoader -b arty

Artix xc7a200tfbg676

OK

NT

-

AC701 ➚

+

AC701 ➚

acornCle215

Acorn CLE 215+

@@ -218,28 +157,28 @@ openFPGALoader -b arty

Artix xc7a35ticsg324

OK

OK

-

Arty-A7-35T ➚

+

Arty-A7-35T ➚

arty_a7_100t

Digilent Arty A7

Artix xc7a100tcsg324

OK

OK

-

Arty-A7-100T ➚

+

Arty-A7-100T ➚

arty_s7_25

Digilent Arty S7

Spartan7 xc7s25csga324

OK

OK

-

Arty-S7-25 ➚

+

Arty-S7-25 ➚

arty_s7_50

Digilent Arty S7

Spartan7 xc7s50csga324

OK

OK

-

Arty-S7-50 ➚

+

Arty-S7-50 ➚

arty_z7_10

Digilent Arty S7

@@ -358,14 +297,14 @@ openFPGALoader -b arty

ECP5 LFE5U-25F-6BG381C

OK

OK

-

Colorlight-i5-v7.0 ➚

+

Colorlight-i5-v7.0 ➚

colorlight-i9

Colorlight I9

ECP5 LFE5U-45F-6BG381C

OK

OK

-

Colorlight-i9-v7.2 ➚

+

Colorlight-i9-v7.2 ➚

colorlight-i9+

Colorlight I9+

@@ -470,21 +409,21 @@ openFPGALoader -b arty

ECP5G LFE5UM5G-85F

OK

OK

-

ECP5-EVN ➚

+

ECP5-EVN ➚

ecpix5

LambdaConcept ECPIX-5 (FT2232)

ECP5 LFE5UM5G-85F

OK

OK

-

ECPIX-5-45F ➚ ECPIX-5-85F ➚

+

ECPIX-5-45F ➚ ECPIX-5-85F ➚

ecpix5_r03

LambdaConcept ECPIX-5 (FT4232)

ECP5 LFE5UM5G-85F

OK

OK

-

ECPIX-5-45F ➚ ECPIX-5-85F ➚

+

ECPIX-5-45F ➚ ECPIX-5-85F ➚

fireant

Fireant Trion T8

@@ -498,7 +437,7 @@ openFPGALoader -b arty

iCE40UltraPlus UP5K

NA

OK

-

Fomu-PVT ➚

+

Fomu-PVT ➚

gr740-mini

GR740-MINI

@@ -533,56 +472,56 @@ openFPGALoader -b arty

iCE40UltraPlus UP5K

NA

AS

-

iCEBreaker ➚

+

iCEBreaker ➚

icebreaker-bitsy

iCEBreaker-bitsy

iCE40UltraPlus UP5K

NA

OK

-

iCEBreaker-bitsy-v0 ➚ iCEBreaker-bitsy-v1 ➚

+

iCEBreaker-bitsy-v0 ➚ iCEBreaker-bitsy-v1 ➚

ice40_generic

icestick

iCE40 HX1k

NA

AS

-

IceStick ➚

+

IceStick ➚

ice40_generic

iCE40-HX8K

iCE40 HX8k

OK

AS

-

iCE40-HX8K ➚

+

iCE40-HX8K ➚

ice40_generic

Olimex iCE40HX1K-EVB

iCE40 HX1k

NT

AS

-

iCE40HX1K-EVB ➚

+

iCE40HX1K-EVB ➚

ice40_generic

Olimex iCE40HX8K-EVB

iCE40 HX8k

NT

AS

-

iCE40HX8K-EVB ➚

+

iCE40HX8K-EVB ➚

ice40_generic

iCE40 UltraPlus Breakout Board (iCE40UP5K-B-EVN)

iCE40-UP5K

NT

AS

-

iCE40-UP ➚

+

iCE40-UP ➚

ice40_generic

Icezum Alhambra II

iCE40 HX4k

NT

AS

-

IceZumAlhambraII ➚

+

IceZumAlhambraII ➚

icepi-zero

Icepi Zero

@@ -596,7 +535,7 @@ openFPGALoader -b arty

Kintex7 xc7k325t

OK

NT

-

KC705 ➚

+

KC705 ➚

kcu105

Xilinx KCU105

@@ -687,14 +626,14 @@ openFPGALoader -b arty

Artix xc7a50tcsg324

OK

OK

-

Nexys4DDR ➚

+

Nexys4DDR ➚

nexys_a7_100

Digilent Nexys A7(Nexys 4 DDR)

Artix nexys_a7_100

OK

OK

-

Nexys4DDR ➚

+

Nexys4DDR ➚

nexysVideo

Digilent Nexys Video

@@ -736,7 +675,7 @@ openFPGALoader -b arty

ECP5 LFE5U-25F-8MG285C

OK (JTAG)

OK (DFU)

-

OrangeCrab-r0.2 ➚

+

OrangeCrab-r0.2 ➚

papilio_one

Papilio One

@@ -981,7 +920,7 @@ openFPGALoader -b arty

ECP5 LFE5U

OK

OK

-

ULX3S-12F ➚ ULX3S-25F ➚ ULX3S-45F ➚ ULX3S-85F ➚

+

ULX3S-12F ➚ ULX3S-25F ➚ ULX3S-45F ➚ ULX3S-85F ➚

ulx3s_dfu

Radiona ULX3S DFU mode

@@ -1086,7 +1025,7 @@ openFPGALoader -b arty

zynq7000 xc7z045ffg900

OK

NA

-

ZC706 ➚

+

ZC706 ➚

zcu102

Xilinx ZCU102

@@ -1107,7 +1046,7 @@ openFPGALoader -b arty

zynq7000 xc7z020clg484

OK

NA

-

ZedBoard ➚

+

ZedBoard ➚

zybo_z7_10

Digilent Zybo Z7-10

@@ -1163,32 +1102,94 @@ openFPGALoader -b arty -
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/compatibility/cable.html b/compatibility/cable.html index 8a9bcdc..3310e0c 100644 --- a/compatibility/cable.html +++ b/compatibility/cable.html @@ -1,99 +1,38 @@ - - - - - Cables — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Cables — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Cables

@@ -321,32 +260,94 @@ - - + - - - + +
+ + + + + + + \ No newline at end of file diff --git a/compatibility/fpga.html b/compatibility/fpga.html index 48acfb0..1823c06 100644 --- a/compatibility/fpga.html +++ b/compatibility/fpga.html @@ -1,99 +1,38 @@ - - - - - FPGAs — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + FPGAs — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
@@ -387,32 +326,94 @@ - - + - - - + +
+ + + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html index 09a0f50..34a96d7 100644 --- a/genindex.html +++ b/genindex.html @@ -1,46 +1,73 @@ - - - - - Index — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - - - - - -
- - -
- -
-
- - -
- -
-
- -
-
- - -

Index

- -
- +
+

Related Topics

+
-
-
-
-
-
-

© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.

-
Built with Sphinx using a - theme - provided by Build the Docs. - -
+ + +
-
-
- +
+ + - + + + + \ No newline at end of file diff --git a/guide/advanced.html b/guide/advanced.html index f444963..a461d97 100644 --- a/guide/advanced.html +++ b/guide/advanced.html @@ -1,109 +1,38 @@ - - - - - Advanced usage of openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Advanced usage of openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Advanced usage of openFPGALoader

@@ -231,32 +160,104 @@ openFPGALoader xxxx
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/guide/first-steps.html b/guide/first-steps.html index bb5b4eb..15cc43e 100644 --- a/guide/first-steps.html +++ b/guide/first-steps.html @@ -1,105 +1,38 @@ - - - - - First steps with openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + First steps with openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

First steps with openFPGALoader

@@ -153,37 +86,105 @@ Therefore it is preferable to use this flag if your computer is connected to mul

Troubleshooting

-

Please refer to Troubleshooting.

+

Please refer to Troubleshooting Guide.

-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/guide/install.html b/guide/install.html index cb80f2f..efa5807 100644 --- a/guide/install.html +++ b/guide/install.html @@ -1,113 +1,38 @@ - - - - - Installing openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Installing openFPGALoader — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - - + + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Installing openFPGALoader

@@ -223,7 +148,7 @@ make -j$(nproc)

Udev rules

By default, users have no access to converters. -A rule file (99-openfpgaloader.rules) for udev is provided at the root directory +A rule file (99-openfpgaloader.rules) for udev is provided at the root directory of this repository. These rules set access right and group (plugdev) when a converter is plugged.

sudo cp 99-openfpgaloader.rules /etc/udev/rules.d/
@@ -263,6 +188,58 @@ make -j
 

Windows

+
+

MSYS2 (Native Build)

+

openFPGALoader can be installed via MSYS2:

+
pacman -S mingw-w64-ucrt-x86_64-openFPGALoader
+
+
+
+
+

Cross-compilation from Linux

+

openFPGALoader can be cross-compiled for Windows from Linux using MinGW-w64. +The build system will automatically download and build the required dependencies +(libusb, libftdi).

+

Prerequisites (Debian/Ubuntu):

+
sudo apt install \
+  mingw-w64 \
+  cmake \
+  pkg-config \
+  p7zip-full
+
+
+

Prerequisites (Fedora/RHEL/Rocky):

+
sudo dnf install \
+  mingw64-gcc \
+  mingw64-gcc-c++ \
+  mingw64-zlib \
+  mingw64-zlib-static \
+  cmake \
+  p7zip \
+  p7zip-plugins
+
+
+

Build:

+
git clone https://github.com/trabucayre/openFPGALoader
+cd openFPGALoader
+mkdir build-win64
+cd build-win64
+cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-x86_64-w64-mingw32.cmake ..
+cmake --build . --parallel
+
+
+

The resulting openFPGALoader.exe will be a statically-linked executable +that only depends on standard Windows system DLLs (KERNEL32, msvcrt, WS2_32).

+

Optional: Strip debug symbols to reduce size:

+
x86_64-w64-mingw32-strip openFPGALoader.exe
+
+
+

Cross-compilation options:

+
    +
  • -DCROSS_COMPILE_DEPS=OFF - Disable automatic dependency download (use system libraries)

  • +
  • -DENABLE_CMSISDAP=ON - Enable CMSIS-DAP support (requires manually providing hidapi)

  • +
+

Common

@@ -276,32 +253,112 @@ make -j
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/guide/troubleshooting.html b/guide/troubleshooting.html index 739c12b..9b97398 100644 --- a/guide/troubleshooting.html +++ b/guide/troubleshooting.html @@ -1,110 +1,40 @@ - - - - - Troubleshooting — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Troubleshooting Guide — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- -
-

Troubleshooting

+ +
+ +
+

Troubleshooting Guide

I installed openFPGALoader but it says command not found when I try to launch it

The correct spelling of the program is openFPGALoader with FPGA and the “L” of “Loader” in uppercase. @@ -144,32 +74,103 @@ To recover you have to pull down this pin (before power up) to recover JTAG inte

-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 7b2521c..6f6643f 100644 --- a/index.html +++ b/index.html @@ -1,87 +1,37 @@ - - - - - openFPGALoader: universal utility for programming FPGA — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + openFPGALoader: universal utility for programming FPGA — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
-
- + +
+

openFPGALoader: universal utility for programming FPGA

Welcome to the documentation of openFPGALoader!

@@ -115,31 +65,93 @@ openFPGALoader works on Linux, Windows and macOS.

-
-
- -
- -
-

© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.

-
Built with Sphinx using a - theme - provided by Build the Docs. - - -
+
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv index 2d58abc..658fa2d 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/search.html b/search.html index 458e9b5..139c42f 100644 --- a/search.html +++ b/search.html @@ -1,49 +1,91 @@ - - - - - Search — openFPGALoader: universal utility for programming FPGA latest documentation - - + + + + + + Search — openFPGALoader: universal utility for programming FPGA latest documentation + + + - - - - - - + + + - - + + + + + + + - -
- - -
- -
-
- - -
-
    -
  • »
  • -
  • Search
  • -
  • -
  • -
-
+
+

Related Topics

+
- -
-
- - - -
- -
-
-
-
-
-
-

© Copyright 2019-2022, Gwenhael Goavec-Merou and contributors.

-
Built with Sphinx using a - theme - provided by Build the Docs. - -
+ + +
-
-
- - - - - +
+ + + - + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js index 5f19342..ed134ed 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["compatibility/board", "compatibility/cable", "compatibility/fpga", "guide/advanced", "guide/first-steps", "guide/install", "guide/troubleshooting", "index", "todo", "vendors/anlogic", "vendors/colognechip", "vendors/efinix", "vendors/gowin", "vendors/intel", "vendors/lattice", "vendors/xilinx"], "filenames": ["compatibility/board.rst", "compatibility/cable.rst", "compatibility/fpga.rst", "guide/advanced.rst", "guide/first-steps.rst", "guide/install.rst", "guide/troubleshooting.rst", "index.rst", "todo.rst", "vendors/anlogic.rst", "vendors/colognechip.rst", "vendors/efinix.rst", "vendors/gowin.rst", "vendors/intel.rst", "vendors/lattice.rst", "vendors/xilinx.rst"], "titles": ["Boards", "Cables", "FPGAs", "Advanced usage of openFPGALoader", "First steps with openFPGALoader", "Installing openFPGALoader", "Troubleshooting", "openFPGALoader: universal utility for programming FPGA", "To Do", "Anlogic notes", "Cologne Chip notes", "Efinix notes", "Gowin notes", "Intel notes", "Lattice notes", "Xilinx notes"], "terms": {"arti": [0, 15], "can": [0, 3, 4, 5, 6, 10, 12, 13, 15], "ani": [0, 4, 10, 13], "name": [0, 1, 13], "from": [0, 1, 4, 6, 7, 10, 12, 13], "first": [0, 5], "column": 0, "openfpgaload": [0, 9, 10, 11, 12, 13, 14, 15], "b": [0, 1, 3, 4, 9, 10, 11, 12, 13, 14, 15], "bitstream": [0, 4, 5, 9, 12, 14], "bit": [0, 4, 10, 14, 15], "load": [0, 3, 4, 12, 14], "sram": [0, 4, 6, 8, 13], "volatil": [0, 4], "f": [0, 3, 4, 9, 10, 11, 12, 14, 15], "write": [0, 4, 8, 10, 11, 12, 13, 14, 15], "flash": [0, 2, 4, 8], "non": 0, "descript": [0, 1, 2], "fpga": [0, 1, 6, 8, 10, 11, 12, 15], "memori": [0, 2, 4, 10, 13, 15], "constraint": 0, "ac701": 0, "xilinx": [0, 1, 2, 3, 5, 7], "artix": [0, 2], "7": [0, 2, 3, 5, 14], "evalu": [0, 10], "kit": 0, "xc7a200tfbg676": 0, "ok": [0, 2, 13], "nt": [0, 2], "acorncle215": 0, "acorn": 0, "cle": 0, "215": 0, "xc7a200tsbg484": 0, "alinx_ax7201": 0, "ax7201": 0, "dev": [0, 1, 4, 5], "amd": 0, "alinx_ax7203": 0, "ax7203": 0, "xc7a200tfbg484": 0, "litex": 0, "baseboard": 0, "mini": 0, "The": [0, 1, 5, 6, 10, 13, 15], "ar": [0, 3, 4, 10, 11, 13, 15], "develop": 0, "around": 0, "sqrl": 0, "": [0, 4, 5, 6, 9, 10, 12, 13, 14, 15], "nite": 0, "litefuri": 0, "alchitry_au": 0, "alchitri": [0, 15], "au": 0, "xc7a35tftg256": 0, "alchitry_au_plu": 0, "plu": 0, "xc7a100tftg256": 0, "alinx_ax516": 0, "alinx": 0, "ax516": 0, "spartan6": 0, "xc6slx16csg324": 0, "alinx_ax7101": 0, "ax": 0, "7101": 0, "xc7a100tfgg484": 0, "alinx_ax7102": 0, "7102": 0, "analogmax": [0, 13], "trenz": [0, 8, 12], "tei0010": 0, "max": [0, 2, 13], "10": [0, 2, 14], "10m08sau169c8g": 0, "svf": [0, 2], "antmicro_ddr4_test": 0, "antmicro": 0, "data": [0, 10, 13, 15], "center": 0, "dram": 0, "tester": 0, "kintex7": 0, "xc7k160t": [0, 2], "antmicro_ddr5_test": 0, "ddr5": 0, "antmicro_lpddr4_test": 0, "lpddr4": 0, "test": [0, 2, 11, 12, 13], "xc7k70t": [0, 2], "arty_a7_35t": 0, "digil": [0, 1, 4], "a7": [0, 1], "xc7a35ticsg324": 0, "35t": 0, "arty_a7_100t": 0, "xc7a100tcsg324": 0, "100t": 0, "arty_s7_25": 0, "s7": 0, "spartan7": 0, "xc7s25csga324": 0, "25": [0, 2], "arty_s7_50": 0, "xc7s50csga324": 0, "50": 0, "arty_z7_10": 0, "zynq7000": [0, 2], "xc7z010csg400": 0, "na": [0, 2], "arty_z7_20": 0, "xc7z020csg400": 0, "analog": 0, "discoveri": 0, "2": [0, 2, 3, 5, 13, 15], "xc6slx25": [0, 2], "digit": 0, "axu2cga": 0, "zynq": [0, 15], "mpsoc": [0, 15], "zynqmpsoc": [0, 2], "xczu2cg": [0, 2], "basys3": 0, "xc7a35tcpg236": 0, "cmod_s7": 0, "cmod": 0, "xc7s25csga225": 0, "gatemate_evb_jtag": [0, 1, 10], "cologn": [0, 1, 2, 7], "chip": [0, 1, 2, 3, 7], "gatem": [0, 1, 2, 10], "jtag": [0, 1, 3, 12, 13, 15], "mode": [0, 1, 2, 11, 12, 13, 15], "seri": [0, 2], "gatemate_evb_spi": [0, 1, 10], "spi": [0, 1, 3, 8, 11, 12], "gatemate_pgm_spi": [0, 10], "programm": [0, 1, 3, 4, 6, 10, 12, 14], "certusnx_versa_evn": 0, "certu": [0, 2], "nx": [0, 2], "versa": 0, "lfd2nx": [0, 2], "40": [0, 2], "certuspronx_evn": 0, "certuspro": [0, 2], "lfcpnx": [0, 2], "100": [0, 2], "certuspronx_versa_evn": 0, "cmoda7_15t": 0, "cmoda7": 0, "xc7a15tcpg236": 0, "cmoda7_35t": 0, "colorlight": [0, 5], "5a": 0, "75b": 0, "version": [0, 5, 6], "ecp5": [0, 2, 3], "lfe5u": [0, 2], "25f": 0, "6bg256c": 0, "i5": [0, 5], "6bg381c": 0, "v7": 0, "0": [0, 1, 3, 6, 8, 10, 13, 15], "i9": [0, 5], "45f": 0, "xc7a50tfgg484": 0, "crosslinknx_evn": 0, "lattic": [0, 2, 3, 7], "crosslink": [0, 2], "nexu": [0, 3], "lifcl": [0, 2], "cyc1000": [0, 13], "cyclon": [0, 2, 13], "lp": [0, 2, 3], "10cl025yu256c8g": [0, 13], "cyc5000": 0, "v": [0, 2, 6], "5ceba2u15c8": 0, "c10lp": [0, 13], "refkit": [0, 13], "10cl055yu484c8g": [0, 13], "c5g": 0, "teras": 0, "gx": [0, 2], "starter": 0, "5cgxfc5c6f27c7n": 0, "de0": [0, 13], "iii": [0, 1, 2], "ep3c16f484c6": 0, "de0nano": [0, 13], "iv": [0, 2], "e": [0, 2, 5, 10], "ep4ce22f17c6": 0, "de0nanosoc": [0, 13], "soc": [0, 2], "5csema4u23c6": 0, "de10lit": 0, "10m50daf484c7g": 0, "de10nano": 0, "5cseba6u23i7": 0, "de1soc": 0, "de1": 0, "5csema5f31c6": 0, "deca": 0, "arrow": 0, "10m50daf484c6g": 0, "dragonl": 0, "knjn": 0, "dragon": 0, "l": [0, 6], "pci": 0, "express": 0, "hdmi": 0, "xc6slx25tcsg324": 0, "ecp5_evn": 0, "5g": 0, "ecp5g": 0, "lfe5um5g": [0, 2], "85f": 0, "evn": 0, "ecpix5": [0, 1], "lambdaconcept": [0, 1], "ecpix": 0, "5": [0, 3, 14], "ft2232": [0, 1, 8], "ecpix5_r03": 0, "ft4232": [0, 1], "fireant": [0, 11], "trion": [0, 2], "t8": [0, 2], "t8f81": 0, "AS": [0, 2], "fomu": 0, "pvt": 0, "ice40ultraplu": 0, "up5k": [0, 2], "gr740": 0, "hyvision_opt01": 0, "hyvis": 0, "pcie": 0, "opt01": 0, "rev": 0, "xc7k70tfbg676": 0, "honeycomb": [0, 1, 12], "littlebe": [0, 2], "gw1n": [0, 2, 6], "2c": [0, 2], "IF": [0, 2], "hseda": 0, "xc6slx16": [0, 2], "microblaz": 0, "sdram": 0, "usb2": 0, "ftg256": 0, "ice40_gener": [0, 14], "icebreak": 0, "bitsi": 0, "v0": [0, 6], "v1": 0, "icestick": 0, "ice40": [0, 2, 3], "hx1k": [0, 2], "hx8k": [0, 2], "olimex": [0, 1], "ice40hx1k": 0, "evb": [0, 1, 14], "ice40hx8k": 0, "ultraplu": 0, "breakout": [0, 14], "ice40up5k": 0, "up": [0, 6, 12, 15], "icezum": 0, "alhambra": 0, "ii": [0, 1, 2, 5, 13], "hx4k": [0, 2], "icezumalhambraii": 0, "icepi": 0, "zero": 0, "kc705": 0, "xc7k325t": [0, 2], "kcu105": [0, 3], "kintex": [0, 2], "ultrascal": [0, 2, 15], "xcku040": [0, 2], "ffva1156": 0, "primari": [0, 2, 15], "secondari": [0, 15], "kcu116": 0, "xcku5p": [0, 2], "ffvb676": 0, "ld": 0, "konfekt": 0, "lone": 0, "dynam": 0, "corpor": 0, "machdyn": 0, "comput": [0, 4, 8], "12f": 0, "schoko": 0, "6cabga256": 0, "licheetang": [0, 9], "sipe": [0, 1, 6, 8, 12], "liche": 0, "tang": [0, 1, 12], "eagl": 0, "s20": 0, "eg4s20bg256": 0, "lilygo": 0, "t": [0, 4, 5, 12, 15], "gowin": [0, 1, 2, 7, 8], "gw1nsr": [0, 2], "lv4cqn48pc6": 0, "15": [0, 2], "machxo2evn": 0, "machxo2": [0, 2], "lcmxo2": 0, "7000he": 0, "machxo3evn": 0, "machxo3d": [0, 2, 14], "lcmxo3d": 0, "9400hc": 0, "machxo3sk": [0, 14], "machxo3lf": [0, 2], "machxo3": 0, "lcmx03lf": 0, "6900c": 0, "mlk": 0, "s200": 0, "eg4d20": [0, 2], "miliank": 0, "eg4d20eg176": 0, "mini_itx": 0, "avnet": 0, "itx": 0, "base": [0, 1, 5, 6, 11, 12, 15], "xc7z045": 0, "xc7z100": 0, "2ffg900": 0, "mimas_a7": 0, "numato": [0, 1], "system": [0, 1, 5, 6], "mima": [0, 1], "nexys_a7_50": 0, "nexi": 0, "4": [0, 2, 3], "ddr": 0, "xc7a50tcsg324": 0, "nexys4ddr": 0, "nexys_a7_100": 0, "nexysvideo": 0, "video": 0, "xem8320": 0, "opal": 0, "kelli": 0, "xcau25p": [0, 2], "2ffvb676e": 0, "tbd": [0, 2], "olimex_gatemateevb": 0, "ccgma1": 0, "gm1a1": 0, "opensourcesdrlabkintex7": 0, "open": [0, 1, 4, 5], "sourc": [0, 1, 15], "sdr": 0, "lab": 0, "325t": 0, "xc7k325tffg676": 0, "orbtrace_dfu": 0, "orbtrac": [0, 1], "dfu": [0, 1], "8bg256c": 0, "orangecrab": 0, "orang": 0, "crab": 0, "8mg285c": 0, "r0": 0, "papilio_on": 0, "papilio": [0, 1], "One": [0, 1, 13], "spartan3": [0, 15], "xc3s500e": [0, 2], "vq100": 0, "pipistrello": 0, "saanlima": 0, "lx45": 0, "xc6slx45": [0, 2], "csg324": 0, "pynq_z1": 0, "pynq": 0, "z1": 0, "xc7z020clg400": 0, "pynq_z2": 0, "z2": 0, "qmtechcyclone10": 0, "qmtech": 0, "10cl016yu484c8g": 0, "qmtechcycloneiv": 0, "cycloneiv": 0, "core": 0, "ep4ce15f23c8n": 0, "qmtechcyclonev": [0, 13], "cyclonev": 0, "5cefa2f23i7": 0, "qmtechcyclonev_5ce523": 0, "5cefa5f23i7": 0, "qmtechkintex7": 0, "genesys2": 0, "xc7k325tffg900": 0, "redpitaya14": 0, "redpitaya": 0, "stemlab": 0, "xc7z7010": 0, "125mhz": 0, "14": [0, 5], "adc": 0, "xc7z010clg400": 0, "runber": [0, 12], "seeedstudio": 0, "ef": [0, 2], "scarab": 0, "hardwar": [0, 1, 7, 10], "minispartan6": 0, "3": [0, 1, 2, 3, 10, 13], "spartanedgeaccelboard": [0, 15], "spartan": [0, 2, 15], "edg": [0, 15], "acceler": [0, 15], "xc7s15ftgb196": 0, "spec45": 0, "cern": 0, "simpl": 0, "fmc": 0, "carrier": 0, "spec": 0, "xc6slx45tfgg484": 0, "spec150": 0, "xc6slx150tfgg484": 0, "stlv7325": 0, "sitlinv": 0, "tangconsol": 0, "consol": 0, "dock": 0, "mega": 0, "60k": 0, "138k": 0, "som": 0, "arora": [0, 2], "gw5at": [0, 2], "60": [0, 2], "138": [0, 2], "tangnano": [0, 8, 12], "nano": [0, 1, 12], "1": [0, 1, 2, 3, 13, 15], "tangnano1k": [0, 12], "1k": [0, 1], "gw1nz": [0, 2], "tangnano4k": [0, 12], "4k": [0, 1, 6, 12], "4c": [0, 2], "tangnano9k": [0, 12], "9k": 0, "gw1nr": [0, 2], "9c": [0, 2], "tangnano20k": [0, 12], "20k": 0, "gw2a": [0, 2, 8], "r": [0, 3, 13], "18": 0, "c": [0, 1, 4, 10, 13, 14, 15], "tangprimer20k": [0, 12], "primer": 0, "tangprimer25k": 0, "25k": 0, "gw5a": [0, 2], "25a": 0, "lv25mg121": 0, "tangmega138k": 0, "gw5ast": [0, 2], "138b": 0, "lv138fpg676a": 0, "te0712_8": 0, "electron": [0, 1], "te0712": 0, "modul": [0, 1], "mit": 0, "tec0117": [0, 12], "9": [0, 2, 6, 14], "trion_t20_bga256_jtag": 0, "efinix": [0, 1, 2, 3, 7], "t20": 0, "bga256": 0, "t20bga256": 0, "tec0330": 0, "virtex": [0, 2], "xc7vx330t": [0, 2], "2ffg1157c": 0, "trion_t120_bga576": 0, "t120": [0, 2], "bga576": 0, "t120bga576": 0, "trion_t120_bga576_jtag": 0, "trion_ti60_f225": 0, "titanium": [0, 2], "f225": 0, "ti60f225": [0, 11], "trion_ti60_f225_jtag": 0, "ulx3": 0, "radiona": 0, "ulx3s_dfu": 0, "ulx4m_dfu": 0, "ulx4m": 0, "vec_v6": 0, "vcu118": [0, 15], "xc6vlx130tff784": 0, "vc709": 0, "connect": [0, 4, 6, 12], "virtex7": 0, "xc7vx690tffg1761": 0, "vcu108": 0, "xcvu095": [0, 2], "ffva2104": 0, "xcvu9p": [0, 2], "flga2104": 0, "vcu128": 0, "xcvu37p": 0, "fsvh2892": 0, "vcu1525": 0, "fsgd2104": 0, "xtrx": 0, "fairwav": 0, "xtrxpro": 0, "xc7a50tcpg236": 0, "xyloni_spi": [0, 11], "xyloni": 0, "usrpx300": 0, "ettu": 0, "research": 0, "usrp": 0, "x300": 0, "usrpx310": 0, "xc7k410tffg900": 0, "xmf3": 0, "pldkit": 0, "xc3s200ft256": 0, "xcf01": [0, 2], "zc702": 0, "xc7z020clg484": 0, "zc706": 0, "xc7z045ffg900": 0, "zcu102": 0, "xczu9eg": [0, 2], "zcu106": 0, "xczu7ev": 0, "zedboard": [0, 15], "zybo_z7_10": 0, "zybo": 0, "z7": 0, "zybo_z7_20": 0, "20": 0, "vmm3": 0, "efinix_jtag_ft2232": [0, 1], "port": [0, 1, 3, 6], "ti180j484": 0, "evk": 0, "etc": [0, 5, 6], "other": [0, 4, 13, 15], "step": [0, 5, 6, 13, 15], "max10_v1": [0, 13], "max10": 0, "altera": [0, 1, 7], "10m02scm153c8g": 0, "mxo2_v2": 0, "mxo2": 0, "v2": 0, "4000hc": 0, "4mg132cc": 0, "intern": [0, 2, 10], "extern": [0, 3, 4, 10, 12], "activ": [0, 2, 10, 11], "serial": [0, 2], "Not": [0, 2, 7], "avail": [0, 2, 4, 5, 13, 15], "keyword": 1, "anlogicc": 1, "anlog": [1, 2, 3, 7, 8], "adapt": [1, 4], "firmwar": [1, 6, 13, 15], "stm32": 1, "arm": 1, "usb": [1, 6, 13], "ocd": 1, "h": 1, "high": 1, "speed": 1, "IN": 1, "fast": 1, "rs232": 1, "virtual": 1, "power": [1, 6, 12], "suppli": 1, "5vdc": 1, "devic": [1, 3, 4, 5, 9, 10, 11, 12, 15], "tini": 1, "low": 1, "cost": 1, "bus_blast": 1, "dangerousprototyp": 1, "bu": 1, "blaster": [1, 13], "bus_blaster_b": 1, "interfac": [1, 6, 12, 15], "ch347_jtag": 1, "ch347": 1, "qinheng": 1, "To": [1, 3, 5, 6, 12, 13, 14, 15], "uart": 1, "ch552_jtag": 1, "ch552": [1, 8], "ft2232c": 1, "clone": [1, 5], "microcontrol": 1, "cmsisdap": [1, 5], "cmsi": [1, 5], "dap": [1, 5], "protocol": [1, 12], "hid": 1, "onli": [1, 5, 8, 11, 12, 13, 15], "gatemate_pgm": [1, 10], "pgm": 1, "ft232h": 1, "gwu2x": 1, "gwux2x": 1, "upgrad": 1, "compat": [1, 4, 7], "diglent_b": 1, "digilent_hs2": [1, 15], "hs2": 1, "digilent_hs3": 1, "hs3": 1, "dirtyjtag": 1, "dirti": 1, "probe": 1, "stm32f1": 1, "efinix_spi_ft4232": 1, "ftdi4232": 1, "A": [1, 5, 13, 15], "efinix_jtag_ft4232": 1, "efinix_spi_ft2232": 1, "ftdi2232": 1, "d": [1, 4, 5, 6, 13], "gener": [1, 11, 12, 13, 14, 15], "ftdi": [1, 4, 14], "8k": 1, "debugg": [1, 6], "bl702": 1, "rv": 1, "i": [1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15], "an": [1, 5, 6, 10, 15], "opensourc": 1, "project": [1, 9, 11, 15], "implement": 1, "bl702c": 1, "a0": 1, "stm32f042": 1, "ft2232_b": 1, "ft231x": [1, 3], "convert": [1, 4, 5], "bitbang": 1, "some": [1, 3, 4, 6, 12, 15], "limit": [1, 13], "workaround": 1, "ft232": 1, "ft232hx": 1, "mpsse": 1, "capabl": [1, 15], "ft232rl": [1, 3], "quad": [1, 15], "ft4232hp": 1, "bridg": [1, 15], "type": [1, 5, 13], "pd3": 1, "control": [1, 5], "ft4232hp_b": 1, "debug": 1, "45k": 1, "85k": 1, "jlink": 1, "segger": 1, "j": [1, 5, 11], "link": [1, 5, 11], "jlink_bas": [1, 11], "jtrace_pro": 1, "trace": 1, "pro": 1, "smt2": 1, "nc": [1, 3], "surfac": 1, "mount": 1, "program": [1, 12, 15], "lpc": 1, "link2": 1, "om13054": 1, "embed": [1, 6], "board": [1, 3, 6, 7, 14, 15], "platform": 1, "steppenprob": 1, "swd": 1, "swo": 1, "ft2232h": 1, "remot": 1, "bitgang": 1, "openocd": 1, "remote_bitbang": 1, "driver": 1, "us": [1, 4, 5, 6, 8, 9, 10, 12, 14, 15], "drive": 1, "tcp": 1, "process": 1, "tigard": 1, "ft2232hq": 1, "intel": [1, 2, 7], "ft245": 1, "epm7064": 1, "blasterii": 1, "ez": 1, "fx2": 1, "epm570": 1, "blasteriii": 1, "custom": 1, "vid": 1, "pid": 1, "xvc": 1, "client": 1, "ip": 1, "act": 1, "like": [1, 4, 15], "server": 1, "side": [1, 3], "libgpiod": [1, 5], "gpio": [1, 6, 12], "pin": [1, 6, 10, 12, 14], "linux": [1, 4, 6, 7], "host": [1, 3], "jetson": 1, "mem": 1, "have": [1, 5, 6, 12, 13, 15], "faster": [1, 4, 15], "clock": 1, "i2c": 1, "vendor": [2, 7], "model": [2, 15], "eg4": 2, "eg4s20": [2, 8], "salelf": 2, "ef2m45": 2, "ccgm1a1": 2, "ccgm1a2": 2, "ccgm1a4": 2, "ccgm1a9": 2, "ccgm1a16": 2, "ccgm1a25": 2, "t13": 2, "ti60": 2, "ti180": 2, "18c": 2, "55": 2, "cpld": [2, 13], "epm240t100c5n": [2, 13], "ep2c5t144c8n": [2, 13], "ep3c16": 2, "ce": 2, "ep4ce22": 2, "ep4ce115": 2, "ep4cgx150": 2, "5cea2": 2, "5cea5": 2, "5ceba4": 2, "5ceba9": 2, "se": 2, "5cseba6": 2, "5csema4": 2, "5csema5": 2, "stratix": 2, "g": [2, 5, 10, 13], "5sgsd5": 2, "10cl025": 2, "10m02": 2, "10m08": 2, "10m16": 2, "10m25": 2, "pof": 2, "ecp3": 2, "lfe3": 2, "70e": 2, "12": [2, 13], "45": 2, "85": 2, "lfe5um": 2, "256": 2, "640": 2, "640u": 2, "1200": 2, "1200u": 2, "2000": 2, "2000u": 2, "4000": 2, "7000": [2, 15], "4300": 2, "9400": 2, "1300": 2, "2100": 2, "6900": 2, "xc7a25t": 2, "xc7a35ti": 2, "xc7a50t": 2, "xc7a75t": 2, "xc7a100t": 2, "xc7a200t": 2, "xc7k410t": 2, "xc7k420t": 2, "xc7k480t": 2, "xc7v585t": 2, "xc7v2000t": 2, "xc7vx415t": 2, "xc7vx485t": 2, "xc7vx550t": 2, "xc7vx690t": 2, "xc7vx980t": 2, "xc7vx1140t": 2, "xc7vh580t": 2, "xc7vh870t": 2, "xcau15p": 2, "xcku035": 2, "xcku060": 2, "xcku115": 2, "xcku3p": 2, "6": [2, 3, 14], "xc6vlx130t": 2, "xcsu35p": 2, "xc3s200": 2, "xc6slx9": 2, "xc6slx45t": 2, "xc6slx150t": 2, "xc7s15": 2, "xc7s25": 2, "xc7s50": 2, "xc9500xl": 2, "xc9536xl": 2, "xc9572xl": 2, "xc95144xl": 2, "xc95188xl": 2, "xc2c": [2, 5], "xa2c": 2, "coolrunn": [2, 5], "xc2c32a": 2, "xa2c64a": 2, "xcf": 2, "xcf02": 2, "xcf04": 2, "xc7z010": 2, "xc7z020": 2, "xczu11eg": 2, "xczu17eg": 2, "option": [3, 4, 5, 9, 13, 14, 15], "If": [3, 4, 5, 6, 10, 13], "transact": 3, "unstabl": 3, "you": [3, 4, 5, 6, 12, 13, 15], "try": 3, "chang": [3, 5, 13], "invert": 3, "cat": 3, "path": [3, 5, 12], "ext": 3, "requir": [3, 5, 11, 13, 14, 15], "It": [3, 6, 9, 10, 12], "possibl": [3, 9, 10, 11, 12, 13], "through": [3, 15], "network": 3, "xxx": [3, 5], "q": [3, 13], "default": [3, 4, 5, 9, 11, 12, 13, 14, 15], "behavior": [3, 4, 13], "extens": [3, 15], "determin": 3, "parser": 3, "avoid": [3, 6, 8], "thi": [3, 4, 5, 6, 9, 11, 12, 13, 14, 15], "mechan": 3, "must": [3, 4, 5, 10, 11, 12, 13, 14, 15], "ft232r": 3, "mai": [3, 5, 6, 12, 13, 14, 15], "commun": 3, "emul": [3, 8], "user": [3, 4, 5, 13, 15], "need": [3, 5, 14, 15], "provid": [3, 4, 5, 13, 14, 15], "both": [3, 4, 15], "cabl": [3, 4, 7, 11, 13, 15], "map": [3, 5], "cft23xxx": 3, "tdi": 3, "tck": 3, "tm": 3, "where": [3, 12, 14], "ft23xxx": 3, "id": [3, 5, 11, 12], "string": 3, "valu": 3, "allow": [3, 15], "txd": 3, "rxd": 3, "rt": 3, "ct": 3, "dtr": 3, "dsr": 3, "dcd": 3, "ri": 3, "With": [3, 13, 15], "o": [3, 10, 13], "one": [3, 11, 13], "raw": 3, "binari": 3, "adress": 3, "two": [3, 4, 13, 15], "target": [3, 9, 15], "select": 3, "qspi": 3, "dump": 3, "size": [3, 15], "n_byte": 3, "mydump": 3, "bin": [3, 12, 13, 14, 15], "second": 3, "mysecondarybitstream": 3, "By": [3, 5, 14], "set": [3, 5, 10, 15], "openfpgaloader_soj_dir": 3, "overrid": 3, "export": [3, 14], "somewher": [3, 5, 9, 11, 14, 15], "xxxx": [3, 15], "packag": [4, 5, 15], "distribut": [4, 5], "window": [4, 6, 7], "msys2": 4, "maco": [4, 7], "arch": 4, "sudo": [4, 5], "pacman": [4, 5], "fedora": 4, "dnf": [4, 5], "copr": [4, 5], "enabl": [4, 5], "mobicart": [4, 5], "mingw": 4, "w64": 4, "ucrt": 4, "x86_64": 4, "brew": [4, 5], "more": [4, 6, 8, 11], "instruct": 4, "scenario": 4, "just": [4, 5], "simpli": 4, "replac": [4, 5], "my_fpga_board": 4, "list": [4, 7, 13], "command": [4, 13], "below": 4, "depend": [4, 5, 13, 15], "want": [4, 5, 15], "part": [4, 11, 15], "your": [4, 5, 6, 7, 9, 12, 15], "persist": 4, "slower": 4, "my_bitstream": 4, "when": [4, 5, 15], "file": [4, 5, 6, 10, 12, 14, 15], "doesn": 4, "come": [4, 12], "built": 4, "prefer": 4, "specifi": [4, 5, 12, 13], "my_cabl": 4, "For": [4, 6, 9, 14, 15], "signal": [4, 10], "directli": [4, 6, 11], "case": [4, 14, 15], "ad": [4, 13], "let": 4, "specif": [4, 6, 7, 14], "ttyusbx": 4, "find": 4, "therefor": 4, "flag": 4, "multipl": 4, "pleas": [4, 14], "refer": [4, 5], "repositori": 5, "apt": 5, "under": [5, 14], "guixsystem": 5, "without": [5, 13, 15], "root": 5, "privileg": 5, "necessari": 5, "done": [5, 11, 12, 14, 15], "extend": [5, 13], "servic": 5, "oper": 5, "configur": [5, 8, 13, 15], "group": 5, "plugdev": 5, "addition": 5, "should": [5, 10, 12], "regist": 5, "supplementari": 5, "field": 5, "account": 5, "declar": 5, "section": [5, 6, 12, 13], "manual": 5, "exampl": [5, 6, 11, 13, 15], "altern": 5, "could": 5, "build": [5, 9, 13], "librari": 5, "git": 5, "cmake": [5, 9], "make": [5, 9], "gcc": 5, "pkgconf": 5, "libftdi": 5, "libusb": 5, "zlib": 5, "hidapi": 5, "gzip": 5, "similar": 5, "applic": 5, "libftdi1": 5, "so": [5, 11, 12, 14, 15], "header": 5, "too": [5, 6], "libhidapi": 5, "hidraw0": 5, "libudev": 5, "zlib1g": 5, "pkg": 5, "config": 5, "eudev": 5, "support": [5, 7, 8, 9, 11, 12, 13, 14, 15], "hi": 5, "xx": 5, "node": 5, "don": 5, "denable_udev": 5, "off": [5, 13], "denable_cmsisdap": 5, "locat": 5, "duse_pkgconfig": 5, "dlibusb_librari": 5, "path_to_libusb": 5, "dlibftdi_librari": 5, "path_to_libftdi": 5, "dlibftdi_vers": 5, "dcmake_cxx_flag": 5, "libusb_include_dir": 5, "libftdi1_include_dir": 5, "also": [5, 7, 12, 14], "add": [5, 8, 9], "see": [5, 13, 15], "error": [5, 8], "between": [5, 14], "pthread": 5, "dlink_cmake_thread": 5, "ON": [5, 13], "denable_libgpiod": 5, "additionali": 5, "app": 5, "http": 5, "github": 5, "com": 5, "trabucayr": 5, "cd": [5, 9], "mkdir": [5, 9], "dbuild_stat": 5, "static": 5, "disabl": [5, 13], "nproc": 5, "usr": 5, "local": 5, "dcmake_install_prefix": 5, "myinstalldir": 5, "invok": 5, "access": [5, 8, 11, 14, 15], "99": [5, 6], "directori": [5, 9, 15], "These": 5, "right": 5, "plug": 5, "cp": 5, "udevadm": 5, "reload": 5, "trigger": 5, "forc": [5, 15], "take": 5, "new": 5, "usermod": 5, "after": [5, 10, 13], "unplug": 5, "replug": 5, "member": 5, "howev": [5, 6], "updat": [5, 6, 13], "taken": 5, "immedi": 5, "logout": 5, "current": [5, 8, 9, 11, 15], "session": 5, "login": 5, "again": [5, 6], "check": [5, 6, 7, 14, 15], "mention": [5, 13], "temporari": 5, "solut": 5, "seen": 5, "work": [5, 7, 8], "termin": 5, "homebrew": 5, "formula": 5, "hand": 5, "remap": 5, "ship": 5, "ISE": 5, "time": [5, 13], "dise_path": 5, "ise_v": 5, "opt": 5, "correct": 6, "spell": 6, "loader": 6, "uppercas": 6, "ensur": 6, "detect": [6, 12], "jtagsel_n": [6, 12], "08": [6, 12], "recov": [6, 12], "pull": [6, 12], "down": [6, 12], "befor": [6, 12], "ug292": [6, 12], "jtagsell_n": [6, 12], "hub": 6, "pc": 6, "older": 6, "than": [6, 11, 15], "releas": 6, "most": [6, 14], "recent": 6, "commit": 6, "f5b89bff68a5e2147404a895c075773884077438": 6, "later": 6, "2024122312": 6, "seem": 6, "wa": 6, "publish": 6, "websit": 6, "sold": 6, "caus": 6, "problem": 6, "easili": 6, "follow": [6, 9], "eras": [6, 13], "its": 6, "offici": [6, 15], "preferenti": 6, "edit": 6, "udev": 6, "rule": 6, "exchang": 6, "permiss": 6, "inform": [6, 15], "guid": 6, "welcom": 7, "document": [7, 8], "mani": 7, "major": 7, "manufactur": 7, "sure": 7, "checkout": 7, "improv": 8, "messag": 8, "precis": 8, "catch": 8, "all": [8, 13], "except": 8, "code": 8, "api": 8, "fix": 8, "fail": [8, 12], "busblast": 8, "frequenc": 8, "freq": 8, "arg": [8, 15], "maximum": 8, "rework": 8, "cyclone10": 8, "eeprom": 8, "interfaceb": 8, "checksum": 8, "tangprim": 8, "spiflash": 8, "class": 8, "abl": 8, "everywher": 8, "offset": [8, 10, 13], "hardcod": 8, "m": [9, 11, 12, 14, 15], "prj": 9, "sinc": [9, 11, 12, 14], "argument": [9, 12, 13, 14], "produc": [9, 15], "td": 9, "tool": [9, 15], "chain": [9, 11, 15], "creat": 9, "prjtang": 9, "now": 9, "call": 9, "tangbit": 9, "present": [9, 14], "ha": [9, 15], "input": 9, "paramet": [10, 13], "bitfil": [10, 15], "ascii": 10, "equival": [10, 13], "cfg": 10, "perform": 10, "reset": 10, "latch": 10, "via": [10, 12], "cfg_md": 10, "0xc": 10, "0x4": 10, "passiv": 10, "bypass": 10, "start": [10, 13], "automat": [10, 13], "store": [10, 13], "point": 10, "share": 10, "same": [10, 12, 14], "hold": 10, "desir": 10, "0x0": [10, 15], "format": [11, 12, 14, 15], "efin": 11, "noth": [11, 12, 14, 15], "special": [11, 12, 14, 15], "wip": 11, "outflow": 11, "autodetect": 11, "ram": [11, 15], "eg": 11, "index": [11, 15], "cli": 12, "destin": 12, "board_nam": 12, "impl": 12, "pnr": 12, "mspi": 12, "bscan": 12, "instead": 12, "revers": 12, "engin": 12, "function": 12, "consid": [12, 15], "experiment": 12, "hasn": 12, "been": 12, "thoroughli": 12, "circumst": 12, "destroi": 12, "extra": 12, "space": 12, "read": [12, 15], "written": [12, 13], "logic": 12, "rbf": 13, "sof": 13, "quartus_cpf": 13, "0mhz": 13, "n": 13, "p": 13, "project_nam": [13, 14], "bitstream_compress": 13, "As": 13, "handbook": 13, "real": 13, "decompress": 13, "keep": 13, "mind": 13, "quartu": 13, "line": 13, "qsf": 13, "includ": 13, "them": [13, 15], "tcl": [13, 15], "fusesoc": 13, "set_global_assign": 13, "on_chip_bitstream_decompress": 13, "generate_rbf_fil": 13, "generate_svf_fil": 13, "boardnam": 13, "rpd": 13, "auto_create_rpd": 13, "epcq16a": 13, "jic": 13, "project_name_auto": 13, "divid": 13, "five": 13, "ufm1": 13, "ufm0": 13, "cfm2": 13, "cfm1": 13, "cfm0": 13, "usag": 13, "In": [13, 15], "remain": 13, "cfmx": 13, "addit": 13, "method": 13, "simplest": 13, "slowest": 13, "wai": 13, "cablenam": 13, "the_svf_fil": 13, "fastest": 13, "approach": 13, "sector": [13, 14], "the_pof_fil": 13, "comma": 13, "separ": 13, "omit": 13, "entir": 13, "reprogram": 13, "accept": 13, "leav": 13, "unchang": 13, "unlik": 13, "featur": 13, "gatewar": 13, "modif": 13, "rebuild": 13, "softcor": [13, 15], "cpu": [13, 15], "basic": 13, "the_bin_fil": 13, "byte": 13, "address": 13, "0x00": 13, "content": 13, "pictur": 13, "area": 13, "explictli": 13, "ufmx": 13, "cfmy": 13, "x": 13, "y": 13, "jed": 14, "diamond": 14, "yourboard": 14, "cfg0": 14, "impl1": 14, "machx02evn": 14, "machx03evn": 14, "left": 14, "panel": 14, "nextpnr": 14, "pinout": 14, "ice40hxxk": 14, "onboard": 14, "si": 14, "adbus1": 14, "8": 14, "sck": 14, "adbus0": 14, "adbus2": 14, "abdus4": 14, "rst": 14, "adbus6": 14, "adbus7": 14, "direct": 14, "yourcabl": 14, "famili": 14, "mc": [14, 15], "prom": 14, "simplifi": 15, "further": 15, "explan": 15, "we": 15, "pinhead": 15, "spioverjtag": 15, "ye": 15, "independ": 15, "classic": 15, "doubl": 15, "anyth": 15, "vivado": 15, "task": 15, "gui": 15, "bin_fil": 15, "append": 15, "set_properti": 15, "write_bitstream": 15, "true": 15, "get_run": 15, "impl_1": 15, "buswidth": 15, "boot": 15, "jp7": 15, "jp11": 15, "gnd": 15, "run": 15, "script": 15, "pl": 15, "lindex": 15, "argv": 15, "mcsfile": 15, "write_cfgmem": 15, "spix4": 15, "16": 15, "loadbit": 15, "loaddata": 15, "nolog": 15, "nojourn": 15, "batch": 15, "tclarg": 15, "myproject": 15, "hpp": 15, "level": 15, "someth": 15, "xc7a35tcsg324": 15, "src": 15, "kcu16": 15, "spix8": 15, "dual": 15, "abov": 15, "fit": 15, "bigger": 15, "design": 15, "_primari": 15, "_secondari": 15, "On": 15, "each": 15, "arbitrari": 15, "relat": 15, "arbitrary_data": 15}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"board": [0, 4, 8, 10, 11, 13], "cabl": [1, 8, 10], "fpga": [2, 3, 4, 7, 13], "advanc": 3, "usag": [3, 11], "openfpgaload": [3, 4, 5, 6, 7], "reset": 3, "an": [3, 4, 13], "us": [3, 13], "neg": 3, "edg": 3, "tdo": 3, "": 3, "sampl": 3, "read": 3, "bitstream": [3, 6, 13, 15], "from": [3, 5], "stdin": 3, "automat": 3, "file": [3, 9, 11, 13], "type": 3, "detect": 3, "bypass": 3, "ft231": 3, "ft232": 3, "bitbang": 3, "mode": [3, 10], "pin": 3, "configur": [3, 10], "write": 3, "arbitrari": [3, 13], "address": 3, "flash": [3, 6, 9, 10, 11, 12, 13, 14, 15], "memori": [3, 9, 14], "primari": 3, "secondari": 3, "altern": 3, "directori": 3, "spioverjtag": 3, "first": 4, "step": 4, "instal": [4, 5, 6], "program": [4, 6, 7, 10, 13], "develop": 4, "standalon": 4, "troubleshoot": [4, 6], "linux": 5, "debian": 5, "ubuntu": 5, "guix": 5, "arch": 5, "fedora": 5, "sourc": 5, "udev": 5, "rule": 5, "maco": 5, "window": 5, "common": 5, "i": 6, "sai": 6, "command": 6, "found": 6, "when": 6, "try": 6, "launch": 6, "gowin": [6, 12], "devic": [6, 8], "could": 6, "commun": 6, "sinc": 6, "last": 6, "issu": 6, "206": 6, "jtag": [6, 10, 11], "init": 6, "fail": 6, "tang": [6, 9], "primer": 6, "20k": 6, "slow": 6, "stuck": 6, "250": 6, "cannot": 6, "nano": 6, "251": 6, "9k": 6, "unabl": 6, "open": 6, "ftdi": 6, "4": 6, "usb_open": 6, "245": 6, "univers": 7, "util": 7, "To": 8, "do": 8, "global": 8, "misc": 8, "anlog": 9, "note": [9, 10, 11, 12, 13, 14, 15], "sipe": 9, "liche": 9, "bit": 9, "load": [9, 11, 13, 15], "spi": [9, 10, 13, 14, 15], "svf": [9, 13], "cologn": 10, "chip": 10, "support": 10, "access": 10, "efinix": 11, "firant": 11, "xyloni": 11, "trion": 11, "t8": 11, "hex": 11, "titanium": 11, "bin": 11, "gw1n": 12, "sram": [12, 14], "user": 12, "intel": 13, "altera": 13, "max10": 13, "guid": 13, "intern": 13, "organ": 13, "pof": 13, "binari": 13, "old": 13, "serial": 13, "vector": 13, "format": 13, "lattic": 14, "machxo2": 14, "machxo3": 14, "ice40": 14, "ecp5": 14, "ecp3": 14, "certu": 14, "nx": 14, "certuspro": 14, "crosslink": 14, "xilinx": 15}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 60}, "alltitles": {"Boards": [[0, "boards"]], "Cables": [[1, "cables"]], "FPGAs": [[2, "fpgas"]], "Advanced usage of openFPGALoader": [[3, "advanced-usage-of-openfpgaloader"]], "Resetting an FPGA": [[3, "resetting-an-fpga"]], "Using negative edge for TDO\u2019s sampling": [[3, "using-negative-edge-for-tdo-s-sampling"]], "Reading the bitstream from STDIN": [[3, "reading-the-bitstream-from-stdin"]], "Automatic file type detection bypass": [[3, "automatic-file-type-detection-bypass"]], "FT231/FT232 bitbang mode and pins configuration": [[3, "ft231-ft232-bitbang-mode-and-pins-configuration"]], "Writing to an arbitrary address in flash memory": [[3, "writing-to-an-arbitrary-address-in-flash-memory"]], "Detect/read/write on primary/secondary flash memories": [[3, "detect-read-write-on-primary-secondary-flash-memories"]], "Using an alternative directory for spiOverJtag": [[3, "using-an-alternative-directory-for-spioverjtag"]], "First steps with openFPGALoader": [[4, "first-steps-with-openfpgaloader"]], "Install": [[4, "install"]], "Programming a development board": [[4, "programming-a-development-board"]], "Programming an \u201cstandalone\u201d FPGA": [[4, "programming-an-standalone-fpga"]], "Troubleshooting": [[4, "troubleshooting"], [6, "troubleshooting"]], "Installing openFPGALoader": [[5, "installing-openfpgaloader"]], "Linux": [[5, "linux"]], "Debian/Ubuntu": [[5, "debian-ubuntu"]], "Guix": [[5, "guix"]], "Arch Linux": [[5, "arch-linux"]], "Fedora": [[5, "fedora"]], "From source": [[5, "from-source"]], "Udev rules": [[5, "udev-rules"]], "macOS": [[5, "macos"]], "Windows": [[5, "windows"]], "Common": [[5, "common"]], "I installed openFPGALoader but it says command not found when I try to launch it": [[6, "i-installed-openfpgaloader-but-it-says-command-not-found-when-i-try-to-launch-it"]], "Gowin device could not communicate since last bitstream flashed. (issue #206)": [[6, "gowin-device-could-not-communicate-since-last-bitstream-flashed-issue-206"]], "JTAG init failed": [[6, "jtag-init-failed"]], "Tang Primer 20k program slow and stucked (issue #250)": [[6, "tang-primer-20k-program-slow-and-stucked-issue-250"]], "Cannot flash Tang Nano 20k (issue #251)": [[6, "cannot-flash-tang-nano-20k-issue-251"]], "Cannot flash Tang Nano 9k (issue #251)": [[6, "cannot-flash-tang-nano-9k-issue-251"]], "Unable to open FTDI device: -4 (usb_open() failed) (issue #245)": [[6, "unable-to-open-ftdi-device-4-usb-open-failed-issue-245"]], "openFPGALoader: universal utility for programming FPGA": [[7, "openfpgaloader-universal-utility-for-programming-fpga"]], "To Do": [[8, "to-do"]], "Global": [[8, "global"]], "Cable": [[8, "cable"]], "Devices/boards": [[8, "devices-boards"]], "Misc": [[8, "misc"]], "Anlogic notes": [[9, "anlogic-notes"]], "Sipeed Lichee Tang": [[9, "sipeed-lichee-tang"]], "bit file load (memory)": [[9, "bit-file-load-memory"]], "bit file load (spi flash)": [[9, "bit-file-load-spi-flash"]], "svf file load": [[9, "svf-file-load"]], "Cologne Chip notes": [[10, "cologne-chip-notes"]], "Supported Boards/Cables": [[10, "supported-boards-cables"]], "Programming Modes": [[10, "programming-modes"]], "JTAG Configuration": [[10, "jtag-configuration"]], "SPI Configuration": [[10, "spi-configuration"]], "JTAG Flash Access": [[10, "jtag-flash-access"]], "SPI Flash Access": [[10, "spi-flash-access"]], "Efinix notes": [[11, "efinix-notes"]], "Firant and Xyloni boards (efinix trion T8)": [[11, "firant-and-xyloni-boards-efinix-trion-t8"]], "hex file load": [[11, "hex-file-load"]], "Trion and Titanium JTAG usage": [[11, "trion-and-titanium-jtag-usage"]], "bin file load": [[11, "bin-file-load"]], "hex file flash": [[11, "hex-file-flash"]], "Gowin notes": [[12, "gowin-notes"]], "GOWIN GW1N": [[12, "gowin-gw1n"]], "Flash SRAM": [[12, "flash-sram"]], "Flash": [[12, "flash"]], "User Flash": [[12, "user-flash"]], "Intel notes": [[13, "intel-notes"]], "Intel/Altera": [[13, "intel-altera"]], "Loading a bitstream": [[13, "loading-a-bitstream"], [15, "loading-a-bitstream"]], "SPI flash": [[13, "spi-flash"], [15, "spi-flash"]], "MAX10: FPGA Programming Guide": [[13, "max10-fpga-programming-guide"]], "Internal Flash Organization": [[13, "internal-flash-organization"]], "Using svf": [[13, "using-svf"]], "Using pof": [[13, "using-pof"]], "Using an arbitrary binary file": [[13, "using-an-arbitrary-binary-file"]], "Intel/Altera (Old Boards)": [[13, "intel-altera-old-boards"]], "Loading a Serial Vector Format (.svf)": [[13, "loading-a-serial-vector-format-svf"]], "Lattice notes": [[14, "lattice-notes"]], "MachXO2/MachXO3": [[14, "machxo2-machxo3"]], "Flash memory": [[14, "flash-memory"]], "SRAM": [[14, "sram"], [14, "id1"]], "iCE40": [[14, "ice40"]], "ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX": [[14, "ecp5-ecp3-certus-nx-certuspro-nx-crosslink-nx"]], "SPI Flash": [[14, "spi-flash"]], "Xilinx notes": [[15, "xilinx-notes"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"alltitles":{"Advanced usage of openFPGALoader":[[3,null]],"Anlogic notes":[[9,null]],"Arch Linux":[[5,"arch-linux"]],"Automatic file type detection bypass":[[3,"automatic-file-type-detection-bypass"]],"Boards":[[0,null]],"Cable":[[8,"cable"]],"Cables":[[1,null]],"Cannot flash Tang Nano 20k (issue #251)":[[6,"cannot-flash-tang-nano-20k-issue-251"]],"Cannot flash Tang Nano 9k (issue #251)":[[6,"cannot-flash-tang-nano-9k-issue-251"]],"Cologne Chip notes":[[10,null]],"Common":[[5,"common"]],"Cross-compilation from Linux":[[5,"cross-compilation-from-linux"]],"Debian/Ubuntu":[[5,"debian-ubuntu"]],"Detect/read/write on primary/secondary flash memories":[[3,"detect-read-write-on-primary-secondary-flash-memories"]],"Devices/boards":[[8,"devices-boards"]],"ECP5/ECP3/Certus-NX/CertusPro-NX/Crosslink-NX":[[14,"ecp5-ecp3-certus-nx-certuspro-nx-crosslink-nx"]],"Efinix notes":[[11,null]],"FPGAs":[[2,null]],"FT231/FT232 bitbang mode and pins configuration":[[3,"ft231-ft232-bitbang-mode-and-pins-configuration"]],"Fedora":[[5,"fedora"]],"Firant and Xyloni boards (efinix trion T8)":[[11,"firant-and-xyloni-boards-efinix-trion-t8"]],"First steps with openFPGALoader":[[4,null]],"Flash":[[12,"flash"]],"Flash SRAM":[[12,"flash-sram"]],"Flash memory":[[14,"flash-memory"]],"From source":[[5,"from-source"]],"GOWIN GW1N":[[12,"gowin-gw1n"]],"Global":[[8,"global"]],"Gowin device could not communicate since last bitstream flashed. (issue #206)":[[6,"gowin-device-could-not-communicate-since-last-bitstream-flashed-issue-206"]],"Gowin notes":[[12,null]],"Guix":[[5,"guix"]],"I installed openFPGALoader but it says command not found when I try to launch it":[[6,"i-installed-openfpgaloader-but-it-says-command-not-found-when-i-try-to-launch-it"]],"Install":[[4,"install"]],"Installing openFPGALoader":[[5,null]],"Intel notes":[[13,null]],"Intel/Altera":[[13,"intel-altera"]],"Intel/Altera (Old Boards)":[[13,"intel-altera-old-boards"]],"Internal Flash Organization":[[13,"internal-flash-organization"]],"JTAG Configuration":[[10,"jtag-configuration"]],"JTAG Flash Access":[[10,"jtag-flash-access"]],"JTAG init failed":[[6,"jtag-init-failed"]],"Lattice notes":[[14,null]],"Linux":[[5,"linux"]],"Loading a Serial Vector Format (.svf)":[[13,"loading-a-serial-vector-format-svf"]],"Loading a bitstream":[[13,"loading-a-bitstream"],[15,"loading-a-bitstream"]],"MAX10: FPGA Programming Guide":[[13,"max10-fpga-programming-guide"]],"MSYS2 (Native Build)":[[5,"msys2-native-build"]],"MachXO2/MachXO3":[[14,"machxo2-machxo3"]],"Misc":[[8,"misc"]],"Programming Modes":[[10,"programming-modes"]],"Programming a development board":[[4,"programming-a-development-board"]],"Programming an \u201cstandalone\u201d FPGA":[[4,"programming-an-standalone-fpga"]],"Reading the bitstream from STDIN":[[3,"reading-the-bitstream-from-stdin"]],"Resetting an FPGA":[[3,"resetting-an-fpga"]],"SPI Configuration":[[10,"spi-configuration"]],"SPI Flash":[[14,"spi-flash"]],"SPI Flash Access":[[10,"spi-flash-access"]],"SPI flash":[[13,"spi-flash"],[15,"spi-flash"]],"SRAM":[[14,"sram"],[14,"id1"]],"Sipeed Lichee Tang":[[9,"sipeed-lichee-tang"]],"Supported Boards/Cables":[[10,"supported-boards-cables"]],"Tang Primer 20k program slow and stucked (issue #250)":[[6,"tang-primer-20k-program-slow-and-stucked-issue-250"]],"To Do":[[8,null]],"Trion and Titanium JTAG usage":[[11,"trion-and-titanium-jtag-usage"]],"Troubleshooting":[[4,"troubleshooting"]],"Troubleshooting Guide":[[6,null]],"Udev rules":[[5,"udev-rules"]],"Unable to open FTDI device: -4 (usb_open() failed) (issue #245)":[[6,"unable-to-open-ftdi-device-4-usb-open-failed-issue-245"]],"User Flash":[[12,"user-flash"]],"Using an alternative directory for spiOverJtag":[[3,"using-an-alternative-directory-for-spioverjtag"]],"Using an arbitrary binary file":[[13,"using-an-arbitrary-binary-file"]],"Using negative edge for TDO\u2019s sampling":[[3,"using-negative-edge-for-tdo-s-sampling"]],"Using pof":[[13,"using-pof"]],"Using svf":[[13,"using-svf"]],"Windows":[[5,"windows"]],"Writing to an arbitrary address in flash memory":[[3,"writing-to-an-arbitrary-address-in-flash-memory"]],"Xilinx notes":[[15,null]],"bin file load":[[11,"bin-file-load"]],"bit file load (memory)":[[9,"bit-file-load-memory"]],"bit file load (spi flash)":[[9,"bit-file-load-spi-flash"]],"hex file flash":[[11,"hex-file-flash"]],"hex file load":[[11,"hex-file-load"]],"iCE40":[[14,"ice40"]],"macOS":[[5,"macos"]],"openFPGALoader: universal utility for programming FPGA":[[7,null]],"svf file load":[[9,"svf-file-load"]]},"docnames":["compatibility/board","compatibility/cable","compatibility/fpga","guide/advanced","guide/first-steps","guide/install","guide/troubleshooting","index","todo","vendors/anlogic","vendors/colognechip","vendors/efinix","vendors/gowin","vendors/intel","vendors/lattice","vendors/xilinx"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1},"filenames":["compatibility/board.rst","compatibility/cable.rst","compatibility/fpga.rst","guide/advanced.rst","guide/first-steps.rst","guide/install.rst","guide/troubleshooting.rst","index.rst","todo.rst","vendors/anlogic.rst","vendors/colognechip.rst","vendors/efinix.rst","vendors/gowin.rst","vendors/intel.rst","vendors/lattice.rst","vendors/xilinx.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"0mhz":13,"0x0":[10,15],"0x00":13,"0x4":10,"0xc":10,"100t":0,"10cl016yu484c8g":0,"10cl025":2,"10cl025yu256c8g":[0,13],"10cl055yu484c8g":[0,13],"10m02":2,"10m02scm153c8g":0,"10m08":2,"10m08sau169c8g":0,"10m16":2,"10m25":2,"10m50daf484c6g":0,"10m50daf484c7g":0,"1200u":2,"125mhz":0,"12f":0,"138b":0,"138k":0,"18c":2,"1k":[0,1],"2000u":2,"20k":0,"25a":0,"25f":0,"25k":0,"2c":[0,2],"2ffg1157c":0,"2ffg900":0,"2ffvb676e":0,"325t":0,"35t":0,"4000hc":0,"45f":0,"45k":1,"4c":[0,2],"4k":[0,1,6,12],"4mg132cc":0,"5a":0,"5cea2":2,"5cea5":2,"5ceba2u15c8":0,"5ceba4":2,"5ceba9":2,"5cefa2f23i7":0,"5cefa5f23i7":0,"5cgxfc5c6f27c7n":0,"5cseba6":2,"5cseba6u23i7":0,"5csema4":2,"5csema4u23c6":0,"5csema5":2,"5csema5f31c6":0,"5g":0,"5sgsd5":2,"5vdc":1,"60k":0,"640u":2,"6900c":0,"6bg256c":0,"6bg381c":0,"6cabga256":0,"7000he":0,"70e":2,"75b":0,"85f":0,"85k":1,"8bg256c":0,"8k":1,"8mg285c":0,"9400hc":0,"9c":[0,2],"9k":0,"A":[1,5,13,15],"AS":[0,2],"After":5,"An":5,"As":13,"By":[3,5,14],"For":[4,6,9,14,15],"I":[1,5],"IF":[0,2],"IN":1,"If":[3,4,5,6,10,13],"In":[13,15],"It":[3,6,9,10,12],"More":4,"Not":[0,2,7],"OFF":[5,13],"ON":[5,13],"On":15,"SO":14,"Some":[6,15],"The":[0,1,5,6,10,13,15],"These":5,"This":[5,6,12,13],"To":[1,3,5,6,12,13,14,15],"UP":0,"When":4,"With":[3,13,15],"You":[5,13],"_primari":15,"_secondari":15,"a0":1,"a7":[0,1],"abdus4":14,"abl":8,"abov":15,"ac701":0,"acceler":[0,15],"accept":13,"access":[5,8,11,14,15],"account":5,"acorn":0,"acorncle215":0,"act":1,"activ":[0,2,10,11],"adapt":[1,4],"adbus0":14,"adbus1":14,"adbus2":14,"adbus6":14,"adbus7":14,"adc":0,"add":[4,5,8,9,13],"addit":[5,13],"additionali":5,"address":13,"adress":3,"alchitri":[0,15],"alchitry_au":0,"alchitry_au_plus":0,"alhambra":0,"alinx":0,"alinx_ax516":0,"alinx_ax7101":0,"alinx_ax7102":0,"alinx_ax7201":0,"alinx_ax7203":0,"allow":[3,15],"also":[5,7,12,14],"altera":[0,1,7],"altern":5,"amd":0,"analog":0,"analogmax":[0,13],"ani":[0,4,10,13],"anlog":[1,2,3,7,8],"anlogicc":1,"antmicro":0,"antmicro_ddr4_test":0,"antmicro_ddr5_test":0,"antmicro_lpddr4_test":0,"anyth":15,"api":8,"app":5,"append":15,"applic":5,"approach":13,"apt":5,"arbitrari":15,"arbitrary_data":15,"arch":4,"area":13,"arg":[8,15],"argument":[9,12,13,14],"argv":15,"arm":1,"arora":[0,2],"around":0,"arrow":0,"arti":[0,15],"artix":[0,2],"arty_a7_100t":0,"arty_a7_35t":0,"arty_s7_25":0,"arty_s7_50":0,"arty_z7_10":0,"arty_z7_20":0,"ascii":10,"au":0,"auto_create_rpd":13,"autodetect":11,"automat":[5,10,13],"avail":[0,2,4,5,13,15],"avnet":0,"avoid":[3,6,8],"ax":0,"ax516":0,"ax7201":0,"ax7203":0,"axu2cga":0,"b":[0,1,3,4,9,10,11,12,13,14,15],"base":[0,1,5,6,11,12,15],"baseboard":0,"basic":13,"basys3":0,"batch":15,"befor":[6,12],"behavior":[3,4,13],"bga256":0,"bga576":0,"bigger":15,"bin":[3,12,13,14,15],"bin_fil":15,"binari":3,"bit":[0,4,10,14,15],"bitbang":1,"bitfil":[10,15],"bitgang":1,"bitsi":0,"bitstream":[0,4,5,9,12,14],"bitstream_compress":13,"bl702":1,"bl702c":1,"blaster":[1,13],"blasterii":1,"blasteriii":1,"board":[1,3,6,7,14,15],"board_nam":12,"boardnam":13,"boot":15,"breakout":[0,14],"brew":[4,5],"bridg":[1,15],"bscan":12,"build":[9,13],"built":4,"bus":1,"bus_blast":1,"bus_blaster_b":1,"busblast":8,"buswidth":15,"bypass":10,"byte":13,"c":[0,1,4,5,10,13,14,15],"c10lp":[0,13],"c5g":0,"cabl":[3,4,7,11,13,15],"cablenam":13,"call":9,"can":[0,3,4,5,6,10,12,13,15],"capabl":[1,15],"carrier":0,"case":[4,14,15],"cat":3,"catch":8,"caus":6,"ccgm1a1":2,"ccgm1a16":2,"ccgm1a2":2,"ccgm1a25":2,"ccgm1a4":2,"ccgm1a9":2,"ccgma1":0,"cd":[5,9],"ce":2,"center":0,"cern":0,"certus":[0,2],"certusnx_versa_evn":0,"certuspro":[0,2],"certuspronx_evn":0,"certuspronx_versa_evn":0,"cfg":10,"cfg0":14,"cfg_md":10,"cfm0":13,"cfm1":13,"cfm2":13,"cfmi":13,"cfmx":13,"cft23xxx":3,"ch347":1,"ch347_jtag":1,"ch552":[1,8],"ch552_jtag":1,"chain":[9,11,15],"chang":[3,5,13],"check":[5,6,7,14,15],"checkout":7,"checksum":8,"chip":[0,1,2,3,7],"circumst":12,"class":8,"classic":15,"cle":0,"cli":12,"client":1,"clock":1,"clone":[1,5],"cmake":[5,9],"cmod":0,"cmod_s7":0,"cmoda7":0,"cmoda7_15t":0,"cmoda7_35t":0,"cmsis":[1,5],"cmsisdap":[1,5],"code":8,"cologn":[0,1,2,7],"colorlight":[0,5],"column":0,"com":5,"come":[4,12],"comma":13,"command":[4,13],"commit":6,"communic":3,"compat":[1,4,7],"comput":[0,4,8],"config":5,"configur":[5,8,13,15],"connect":[0,4,6,12],"consid":[12,15],"consol":0,"constraint":0,"content":13,"control":[1,5],"convert":[1,4,5],"coolrunn":[2,5],"copr":[4,5],"core":0,"corpor":0,"correct":6,"cost":1,"cp":5,"cpld":[2,13],"cpu":[13,15],"crab":0,"creat":9,"crosslink":[0,2],"crosslinknx_evn":0,"cs":14,"csg324":0,"cts":3,"current":[5,8,9,11,15],"custom":1,"cyc1000":[0,13],"cyc5000":0,"cyclon":[0,2,13],"cyclone10":8,"cycloneiv":0,"cyclonev":0,"d":[1,4,5,6,13],"dangerousprototyp":1,"dap":[1,5],"data":[0,10,13,15],"dbuild_stat":5,"dcd":3,"dcmake_cxx_flag":5,"dcmake_install_prefix":5,"dcmake_toolchain_fil":5,"dcross_compile_dep":5,"ddr":0,"ddr5":0,"de0":[0,13],"de0nano":[0,13],"de0nanosoc":[0,13],"de1":0,"de10lit":0,"de10nano":0,"de1soc":0,"debug":[1,5],"debugg":[1,6],"deca":0,"declar":5,"decompress":13,"default":[3,4,5,9,11,12,13,14,15],"denable_cmsisdap":5,"denable_libgpiod":5,"denable_udev":5,"depend":[4,5,13,15],"descript":[0,1,2],"design":15,"desir":10,"destin":12,"destroy":12,"detect":[6,12],"determin":3,"dev":[0,1,4,5],"develop":0,"devic":[1,3,4,5,9,10,11,12,15],"dfu":[0,1],"diamond":14,"digil":[0,1,4],"digilent_hs2":[1,15],"digilent_hs3":1,"digit":0,"diglent_b":1,"direct":[4,6,11,14],"directori":[5,9,15],"dirti":1,"dirtyjtag":1,"disabl":[5,13],"discoveri":0,"dise_path":5,"distribut":[4,5],"divid":13,"dlibftdi_librari":5,"dlibftdi_vers":5,"dlibusb_librari":5,"dlink_cmake_thread":5,"dlls":5,"dnf":[4,5],"dock":0,"document":[7,8],"doesn":4,"don":5,"done":[5,11,12,14,15],"doubl":15,"download":5,"dragon":0,"dragonl":0,"dram":0,"drive":1,"driver":1,"dsr":3,"dtr":3,"dual":15,"dump":3,"duse_pkgconfig":5,"dynam":0,"e":[0,2,5,10],"eagl":0,"easili":6,"ecp3":2,"ecp5":[0,2,3],"ecp5_evn":0,"ecp5g":0,"ecpix":0,"ecpix5":[0,1],"ecpix5_r03":0,"edg":[0,15],"edit":6,"eeprom":8,"ef":[0,2],"ef2m45":2,"efin":11,"efinix":[0,1,2,3,7],"efinix_jtag_ft2232":[0,1],"efinix_jtag_ft4232":1,"efinix_spi_ft2232":1,"efinix_spi_ft4232":1,"eg":11,"eg4":2,"eg4d20":[0,2],"eg4d20eg176":0,"eg4s20":[2,8],"eg4s20bg256":0,"electron":[0,1],"embed":[1,6],"emul":[3,8],"enabl":[4,5],"engin":12,"ensur":6,"entir":13,"ep2c5t144c8n":[2,13],"ep3c16":2,"ep3c16f484c6":0,"ep4ce115":2,"ep4ce15f23c8n":0,"ep4ce22":2,"ep4ce22f17c6":0,"ep4cgx150":2,"epcq16a":13,"epm240t100c5n":[2,13],"epm570":1,"epm7064":1,"equival":[10,13],"eras":[6,13],"error":[5,8],"etc":[0,5,6],"ettus":0,"eudev":5,"evalu":[0,10],"evb":[0,1,14],"everywher":8,"evk":0,"evn":0,"exampl":[5,6,11,13,15],"except":8,"exchang":6,"exe":5,"execut":5,"experiment":12,"explan":15,"explict":13,"export":[3,14],"express":0,"ext":3,"extend":[5,13],"extens":[3,15],"extern":[0,3,4,10,12],"extra":12,"ez":1,"f":[0,3,4,9,10,11,12,14,15],"f225":0,"f5b89bff68a5e2147404a895c075773884077438":6,"fail":[8,12],"fairwav":0,"famili":14,"fast":1,"faster":[1,4,15],"fastest":13,"featur":13,"fedora":4,"ffva1156":0,"ffva2104":0,"ffvb676":0,"field":5,"file":[4,5,6,10,12,14,15],"find":4,"fireant":[0,11],"firmwar":[1,6,13,15],"first":[0,5],"fit":15,"five":13,"fix":8,"flag":4,"flash":[0,2,4,8],"flga2104":0,"fmc":0,"follow":[6,9],"fomu":0,"forc":[5,15],"format":[11,12,14,15],"formula":5,"fpga":[0,1,6,8,10,11,12,15],"fpgas":[7,15],"freq":8,"frequenc":8,"fs":12,"fsgd2104":0,"fsvh2892":0,"ft2232":[0,1,8],"ft2232_b":1,"ft2232c":1,"ft2232h":1,"ft2232hq":1,"ft231x":[1,3],"ft232":1,"ft232h":1,"ft232hx":1,"ft232r":3,"ft232rl":[1,3],"ft23xxx":3,"ft245":1,"ft4232":[0,1],"ft4232hp":1,"ft4232hp_b":1,"ftdi":[1,4,14],"ftdi2232":1,"ftdi4232":1,"ftg256":0,"full":5,"function":12,"fusesoc":13,"fx2":1,"g":[5,10,13],"gatem":[0,1,2,10],"gatemate_evb_jtag":[0,1,10],"gatemate_evb_spi":[0,1,10],"gatemate_pgm":[1,10],"gatemate_pgm_spi":[0,10],"gatewar":13,"gcc":5,"generat":[11,12,13,14,15],"generate_rbf_fil":13,"generate_svf_fil":13,"generic":[1,14],"genesys2":0,"get_run":15,"git":5,"github":5,"gm1a1":0,"gnd":15,"gowin":[0,1,2,7,8],"gpio":[1,6,12],"gr740":0,"group":5,"gs":2,"gui":15,"guid":4,"guixsystem":5,"gw1n":[0,2,6],"gw1nr":[0,2],"gw1ns":[0,2],"gw1nsr":[0,2],"gw1nz":[0,2],"gw2a":[0,2,8],"gw5a":[0,2],"gw5ast":[0,2],"gw5at":[0,2],"gwu2x":1,"gwux2x":1,"gx":[0,2],"gzip":5,"h":1,"hand":5,"handbook":13,"hardcod":8,"hardwar":[0,1,7,10],"hasn":12,"hdmi":0,"header":5,"hid":1,"hidapi":5,"hidraw0":5,"high":1,"hold":10,"homebrew":5,"honeycomb":[0,1,12],"host":[1,3],"howev":[5,6],"hpp":15,"hs":1,"hs2":1,"hs3":1,"hseda":0,"https":5,"hub":6,"hx1k":[0,2],"hx4k":[0,2],"hx8k":[0,2],"hyvis":0,"hyvision_opt01":0,"i2c":1,"i5":[0,5],"i9":[0,5],"ice40":[0,2,3],"ice40_gener":[0,14],"ice40hx1k":0,"ice40hx8k":0,"ice40hxxk":14,"ice40ultraplus":0,"ice40up5k":0,"icebreak":0,"icepi":0,"icestick":0,"icezum":0,"icezumalhambraii":0,"id":[3,5],"ide":[11,12],"ii":[0,1,2,5,13],"iii":[0,1,2],"immedi":5,"impl":12,"impl1":14,"impl_1":15,"implement":1,"improv":8,"includ":13,"independ":15,"index":[11,15],"inform":[6,15],"input":9,"instead":12,"instruct":4,"intel":[1,2,7],"interfac":[1,6,12,15],"interfaceb":8,"intern":[0,2,10],"invert":3,"invok":5,"ip":1,"ise":5,"ise_v":5,"itx":0,"iv":[0,2],"j":[1,5,11],"jed":14,"jetson":1,"jic":13,"jlink":1,"jlink_bas":[1,11],"jp11":15,"jp7":15,"jtag":[0,1,3,12,13,15],"jtagsel_n":[6,12],"jtagsell_n":[6,12],"jtrace_pro":1,"just":[4,5],"kc705":0,"kcu105":[0,3],"kcu116":0,"kcu16":15,"keep":13,"kelli":0,"kernel32":5,"keyword":1,"kintex":[0,2],"kintex7":0,"kit":0,"knjn":0,"konfekt":0,"l":[0,6],"lab":0,"lambdaconcept":[0,1],"latch":10,"later":6,"lattic":[0,2,3,7],"lcmx03lf":0,"lcmxo2":0,"lcmxo3d":0,"ld":0,"leav":13,"left":14,"let":4,"level":15,"lfcpnx":[0,2],"lfd2nx":[0,2],"lfe3":2,"lfe5u":[0,2],"lfe5um":2,"lfe5um5g":[0,2],"libftdi":5,"libftdi1":5,"libftdi1_include_dir":5,"libgpiod":[1,5],"libhidapi":5,"librari":5,"libudev":5,"libusb":5,"libusb_include_dir":5,"liche":0,"licheetang":[0,9],"lifcl":[0,2],"like":[1,4,15],"lilygo":0,"limit":[1,13],"lindex":15,"line":13,"link":[1,5,11],"link2":1,"linux":[1,4,6,7],"list":[4,7,13],"litefuri":0,"litex":0,"littlebe":[0,2],"load":[0,3,4,12,14],"loadbit":15,"loaddata":15,"loader":6,"local":5,"locat":5,"logic":12,"login":5,"logout":5,"lone":0,"low":1,"lp":[0,2,3],"lpc":1,"lpddr4":0,"ls":0,"lv138fpg676a":0,"lv25mg121":0,"lv4cqn48pc6":0,"lx45":0,"m":[9,11,12,14,15],"machdyn":0,"machx02evn":14,"machx03evn":14,"machxo2":[0,2],"machxo2evn":0,"machxo3":0,"machxo3d":[0,2,14],"machxo3evn":0,"machxo3lf":[0,2],"machxo3sk":[0,14],"maco":[4,7],"major":7,"make":[5,9],"mani":7,"manual":5,"manufactur":7,"map":[3,5],"max":[0,2,13],"max10":0,"max10_v1":[0,13],"maximum":8,"may":[3,5,6,12,13,14,15],"mcs":[14,15],"mcsfile":15,"mechan":3,"mega":0,"mem":1,"member":5,"memori":[0,2,4,10,13,15],"mention":[5,13],"messag":8,"method":13,"microblaz":0,"microcontrol":1,"miliank":0,"mima":[0,1],"mimas_a7":0,"mind":13,"mingw":[4,5],"mingw32":5,"mingw64":5,"mini":0,"mini_itx":0,"minispartan6":0,"mit":0,"mkdir":[5,9],"mlk":0,"mobicart":[4,5],"mode":[0,1,2,11,12,13,15],"model":[2,15],"modif":13,"modul":[0,1],"mount":1,"mpsoc":[0,15],"mpsse":1,"mspi":12,"msvcrt":5,"msys2":4,"multipl":4,"must":[3,4,5,10,11,12,13,14,15],"mxo2":0,"mxo2_v2":0,"my_bitstream":4,"my_cabl":4,"my_fpga_board":4,"mydump":3,"myinstalldir":5,"myproject":15,"mysecondarybitstream":3,"n":13,"n_byte":3,"na":[0,2],"name":[0,1,13],"nano":[0,1,12],"nc":[1,3],"necessari":5,"need":[3,5,14,15],"network":3,"new":5,"nexi":0,"nextpnr":14,"nexus":[0,3],"nexys4ddr":0,"nexys_a7_100":0,"nexys_a7_50":0,"nexysvideo":0,"nite":0,"node":5,"nojourn":15,"nolog":15,"non":0,"noth":[11,12,14,15],"now":9,"nproc":5,"nt":[0,2],"numato":[0,1],"nx":[0,2],"o":[3,10,13],"ocd":1,"offici":[6,15],"offset":[8,10,13],"ok":[0,2,13],"older":6,"olimex":[0,1],"olimex_gatemateevb":0,"om13054":1,"omit":13,"on_chip_bitstream_decompress":13,"onboard":14,"one":[0,1,3,11,13],"onli":[1,5,8,11,12,13,15],"opal":0,"open":[0,1,4,5],"openfpgaload":[0,9,10,11,12,13,14,15],"openfpgaloader_soj_dir":3,"openocd":1,"opensourc":1,"opensourcesdrlabkintex7":0,"oper":5,"opt":5,"opt01":0,"option":[3,4,5,9,13,14,15],"orang":0,"orangecrab":0,"orbtrac":[0,1],"orbtrace_dfu":0,"others":0,"outflow":11,"overrid":3,"p":13,"p7zip":5,"packag":[4,5,15],"pacman":[4,5],"panel":14,"papilio":[0,1],"papilio_on":0,"parallel":5,"paramet":[10,13],"parser":3,"part":[4,11,15],"passiv":10,"path":[3,5,12],"path_to_libftdi":5,"path_to_libusb":5,"pc":6,"pci":0,"pcie":0,"pd3":1,"perform":10,"permiss":6,"persist":4,"pgm":1,"pictur":13,"pid":1,"pin":[1,6,10,12,14],"pinhead":15,"pinout":14,"pipistrello":0,"pkg":5,"pkgconf":5,"pl":15,"platform":1,"pldkit":0,"pleas":[4,14],"plug":5,"plugdev":5,"plugin":5,"plus":0,"pnr":12,"pof":2,"point":10,"port":[0,1,3,6],"possibl":[3,9,10,11,12,13],"power":[1,6,12],"precis":8,"prefer":4,"preferenti":6,"prerequisit":5,"present":[9,14],"primari":[0,2,15],"primer":0,"privileg":5,"prj":9,"prjtang":9,"pro":1,"probe":1,"problem":6,"process":1,"produc":[9,15],"program":[1,12,15],"programm":[0,1,3,4,6,10,12,14],"project":[1,9,11,15],"project_nam":[13,14],"project_name_auto":13,"prom":14,"protocol":[1,12],"provid":[3,4,5,13,14,15],"pthread":5,"publish":6,"pull":[6,12],"pvt":0,"pynq":0,"pynq_z1":0,"pynq_z2":0,"q":[3,13],"qinheng":1,"qmtech":0,"qmtechcyclone10":0,"qmtechcycloneiv":0,"qmtechcyclonev":[0,13],"qmtechcyclonev_5ce523":0,"qmtechkintex7":0,"qsf":13,"qspi":3,"quad":[1,15],"quartus":13,"quartus_cpf":13,"r":[0,3,13],"r0":0,"radiona":0,"ram":[11,15],"raw":3,"rbf":13,"read":[12,15],"real":13,"rebuild":13,"recent":6,"recov":[6,12],"redpitaya":0,"redpitaya14":0,"reduc":5,"refer":[4,5],"refkit":[0,13],"regist":5,"relat":15,"releas":6,"reload":5,"remain":13,"remap":5,"remot":1,"remote_bitbang":1,"replac":[4,5],"replug":5,"repositori":5,"reprogram":13,"requir":[3,5,11,13,14,15],"research":0,"reset":10,"result":5,"rev":0,"revers":12,"rework":8,"rhel":5,"ri":3,"right":5,"rocki":5,"root":5,"rpd":13,"rs232":1,"rst":14,"rts":3,"rule":6,"run":15,"runber":[0,12],"rv":1,"rxd":3,"s":[0,4,5,6,9,10,12,13,14,15],"s20":0,"s200":0,"s7":0,"saanlima":0,"salelf":2,"scarab":0,"scenario":4,"schoko":0,"sck":14,"script":15,"sdr":0,"sdram":0,"se":2,"second":3,"secondari":[0,15],"section":[5,6,12,13],"sector":[13,14],"see":[5,13,15],"seeedstudio":0,"seem":6,"seen":5,"segger":1,"select":3,"separ":13,"seri":[0,2],"serial":[0,2],"server":1,"servic":5,"session":5,"set":[3,5,10,15],"set_global_assign":13,"set_properti":15,"share":10,"ship":5,"si":14,"side":[1,3],"signal":[4,10],"similar":5,"simpl":0,"simplest":13,"simpli":4,"simplifi":15,"sinc":[9,11,12,14],"sipe":[0,1,6,8,12],"sitlinv":0,"size":[3,5,15],"slower":4,"slowest":13,"smt2":1,"soc":[0,2],"sof":13,"softcor":[13,15],"sold":6,"solut":5,"som":0,"someth":15,"somewher":[3,5,9,11,14,15],"sourc":[0,1,15],"space":12,"spartan":[0,2,15],"spartan3":[0,15],"spartan6":0,"spartan7":0,"spartanedgeaccelboard":[0,15],"spec":0,"spec150":0,"spec45":0,"special":[11,12,14,15],"specif":[4,6,7,14],"specifi":[4,5,12,13],"speed":1,"spell":6,"spi":[0,1,3,8,11,12],"spiflash":8,"spioverjtag":15,"spix4":15,"spix8":15,"sqrl":0,"sram":[0,4,6,8,13],"src":15,"standard":5,"start":[10,13],"starter":0,"static":5,"stemlab":0,"step":[0,5,6,13,15],"steppenprob":1,"stlv7325":0,"stm32":1,"stm32f042":1,"stm32f1":1,"store":[10,13],"stratix":2,"string":3,"strip":5,"sudo":[4,5],"supplementari":5,"suppli":1,"support":[5,7,8,9,11,12,13,14,15],"sure":7,"surfac":1,"svf":[0,2],"swd":1,"swo":1,"symbol":5,"system":[0,1,5,6],"t":[0,4,5,12,15],"t120":[0,2],"t120bga576":0,"t13":2,"t20":0,"t20bga256":0,"t8":[0,2],"t8f81":0,"take":5,"taken":5,"tang":[0,1,12],"tangbit":9,"tangconsol":0,"tangmega138k":0,"tangnano":[0,8,12],"tangnano1k":[0,12],"tangnano20k":[0,12],"tangnano4k":[0,12],"tangnano9k":[0,12],"tangprim":8,"tangprimer20k":[0,12],"tangprimer25k":0,"target":[3,9,15],"task":15,"tbd":[0,2],"tck":3,"tcl":[13,15],"tclarg":15,"tcp":1,"td":9,"tdi":3,"te0712":0,"te0712_8":0,"tec0117":[0,12],"tec0330":0,"tei0010":0,"temporari":5,"teras":0,"termin":5,"test":[0,2,11,12,13],"tester":0,"the_bin_fil":13,"the_pof_fil":13,"the_svf_fil":13,"therefor":4,"thorough":12,"ti180":2,"ti180j484":0,"ti60":2,"ti60f225":[0,11],"tigard":1,"time":[5,13],"tini":1,"titanium":[0,2],"tms":3,"tool":[9,15],"toolchain":5,"trabucayr":5,"trace":1,"transact":3,"trenz":[0,8,12],"tri":3,"trigger":5,"trion":[0,2],"trion_t120_bga576":0,"trion_t120_bga576_jtag":0,"trion_t20_bga256_jtag":0,"trion_ti60_f225":0,"trion_ti60_f225_jtag":0,"true":15,"ttyusbx":4,"two":[3,4,13,15],"txd":3,"type":[1,5,13],"uart":1,"ucrt":[4,5],"udev":6,"udevadm":5,"ufm0":13,"ufm1":13,"ufmx":13,"ug292":[6,12],"ultraplus":0,"ultrascal":[0,2,15],"ulx3":0,"ulx3s_dfu":0,"ulx4m":0,"ulx4m_dfu":0,"unchang":13,"unlik":13,"unplug":5,"unstabl":3,"up5k":[0,2],"updat":[5,6,13],"upgrad":1,"uppercas":6,"usag":13,"usb":[1,6,13],"usb2":0,"use":[1,4,5,6,8,9,10,12,14,15],"user":[3,4,5,13,15],"usermod":5,"usr":5,"usrp":0,"usrpx300":0,"usrpx310":0,"v":[0,2,6],"v0":[0,6],"v1":0,"v2":0,"v7":0,"valu":3,"vc709":0,"vcu108":0,"vcu118":[0,15],"vcu128":0,"vcu1525":0,"vec_v6":0,"vendor":[2,7],"versa":0,"version":[0,5,6],"via":[5,10,12],"vid":1,"video":0,"virtex":[0,2],"virtex7":0,"virtual":1,"vivado":15,"vmm3":0,"volatil":[0,4],"vq100":0,"w64":[4,5],"want":[4,5,15],"way":13,"websit":6,"welcom":7,"will":[4,5,10],"win64":5,"window":[4,6,7],"wip":11,"without":[5,13,15],"work":[5,7,8],"workaround":1,"write":[0,4,8,10,11,12,13,14,15],"write_bitstream":15,"write_cfgmem":15,"written":[12,13],"ws2_32":5,"x":13,"x300":0,"x86_64":[4,5],"xa2c":2,"xa2c64a":2,"xc2c":[2,5],"xc2c32a":2,"xc3s200":2,"xc3s200ft256":0,"xc3s500e":[0,2],"xc6slx150t":2,"xc6slx150tfgg484":0,"xc6slx16":[0,2],"xc6slx16csg324":0,"xc6slx25":[0,2],"xc6slx25tcsg324":0,"xc6slx45":[0,2],"xc6slx45t":2,"xc6slx45tfgg484":0,"xc6slx9":2,"xc6vlx130t":2,"xc6vlx130tff784":0,"xc7a100t":2,"xc7a100tcsg324":0,"xc7a100tfgg484":0,"xc7a100tftg256":0,"xc7a15tcpg236":0,"xc7a200t":2,"xc7a200tfbg484":0,"xc7a200tfbg676":0,"xc7a200tsbg484":0,"xc7a25t":2,"xc7a35tcpg236":0,"xc7a35tcsg324":15,"xc7a35tftg256":0,"xc7a35ti":2,"xc7a35ticsg324":0,"xc7a50t":2,"xc7a50tcpg236":0,"xc7a50tcsg324":0,"xc7a50tfgg484":0,"xc7a75t":2,"xc7k160t":[0,2],"xc7k325t":[0,2],"xc7k325tffg676":0,"xc7k325tffg900":0,"xc7k410t":2,"xc7k410tffg900":0,"xc7k420t":2,"xc7k480t":2,"xc7k70t":[0,2],"xc7k70tfbg676":0,"xc7s15":2,"xc7s15ftgb196":0,"xc7s25":2,"xc7s25csga225":0,"xc7s25csga324":0,"xc7s50":2,"xc7s50csga324":0,"xc7v2000t":2,"xc7v585t":2,"xc7vh580t":2,"xc7vh870t":2,"xc7vx1140t":2,"xc7vx330t":[0,2],"xc7vx415t":2,"xc7vx485t":2,"xc7vx550t":2,"xc7vx690t":2,"xc7vx690tffg1761":0,"xc7vx980t":2,"xc7z010":2,"xc7z010clg400":0,"xc7z010csg400":0,"xc7z020":2,"xc7z020clg400":0,"xc7z020clg484":0,"xc7z020csg400":0,"xc7z045":0,"xc7z045ffg900":0,"xc7z100":0,"xc7z7010":0,"xc9500xl":2,"xc95144xl":2,"xc95188xl":2,"xc9536xl":2,"xc9572xl":2,"xcau15p":2,"xcau25p":[0,2],"xcf":2,"xcf01s":[0,2],"xcf02s":2,"xcf04s":2,"xcku035":2,"xcku040":[0,2],"xcku060":2,"xcku115":2,"xcku3p":2,"xcku5p":[0,2],"xcsu35p":2,"xcvu095":[0,2],"xcvu37p":0,"xcvu9p":[0,2],"xczu11eg":2,"xczu17eg":2,"xczu2cg":[0,2],"xczu7ev":0,"xczu9eg":[0,2],"xem8320":0,"xilinx":[0,1,2,3,5,7],"xmf3":0,"xtrx":0,"xtrxpro":0,"xvc":1,"xx":5,"xxx":[3,5],"xxxx":[3,15],"xyloni":0,"xyloni_spi":[0,11],"y":13,"yes":15,"yourboard":14,"yourcabl":14,"z1":0,"z2":0,"z7":0,"zc702":0,"zc706":0,"zcu102":0,"zcu106":0,"zedboard":[0,15],"zero":0,"zlib":5,"zlib1g":5,"zybo":0,"zybo_z7_10":0,"zybo_z7_20":0,"zynq":[0,15],"zynq7000":[0,2],"zynqmpsoc":[0,2]},"titles":["Boards","Cables","FPGAs","Advanced usage of openFPGALoader","First steps with openFPGALoader","Installing openFPGALoader","Troubleshooting Guide","openFPGALoader: universal utility for programming FPGA","To Do","Anlogic notes","Cologne Chip notes","Efinix notes","Gowin notes","Intel notes","Lattice notes","Xilinx notes"],"titleterms":{"20k":6,"9k":6,"Cannot":6,"Do":8,"From":5,"I":6,"To":8,"access":10,"address":3,"advanc":3,"altera":13,"altern":3,"anlog":9,"arbitrari":[3,13],"arch":5,"automat":3,"bin":11,"binari":13,"bit":9,"bitbang":3,"bitstream":[3,6,13,15],"board":[0,4,8,10,11,13],"build":5,"bypass":3,"cabl":[1,8,10],"certus":14,"certuspro":14,"chip":10,"cologn":10,"command":6,"common":5,"communic":6,"compil":5,"configur":[3,10],"cross":5,"crosslink":14,"debian":5,"detect":3,"develop":4,"devic":[6,8],"directori":3,"ecp3":14,"ecp5":14,"edg":3,"efinix":11,"fail":6,"fedora":5,"file":[3,9,11,13],"firant":11,"first":4,"flash":[3,6,9,10,11,12,13,14,15],"format":13,"found":6,"fpga":[3,4,7,13],"fpgas":2,"ft231":3,"ft232":3,"ftdi":6,"global":8,"gowin":[6,12],"guid":[6,13],"guix":5,"gw1n":12,"hex":11,"ice40":14,"init":6,"instal":[4,5,6],"intel":13,"intern":13,"issu":6,"jtag":[6,10,11],"last":6,"lattic":14,"launch":6,"liche":9,"linux":5,"load":[9,11,13,15],"machxo2":14,"machxo3":14,"maco":5,"max10":13,"memori":[3,9,14],"misc":8,"mode":[3,10],"msys2":5,"nano":6,"nativ":5,"negat":3,"note":[9,10,11,12,13,14,15],"nx":14,"old":13,"open":6,"openfpgaload":[3,4,5,6,7],"organiz":13,"pin":3,"pof":13,"primari":3,"primer":6,"program":[4,6,7,10,13],"read":3,"reset":3,"rule":5,"s":3,"sampl":3,"say":6,"secondari":3,"serial":13,"sinc":6,"sipe":9,"slow":6,"sourc":5,"spi":[9,10,13,14,15],"spioverjtag":3,"sram":[12,14],"standalon":4,"stdin":3,"step":4,"stuck":6,"support":10,"svf":[9,13],"t8":11,"tang":[6,9],"tdo":3,"titanium":11,"tri":6,"trion":11,"troubleshoot":[4,6],"type":3,"ubuntu":5,"udev":5,"unabl":6,"universal":7,"usag":[3,11],"usb_open":6,"use":[3,13],"user":12,"util":7,"vector":13,"window":5,"write":3,"xilinx":15,"xyloni":11}}) \ No newline at end of file diff --git a/todo.html b/todo.html index c303c04..8a42509 100644 --- a/todo.html +++ b/todo.html @@ -1,104 +1,37 @@ - - - - - To Do — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + To Do — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

To Do

@@ -135,31 +68,99 @@
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/anlogic.html b/vendors/anlogic.html index 2e70d82..cc362d8 100644 --- a/vendors/anlogic.html +++ b/vendors/anlogic.html @@ -1,107 +1,38 @@ - - - - - Anlogic notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Anlogic notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Anlogic notes

@@ -147,32 +78,102 @@ make
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/colognechip.html b/vendors/colognechip.html index d2f09ad..8e054d4 100644 --- a/vendors/colognechip.html +++ b/vendors/colognechip.html @@ -1,109 +1,38 @@ - - - - - Cologne Chip notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Cologne Chip notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Cologne Chip notes

@@ -192,32 +121,104 @@
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/efinix.html b/vendors/efinix.html index 1310b60..4f4a7ac 100644 --- a/vendors/efinix.html +++ b/vendors/efinix.html @@ -1,110 +1,38 @@ - - - - - Efinix notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Efinix notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Efinix notes

@@ -146,32 +74,105 @@ NOTE: JTAG chains with more than one device (eg –index-chain) are currently no
-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/gowin.html b/vendors/gowin.html index d08d7b0..831ad6d 100644 --- a/vendors/gowin.html +++ b/vendors/gowin.html @@ -1,107 +1,38 @@ - - - - - Gowin notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Gowin notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Gowin notes

@@ -176,32 +107,102 @@ flash section can also be programmed via the JTAG interface:

-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/intel.html b/vendors/intel.html index a8deec0..6285db8 100644 --- a/vendors/intel.html +++ b/vendors/intel.html @@ -1,117 +1,38 @@ - - - - - Intel notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Intel notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Intel notes

@@ -308,32 +229,112 @@ and CFM2 -
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/lattice.html b/vendors/lattice.html index bf09dab..cf5ebd4 100644 --- a/vendors/lattice.html +++ b/vendors/lattice.html @@ -1,112 +1,38 @@ - - - - - Lattice notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Lattice notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Lattice notes

@@ -213,32 +139,107 @@ file.

-
- +
-
-
- + +
+ + + + + + + \ No newline at end of file diff --git a/vendors/xilinx.html b/vendors/xilinx.html index fcd7a25..5cd2689 100644 --- a/vendors/xilinx.html +++ b/vendors/xilinx.html @@ -1,105 +1,38 @@ - - - - - Xilinx notes — openFPGALoader: universal utility for programming FPGA latest documentation - - - - - - - - + + + + + + Xilinx notes — openFPGALoader: universal utility for programming FPGA latest documentation + + + + + + - - + + + + - -
- + + -
- -
-
- +
+
+
-
- -
-
- -
-
- + +
+

Xilinx notes

To simplify further explanations, we consider the project is generated in the current directory.

@@ -108,7 +41,7 @@
  1. Spartan Edge Accelerator Board has only pinheader, so the cable must be provided

  2. A JTAG <-> SPI bridge (used to write bitstream in FLASH) is available for some device, see -spiOverJtag to check if your model is supported.

  3. +spiOverJtag to check if your model is supported.

  4. Board provides the device/package model, but if the targeted board is not officially supported but the FPGA yes, you can use --fpga-part to provide the model.

  5. With spartan3, the flash is an independent JTAG device. @@ -193,7 +126,7 @@ to GND).

    --fpga-part is only required if this information is not provided at board.hpp level or if the board is not officially supported. device/package format is something like xc7a35tcsg324 (arty model). -See src/board.hpp, or spiOverJtag directory for examples.

    +See src/board.hpp, or spiOverJtag directory for examples.

Some boards with UltraScale FPGAs, like the VCU118 and KCU16, support the SPIx8 (Dual Quad SPI) configuration. In this case, the spix8 option write_cfgmem on the above example can be used to generate two .mcs files, @@ -213,32 +146,100 @@ The default target is the -

- +
-
-
- + +
+ + + + + + + \ No newline at end of file