From a64b3aa58251bc2b5def9de1aa4be0faad3b4d0b Mon Sep 17 00:00:00 2001 From: Jenkins Date: Fri, 12 Apr 2024 10:10:12 +0800 Subject: [PATCH] init commit --- 404.html | 1 + CNAME | 1 + ...90b98219675a8c6bb75f0d90247191b73bad4e.css | 1 + categories/index.html | 27 + categories/index.xml | 1 + categories/page/1/index.html | 1 + css/asciinema-player.css | 2563 +++++++++++++++++ css/img.css | 12 + docs/administration/index.html | 32 + docs/administration/index.xml | 1 + docs/community/index.html | 46 + docs/community/index.xml | 1 + docs/getting-started/configuration/index.html | 86 + docs/getting-started/index.html | 29 + docs/getting-started/index.xml | 5 + docs/getting-started/installation/index.html | 68 + docs/index.html | 29 + docs/index.xml | 1 + docs/overview/architecture/index.html | 29 + docs/overview/index.html | 66 + docs/overview/index.xml | 1 + docs/references/aggregation/avg/index.html | 60 + .../aggregation/date-histogram/index.html | 101 + docs/references/aggregation/index.html | 44 + docs/references/aggregation/index.xml | 16 + docs/references/aggregation/max/index.html | 59 + docs/references/aggregation/min/index.html | 59 + .../aggregation/percentiles/index.html | 139 + docs/references/aggregation/sum/index.html | 66 + docs/references/aggregation/terms/index.html | 70 + .../aggregation/value-count/index.html | 59 + docs/references/collection/create/index.html | 48 + docs/references/collection/delete/index.html | 43 + docs/references/collection/index.html | 35 + docs/references/collection/index.xml | 9 + docs/references/document/bulk/index.html | 121 + docs/references/document/create/index.html | 66 + docs/references/document/delete/index.html | 50 + docs/references/document/fetch/index.html | 59 + docs/references/document/index.html | 35 + docs/references/document/index.xml | 21 + .../document/partial_update/index.html | 64 + docs/references/document/replace/index.html | 67 + docs/references/index.html | 32 + docs/references/index.xml | 1 + docs/references/namespace/create/index.html | 43 + docs/references/namespace/delete/index.html | 41 + docs/references/namespace/index.html | 37 + docs/references/namespace/index.xml | 7 + docs/references/search/index.html | 52 + docs/references/search/index.xml | 12 + docs/references/search/prefix/index.html | 52 + docs/references/search/range/index.html | 51 + docs/references/search/regexp/index.html | 58 + docs/references/search/term/index.html | 53 + docs/release-notes/index.html | 36 + docs/release-notes/index.xml | 1 + ...2051e91b8d6debf6f269a0d7788069e7bb39059.js | 1 + ...a146e27640860875fd991bd0a5455b816c35d90.js | 1 + ...06b06c2d75630261202095a1ab9685fc15ab524.js | 1 + ...e5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js | 1 + ...0641c84b1a7a4e5bbfa1a684e83a35f88290c30.js | 11 + ...4fcd3ce8cd0b893ce7d0644ec22038d89c280c1.js | 11 + ...cfdf858b7780251737256cf1ff8644d6419f927.js | 11 + ...364371fe2d6da2b245e000e762945850c1a4495.js | 11 + favicon.ico | Bin 0 -> 1150 bytes favicon.png | Bin 0 -> 12801 bytes favicon.svg | 13 + flexsearch.min.js | 42 + ...Uz9_-1phKLFgshYDvh6Vwt7VRtvWdUhm97sg.woff2 | Bin 0 -> 12284 bytes .../5aUz9_-1phKLFgshYDvh6Vwt7VptvWdUhm8.woff2 | Bin 0 -> 15336 bytes fonts/roboto-mono-v6-latin-regular.woff | Bin 0 -> 19972 bytes fonts/roboto-mono-v6-latin-regular.woff2 | Bin 0 -> 16328 bytes fonts/roboto-v19-latin-300italic.woff | Bin 0 -> 22204 bytes fonts/roboto-v19-latin-300italic.woff2 | Bin 0 -> 17448 bytes fonts/roboto-v19-latin-700.woff | Bin 0 -> 20356 bytes fonts/roboto-v19-latin-700.woff2 | Bin 0 -> 15816 bytes fonts/roboto-v19-latin-regular.woff | Bin 0 -> 20268 bytes fonts/roboto-v19-latin-regular.woff2 | Bin 0 -> 15736 bytes img/logo-en.svg | 30 + index.html | 46 + index.xml | 65 + js/asciinema-player.js | 1213 ++++++++ js/doc.js | 171 ++ js/jquery-2.x.min.js | 4 + katex/auto-render.min.js | 1 + katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 70972 bytes katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 38868 bytes katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 32944 bytes katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19316 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 11696 bytes katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10448 bytes katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18684 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11460 bytes katex/fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10240 bytes katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35660 bytes katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 22632 bytes katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20360 bytes katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34352 bytes katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22088 bytes katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19784 bytes katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60784 bytes katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35464 bytes katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 30244 bytes katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 44496 bytes katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 25352 bytes katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 21944 bytes katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 47640 bytes katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 26228 bytes katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 22748 bytes katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 69520 bytes katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 38112 bytes katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 32464 bytes katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39308 bytes katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 22324 bytes katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 19720 bytes katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 40992 bytes katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 22844 bytes katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20096 bytes katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33688 bytes katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 18516 bytes katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 15732 bytes katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 30960 bytes katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 17572 bytes katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15024 bytes katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29812 bytes katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16228 bytes katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13708 bytes katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24620 bytes katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13428 bytes katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12064 bytes katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12916 bytes katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6696 bytes katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5592 bytes katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12172 bytes katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6436 bytes katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5392 bytes katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8120 bytes katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4568 bytes katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3728 bytes katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11016 bytes katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6184 bytes katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5028 bytes katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35924 bytes katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20260 bytes katex/fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17272 bytes katex/katex.min.css | 1 + katex/katex.min.js | 1 + manifest.json | 15 + mermaid.min.js | 49 + posts/index.html | 29 + posts/index.xml | 1 + posts/page/1/index.html | 1 + sitemap.xml | 1 + svg/calendar.svg | 1 + svg/edit.svg | 1 + svg/external-link.svg | 8 + svg/menu.svg | 1 + svg/toc.svg | 1 + svg/translate.svg | 1 + tags/index.html | 27 + tags/index.xml | 1 + tags/page/1/index.html | 1 + 163 files changed, 6541 insertions(+) create mode 100644 404.html create mode 100644 CNAME create mode 100644 book.min.5133334adc689cc6ec1cc2ce3890b98219675a8c6bb75f0d90247191b73bad4e.css create mode 100644 categories/index.html create mode 100644 categories/index.xml create mode 100644 categories/page/1/index.html create mode 100644 css/asciinema-player.css create mode 100644 css/img.css create mode 100644 docs/administration/index.html create mode 100644 docs/administration/index.xml create mode 100644 docs/community/index.html create mode 100644 docs/community/index.xml create mode 100644 docs/getting-started/configuration/index.html create mode 100644 docs/getting-started/index.html create mode 100644 docs/getting-started/index.xml create mode 100644 docs/getting-started/installation/index.html create mode 100644 docs/index.html create mode 100644 docs/index.xml create mode 100644 docs/overview/architecture/index.html create mode 100644 docs/overview/index.html create mode 100644 docs/overview/index.xml create mode 100644 docs/references/aggregation/avg/index.html create mode 100644 docs/references/aggregation/date-histogram/index.html create mode 100644 docs/references/aggregation/index.html create mode 100644 docs/references/aggregation/index.xml create mode 100644 docs/references/aggregation/max/index.html create mode 100644 docs/references/aggregation/min/index.html create mode 100644 docs/references/aggregation/percentiles/index.html create mode 100644 docs/references/aggregation/sum/index.html create mode 100644 docs/references/aggregation/terms/index.html create mode 100644 docs/references/aggregation/value-count/index.html create mode 100644 docs/references/collection/create/index.html create mode 100644 docs/references/collection/delete/index.html create mode 100644 docs/references/collection/index.html create mode 100644 docs/references/collection/index.xml create mode 100644 docs/references/document/bulk/index.html create mode 100644 docs/references/document/create/index.html create mode 100644 docs/references/document/delete/index.html create mode 100644 docs/references/document/fetch/index.html create mode 100644 docs/references/document/index.html create mode 100644 docs/references/document/index.xml create mode 100644 docs/references/document/partial_update/index.html create mode 100644 docs/references/document/replace/index.html create mode 100644 docs/references/index.html create mode 100644 docs/references/index.xml create mode 100644 docs/references/namespace/create/index.html create mode 100644 docs/references/namespace/delete/index.html create mode 100644 docs/references/namespace/index.html create mode 100644 docs/references/namespace/index.xml create mode 100644 docs/references/search/index.html create mode 100644 docs/references/search/index.xml create mode 100644 docs/references/search/prefix/index.html create mode 100644 docs/references/search/range/index.html create mode 100644 docs/references/search/regexp/index.html create mode 100644 docs/references/search/term/index.html create mode 100644 docs/release-notes/index.html create mode 100644 docs/release-notes/index.xml create mode 100644 en.search-data.min.037d8229575f923dafe199da92051e91b8d6debf6f269a0d7788069e7bb39059.js create mode 100644 en.search-data.min.49e90322b03f690d765bf7acfa146e27640860875fd991bd0a5455b816c35d90.js create mode 100644 en.search-data.min.f01426de8634b9937aea3fe4b06b06c2d75630261202095a1ab9685fc15ab524.js create mode 100644 en.search-data.min.fad7ab67520a5317f59227a6ce5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js create mode 100644 en.search.min.49fefc13bee8854d7b11e10010641c84b1a7a4e5bbfa1a684e83a35f88290c30.js create mode 100644 en.search.min.59e477a4e30cc415c12e18a0e4fcd3ce8cd0b893ce7d0644ec22038d89c280c1.js create mode 100644 en.search.min.e8d7b99b100ab317a75f33775cfdf858b7780251737256cf1ff8644d6419f927.js create mode 100644 en.search.min.f51a934f217002973e6e1e5d7364371fe2d6da2b245e000e762945850c1a4495.js create mode 100644 favicon.ico create mode 100644 favicon.png create mode 100644 favicon.svg create mode 100644 flexsearch.min.js create mode 100644 fonts/5aUz9_-1phKLFgshYDvh6Vwt7VRtvWdUhm97sg.woff2 create mode 100644 fonts/5aUz9_-1phKLFgshYDvh6Vwt7VptvWdUhm8.woff2 create mode 100644 fonts/roboto-mono-v6-latin-regular.woff create mode 100644 fonts/roboto-mono-v6-latin-regular.woff2 create mode 100644 fonts/roboto-v19-latin-300italic.woff create mode 100644 fonts/roboto-v19-latin-300italic.woff2 create mode 100644 fonts/roboto-v19-latin-700.woff create mode 100644 fonts/roboto-v19-latin-700.woff2 create mode 100644 fonts/roboto-v19-latin-regular.woff create mode 100644 fonts/roboto-v19-latin-regular.woff2 create mode 100644 img/logo-en.svg create mode 100644 index.html create mode 100644 index.xml create mode 100644 js/asciinema-player.js create mode 100644 js/doc.js create mode 100644 js/jquery-2.x.min.js create mode 100644 katex/auto-render.min.js create mode 100644 katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 katex/fonts/KaTeX_Main-Bold.woff create mode 100644 katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 katex/fonts/KaTeX_Main-Italic.woff create mode 100644 katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 katex/fonts/KaTeX_Main-Regular.woff create mode 100644 katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 katex/fonts/KaTeX_Math-Italic.woff create mode 100644 katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 katex/fonts/KaTeX_Script-Regular.woff create mode 100644 katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 katex/katex.min.css create mode 100644 katex/katex.min.js create mode 100644 manifest.json create mode 100644 mermaid.min.js create mode 100644 posts/index.html create mode 100644 posts/index.xml create mode 100644 posts/page/1/index.html create mode 100644 sitemap.xml create mode 100644 svg/calendar.svg create mode 100644 svg/edit.svg create mode 100644 svg/external-link.svg create mode 100644 svg/menu.svg create mode 100644 svg/toc.svg create mode 100644 svg/translate.svg create mode 100644 tags/index.html create mode 100644 tags/index.xml create mode 100644 tags/page/1/index.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..d4fb600 --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +404 Page not found | INFINI Pizza

404

Page Not Found

INFINI Pizza

\ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..be1e4ea --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +pizza.rs diff --git a/book.min.5133334adc689cc6ec1cc2ce3890b98219675a8c6bb75f0d90247191b73bad4e.css b/book.min.5133334adc689cc6ec1cc2ce3890b98219675a8c6bb75f0d90247191b73bad4e.css new file mode 100644 index 0000000..4e85810 --- /dev/null +++ b/book.min.5133334adc689cc6ec1cc2ce3890b98219675a8c6bb75f0d90247191b73bad4e.css @@ -0,0 +1 @@ +:root{--gray-100: #f8f9fa;--gray-200: #e9ecef;--gray-500: #adb5bd;--color-link: #6B0BEA;--color-visited-link: #590ad2;--body-background: white;--body-font-color: black;--icon-filter: none;--hint-color-info: #6bf;--hint-color-warning: #fd6;--hint-color-danger: #f66}/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:1 1 auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.hidden{display:none}input.toggle{height:0;width:0;overflow:hidden;opacity:0;position:absolute}.clearfix::after{content:"";display:table;clear:both}html{font-size:16px;scroll-behavior:smooth;touch-action:manipulation}body{min-width:20rem;color:var(--body-font-color);background:var(--body-background);letter-spacing:.33px;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:var(--color-link)}img{vertical-align:baseline}:focus{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0;position:relative}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-inline-start:1rem}ul.pagination{display:flex;justify-content:center;list-style-type:none}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:var(--icon-filter)}.book-brand{margin-top:0}.book-brand img{height:2em;width:auto;vertical-align:middle;margin-inline-end:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu nav{width:16rem;padding:1rem;background:var(--body-background);position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a,.book-menu label{color:inherit;cursor:pointer;word-wrap:break-word}.book-menu a.active{color:var(--color-link)}.book-menu input.toggle+label+ul{display:none}.book-menu input.toggle:checked+label+ul{display:block}.book-section-flat{margin-bottom:2rem}.book-section-flat:not(:first-child){margin-top:2rem}.book-section-flat>a,.book-section-flat>span,.book-section-flat>label{font-weight:bolder}.book-section-flat>ul{padding-inline-start:0}.book-page{min-width:20rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{display:none;margin-bottom:1rem}.book-header label{line-height:0}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:var(--gray-100);color:var(--body-font-color)}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;top:0;margin:.5rem;margin-inline-start:calc(100% - 1.5rem);width:1rem;height:1rem;border:1px solid transparent;border-top-color:var(--body-font-color);border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-search small{opacity:.5}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc nav{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;margin-inline-end:.5rem}.book-comments{margin-top:1rem}.book-languages{position:relative;overflow:visible}.book-languages ul{margin:0;padding:0;list-style:none}.book-languages ul li{white-space:nowrap;cursor:pointer}.book-languages:hover .book-languages-list,.book-languages:focus .book-languages-list,.book-languages:focus-within .book-languages-list{display:block}.book-languages .book-languages-list{display:none;position:absolute;bottom:100%;left:0;background:var(--body-background);box-shadow:0 0 .25rem rgba(0,0,0,.1)}.book-languages .book-languages-list li img{opacity:.25}.book-languages .book-languages-list li.active img,.book-languages .book-languages-list li:hover img{opacity:initial}.book-languages .book-languages-list a{color:inherit;padding:1px .5rem}.book-home{padding:1rem}aside nav,.book-page,.book-header aside,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity,visibility;will-change:transform,margin,opacity}@media screen and (max-width:56rem){#menu-control,#toc-control{display:inline}.book-menu{visibility:hidden;margin-inline-start:-16rem;font-size:16px;z-index:1}.book-toc{display:none}.book-header{display:block}#menu-control:focus~main label[for=menu-control]{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}#menu-control:checked~main .book-menu{visibility:initial}#menu-control:checked~main .book-menu nav{transform:translateX(16rem);box-shadow:0 0 .5rem rgba(0,0,0,.1)}#menu-control:checked~main .book-page{opacity:.25}#menu-control:checked~main .book-menu-overlay{display:block;position:absolute;top:0;bottom:0;left:0;right:0}#toc-control:focus~main label[for=toc-control]{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}#toc-control:checked~main .book-header aside{display:block}body[dir=rtl] #menu-control:checked+main .book-menu nav{transform:translateX(-16rem)}}@media screen and (min-width:80rem){.book-page,.book-menu nav,.book-toc nav{padding:2rem 1rem}}.download-btn{display:inline-block;font-size:.875rem;color:var(--color-link)!important;line-height:2rem;padding:0 1rem;border:1px solid var(--color-link);border-radius:.25rem;cursor:pointer}@font-face{font-family:roboto;font-style:italic;font-weight:300;font-display:swap;src:local("Roboto Light Italic"),local("Roboto-LightItalic"),url(fonts/roboto-v19-latin-300italic.woff2)format("woff2"),url(fonts/roboto-v19-latin-300italic.woff)format("woff")}@font-face{font-family:roboto;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto"),local("Roboto-Regular"),url(fonts/roboto-v19-latin-regular.woff2)format("woff2"),url(fonts/roboto-v19-latin-regular.woff)format("woff")}@font-face{font-family:roboto;font-style:normal;font-weight:700;font-display:swap;src:local("Roboto Bold"),local("Roboto-Bold"),url(fonts/roboto-v19-latin-700.woff2)format("woff2"),url(fonts/roboto-v19-latin-700.woff)format("woff")}@font-face{font-family:roboto mono;font-style:normal;font-weight:400;font-display:swap;src:local("Roboto Mono"),local("RobotoMono-Regular"),url(fonts/roboto-mono-v6-latin-regular.woff2)format("woff2"),url(fonts/roboto-mono-v6-latin-regular.woff)format("woff")}@font-face{font-family:alegreya sans;font-style:normal;font-weight:400;src:url(fonts/5aUz9_-1phKLFgshYDvh6Vwt7VRtvWdUhm97sg.woff2)format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:alegreya sans,sans-serif,roboto;font-style:normal;font-weight:400;src:url(fonts/5aUz9_-1phKLFgshYDvh6Vwt7VptvWdUhm8.woff2)format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer,.book-toc{display:none}.book-header,.book-header aside{display:block}main{display:block!important}}.markdown{line-height:1.6}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1;margin-top:1.5em;margin-bottom:1rem}.markdown h1 a.anchor,.markdown h2 a.anchor,.markdown h3 a.anchor,.markdown h4 a.anchor,.markdown h5 a.anchor,.markdown h6 a.anchor{opacity:0;font-size:.75em;vertical-align:middle;text-decoration:none}.markdown h1:hover a.anchor,.markdown h1 a.anchor:focus,.markdown h2:hover a.anchor,.markdown h2 a.anchor:focus,.markdown h3:hover a.anchor,.markdown h3 a.anchor:focus,.markdown h4:hover a.anchor,.markdown h4 a.anchor:focus,.markdown h5:hover a.anchor,.markdown h5 a.anchor:focus,.markdown h6:hover a.anchor,.markdown h6 a.anchor:focus{opacity:initial}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown a:visited{color:var(--color-visited-link)}.markdown img{max-width:100%}.markdown code{padding:0 .25rem;background:var(--gray-200);border-radius:.25rem;font-size:.875em}.markdown pre{padding:1rem;background:var(--gray-100);border-radius:.25rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-inline-start:.25rem solid var(--gray-200);border-radius:.25rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid var(--gray-200)}.markdown table tr:nth-child(2n){background:var(--gray-100)}.markdown hr{height:1px;border:none;background:var(--gray-200)}.markdown ul,.markdown ol{padding-inline-start:2rem}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-inline-start:1rem;margin-bottom:1rem}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-inline-end:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-inline-start:0}.markdown details{padding:1rem;border:1px solid var(--gray-200);border-radius:.25rem}.markdown details summary{line-height:1;padding:1rem;margin:-1rem;cursor:pointer}.markdown details[open] summary{margin-bottom:0}.markdown figure{margin:1rem 0}.markdown figure figcaption p{margin-top:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.markdown .book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid var(--gray-200);border-radius:.25rem;overflow:hidden}.markdown .book-expand .book-expand-head{background:var(--gray-100);padding:.5rem 1rem;cursor:pointer}.markdown .book-expand .book-expand-content{display:none;padding:1rem}.markdown .book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.markdown .book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid var(--gray-200);border-radius:.25rem;overflow:hidden;display:flex;flex-wrap:wrap}.markdown .book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.markdown .book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid var(--gray-100);padding:1rem;display:none}.markdown .book-tabs input[type=radio]:checked+label{border-bottom:1px solid var(--color-link)}.markdown .book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.markdown .book-tabs input[type=radio]:focus+label{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}.markdown .book-columns{margin-left:-1rem;margin-right:-1rem}.markdown .book-columns>div{margin:1rem 0;min-width:10rem;padding:0 1rem}.markdown a.book-btn{display:inline-block;font-size:.875rem;color:var(--color-link);line-height:2rem;padding:0 1rem;border:1px solid var(--color-link);border-radius:.25rem;cursor:pointer}.markdown a.book-btn:hover{text-decoration:none}.markdown .book-hint.info{border-color:#6bf;background-color:rgba(102,187,255,.1)}.markdown .book-hint.warning{border-color:#fd6;background-color:rgba(255,221,102,.1)}.markdown .book-hint.danger{border-color:#f66;background-color:rgba(255,102,102,.1)}.footer{color:#a4a2a2}.book-footer{clear:both} \ No newline at end of file diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..454e0e2 --- /dev/null +++ b/categories/index.html @@ -0,0 +1,27 @@ +Categories | INFINI Pizza +
+Categories +
\ No newline at end of file diff --git a/categories/index.xml b/categories/index.xml new file mode 100644 index 0000000..027660d --- /dev/null +++ b/categories/index.xml @@ -0,0 +1 @@ +Categories on INFINI Pizza/categories/Recent content in Categories on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/categories/page/1/index.html b/categories/page/1/index.html new file mode 100644 index 0000000..770d67c --- /dev/null +++ b/categories/page/1/index.html @@ -0,0 +1 @@ +/categories/ \ No newline at end of file diff --git a/css/asciinema-player.css b/css/asciinema-player.css new file mode 100644 index 0000000..8d77df4 --- /dev/null +++ b/css/asciinema-player.css @@ -0,0 +1,2563 @@ +.asciinema-player-wrapper { + position: relative; + text-align: center; + outline: none; +} +.asciinema-player-wrapper .title-bar { + display: none; + top: -78px; + transition: top 0.15s linear; + position: absolute; + left: 0; + right: 0; + box-sizing: content-box; + font-size: 20px; + line-height: 1em; + padding: 15px; + font-family: sans-serif; + color: white; + background-color: rgba(0, 0, 0, 0.8); +} +.asciinema-player-wrapper .title-bar img { + vertical-align: middle; + height: 48px; + margin-right: 16px; +} +.asciinema-player-wrapper .title-bar a { + color: white; + text-decoration: underline; +} +.asciinema-player-wrapper .title-bar a:hover { + text-decoration: none; +} +.asciinema-player-wrapper:fullscreen { + background-color: #000; + width: 100%; + height: 100%; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; +} +.asciinema-player-wrapper:fullscreen .asciinema-player { + position: static; +} +.asciinema-player-wrapper:fullscreen .title-bar { + display: initial; +} +.asciinema-player-wrapper:fullscreen.hud .title-bar { + top: 0; +} +.asciinema-player-wrapper:-webkit-full-screen { + background-color: #000; + width: 100%; + height: 100%; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; +} +.asciinema-player-wrapper:-webkit-full-screen .asciinema-player { + position: static; +} +.asciinema-player-wrapper:-webkit-full-screen .title-bar { + display: initial; +} +.asciinema-player-wrapper:-webkit-full-screen.hud .title-bar { + top: 0; +} +.asciinema-player-wrapper:-moz-full-screen { + background-color: #000; + width: 100%; + height: 100%; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; +} +.asciinema-player-wrapper:-moz-full-screen .asciinema-player { + position: static; +} +.asciinema-player-wrapper:-moz-full-screen .title-bar { + display: initial; +} +.asciinema-player-wrapper:-moz-full-screen.hud .title-bar { + top: 0; +} +.asciinema-player-wrapper:-ms-fullscreen { + background-color: #000; + width: 100%; + height: 100%; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; +} +.asciinema-player-wrapper:-ms-fullscreen .asciinema-player { + position: static; +} +.asciinema-player-wrapper:-ms-fullscreen .title-bar { + display: initial; +} +.asciinema-player-wrapper:-ms-fullscreen.hud .title-bar { + top: 0; +} +.asciinema-player-wrapper .asciinema-player { + text-align: left; + display: inline-block; + padding: 0px; + position: relative; + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + overflow: hidden; + max-width: 100%; +} +.asciinema-terminal { + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + overflow: hidden; + padding: 0; + margin: 0px; + display: block; + white-space: pre; + border: 0; + word-wrap: normal; + word-break: normal; + border-radius: 0; + border-style: solid; + cursor: text; + border-width: 0.5em; + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + line-height: 1.3333333333em; +} +.asciinema-terminal .line { + letter-spacing: normal; + overflow: hidden; + height: 1.3333333333em; +} +.asciinema-terminal .line span { + padding: 0; + display: inline-block; + height: 1.3333333333em; +} +.asciinema-terminal .line { + display: block; + width: 200%; +} +.asciinema-terminal .bright { + font-weight: bold; +} +.asciinema-terminal .underline { + text-decoration: underline; +} +.asciinema-terminal .italic { + font-style: italic; +} +.asciinema-terminal.font-small { + font-size: 12px; +} +.asciinema-terminal.font-medium { + font-size: 18px; +} +.asciinema-terminal.font-big { + font-size: 24px; +} +.asciinema-player .control-bar { + width: 100%; + height: 32px; + background: rgba(0, 0, 0, 0.8); + /* no gradient fallback */ + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); + /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); + /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); + /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + color: #bbbbbb; + box-sizing: content-box; + line-height: 1; + position: absolute; + bottom: -35px; + left: 0; + transition: bottom 0.15s linear; +} +.asciinema-player .control-bar * { + box-sizing: inherit; + font-size: 0; +} +.asciinema-player .control-bar svg.icon path { + fill: #bbbbbb; +} +.asciinema-player .control-bar .playback-button { + display: block; + float: left; + cursor: pointer; + height: 12px; + width: 12px; + padding: 10px; +} +.asciinema-player .control-bar .playback-button svg { + height: 12px; + width: 12px; +} +.asciinema-player .control-bar .timer { + display: block; + float: left; + width: 50px; + height: 100%; + text-align: center; + font-family: Helvetica, Arial, sans-serif; + font-size: 11px; + font-weight: bold; + line-height: 32px; + cursor: default; +} +.asciinema-player .control-bar .timer span { + display: inline-block; + font-size: inherit; +} +.asciinema-player .control-bar .timer .time-remaining { + display: none; +} +.asciinema-player .control-bar .timer:hover .time-elapsed { + display: none; +} +.asciinema-player .control-bar .timer:hover .time-remaining { + display: inline; +} +.asciinema-player .control-bar .progressbar { + display: block; + overflow: hidden; + height: 100%; + padding: 0 10px; +} +.asciinema-player .control-bar .progressbar .bar { + display: block; + cursor: pointer; + height: 100%; + padding-top: 15px; + font-size: 0; +} +.asciinema-player .control-bar .progressbar .bar .gutter { + display: block; + height: 3px; + background-color: #333; +} +.asciinema-player .control-bar .progressbar .bar .gutter span { + display: inline-block; + height: 100%; + background-color: #bbbbbb; + border-radius: 3px; +} +.asciinema-player .control-bar.live .progressbar .bar { + cursor: default; +} +.asciinema-player .control-bar .fullscreen-button { + display: block; + float: right; + width: 14px; + height: 14px; + padding: 9px; + cursor: pointer; +} +.asciinema-player .control-bar .fullscreen-button svg { + width: 14px; + height: 14px; +} +.asciinema-player .control-bar .fullscreen-button svg:first-child { + display: inline; +} +.asciinema-player .control-bar .fullscreen-button svg:last-child { + display: none; +} +.asciinema-player-wrapper.hud .control-bar { + bottom: 0px; +} +.asciinema-player-wrapper:fullscreen .fullscreen-button svg:first-child { + display: none; +} +.asciinema-player-wrapper:fullscreen .fullscreen-button svg:last-child { + display: inline; +} +.asciinema-player-wrapper:-webkit-full-screen .fullscreen-button svg:first-child { + display: none; +} +.asciinema-player-wrapper:-webkit-full-screen .fullscreen-button svg:last-child { + display: inline; +} +.asciinema-player-wrapper:-moz-full-screen .fullscreen-button svg:first-child { + display: none; +} +.asciinema-player-wrapper:-moz-full-screen .fullscreen-button svg:last-child { + display: inline; +} +.asciinema-player-wrapper:-ms-fullscreen .fullscreen-button svg:first-child { + display: none; +} +.asciinema-player-wrapper:-ms-fullscreen .fullscreen-button svg:last-child { + display: inline; +} +.asciinema-player .loading { + z-index: 10; + background-repeat: no-repeat; + background-position: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 32px; + background-color: rgba(0, 0, 0, 0.5); +} +.asciinema-player .start-prompt { + z-index: 10; + background-repeat: no-repeat; + background-position: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 32px; + z-index: 20; + cursor: pointer; +} +.asciinema-player .start-prompt .play-button { + font-size: 0px; +} +.asciinema-player .start-prompt .play-button { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + text-align: center; + color: white; + display: table; + width: 100%; + height: 100%; +} +.asciinema-player .start-prompt .play-button div { + vertical-align: middle; + display: table-cell; +} +.asciinema-player .start-prompt .play-button div span { + width: 96px; + height: 96px; + display: inline-block; +} +@-webkit-keyframes expand { + 0% { + -webkit-transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + } + 100% { + z-index: 1; + } +} +@-moz-keyframes expand { + 0% { + -moz-transform: scale(0); + } + 50% { + -moz-transform: scale(1); + } + 100% { + z-index: 1; + } +} +@-o-keyframes expand { + 0% { + -o-transform: scale(0); + } + 50% { + -o-transform: scale(1); + } + 100% { + z-index: 1; + } +} +@keyframes expand { + 0% { + transform: scale(0); + } + 50% { + transform: scale(1); + } + 100% { + z-index: 1; + } +} +.loader { + position: absolute; + left: 50%; + top: 50%; + margin: -20px 0 0 -20px; + background-color: white; + border-radius: 50%; + box-shadow: 0 0 0 6.66667px #141414; + width: 40px; + height: 40px; +} +.loader:before, +.loader:after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + display: block; + margin: -21px 0 0 -21px; + border-radius: 50%; + z-index: 2; + width: 42px; + height: 42px; +} +.loader:before { + background-color: #141414; + -webkit-animation: expand 1.6s linear infinite both; + -moz-animation: expand 1.6s linear infinite both; + animation: expand 1.6s linear infinite both; +} +.loader:after { + background-color: white; + -webkit-animation: expand 1.6s linear 0.8s infinite both; + -moz-animation: expand 1.6s linear 0.8s infinite both; + animation: expand 1.6s linear 0.8s infinite both; +} +.asciinema-terminal .fg-16 { + color: #000000; +} +.asciinema-terminal .bg-16 { + background-color: #000000; +} +.asciinema-terminal .fg-17 { + color: #00005f; +} +.asciinema-terminal .bg-17 { + background-color: #00005f; +} +.asciinema-terminal .fg-18 { + color: #000087; +} +.asciinema-terminal .bg-18 { + background-color: #000087; +} +.asciinema-terminal .fg-19 { + color: #0000af; +} +.asciinema-terminal .bg-19 { + background-color: #0000af; +} +.asciinema-terminal .fg-20 { + color: #0000d7; +} +.asciinema-terminal .bg-20 { + background-color: #0000d7; +} +.asciinema-terminal .fg-21 { + color: #0000ff; +} +.asciinema-terminal .bg-21 { + background-color: #0000ff; +} +.asciinema-terminal .fg-22 { + color: #005f00; +} +.asciinema-terminal .bg-22 { + background-color: #005f00; +} +.asciinema-terminal .fg-23 { + color: #005f5f; +} +.asciinema-terminal .bg-23 { + background-color: #005f5f; +} +.asciinema-terminal .fg-24 { + color: #005f87; +} +.asciinema-terminal .bg-24 { + background-color: #005f87; +} +.asciinema-terminal .fg-25 { + color: #005faf; +} +.asciinema-terminal .bg-25 { + background-color: #005faf; +} +.asciinema-terminal .fg-26 { + color: #005fd7; +} +.asciinema-terminal .bg-26 { + background-color: #005fd7; +} +.asciinema-terminal .fg-27 { + color: #005fff; +} +.asciinema-terminal .bg-27 { + background-color: #005fff; +} +.asciinema-terminal .fg-28 { + color: #008700; +} +.asciinema-terminal .bg-28 { + background-color: #008700; +} +.asciinema-terminal .fg-29 { + color: #00875f; +} +.asciinema-terminal .bg-29 { + background-color: #00875f; +} +.asciinema-terminal .fg-30 { + color: #008787; +} +.asciinema-terminal .bg-30 { + background-color: #008787; +} +.asciinema-terminal .fg-31 { + color: #0087af; +} +.asciinema-terminal .bg-31 { + background-color: #0087af; +} +.asciinema-terminal .fg-32 { + color: #0087d7; +} +.asciinema-terminal .bg-32 { + background-color: #0087d7; +} +.asciinema-terminal .fg-33 { + color: #0087ff; +} +.asciinema-terminal .bg-33 { + background-color: #0087ff; +} +.asciinema-terminal .fg-34 { + color: #00af00; +} +.asciinema-terminal .bg-34 { + background-color: #00af00; +} +.asciinema-terminal .fg-35 { + color: #00af5f; +} +.asciinema-terminal .bg-35 { + background-color: #00af5f; +} +.asciinema-terminal .fg-36 { + color: #00af87; +} +.asciinema-terminal .bg-36 { + background-color: #00af87; +} +.asciinema-terminal .fg-37 { + color: #00afaf; +} +.asciinema-terminal .bg-37 { + background-color: #00afaf; +} +.asciinema-terminal .fg-38 { + color: #00afd7; +} +.asciinema-terminal .bg-38 { + background-color: #00afd7; +} +.asciinema-terminal .fg-39 { + color: #00afff; +} +.asciinema-terminal .bg-39 { + background-color: #00afff; +} +.asciinema-terminal .fg-40 { + color: #00d700; +} +.asciinema-terminal .bg-40 { + background-color: #00d700; +} +.asciinema-terminal .fg-41 { + color: #00d75f; +} +.asciinema-terminal .bg-41 { + background-color: #00d75f; +} +.asciinema-terminal .fg-42 { + color: #00d787; +} +.asciinema-terminal .bg-42 { + background-color: #00d787; +} +.asciinema-terminal .fg-43 { + color: #00d7af; +} +.asciinema-terminal .bg-43 { + background-color: #00d7af; +} +.asciinema-terminal .fg-44 { + color: #00d7d7; +} +.asciinema-terminal .bg-44 { + background-color: #00d7d7; +} +.asciinema-terminal .fg-45 { + color: #00d7ff; +} +.asciinema-terminal .bg-45 { + background-color: #00d7ff; +} +.asciinema-terminal .fg-46 { + color: #00ff00; +} +.asciinema-terminal .bg-46 { + background-color: #00ff00; +} +.asciinema-terminal .fg-47 { + color: #00ff5f; +} +.asciinema-terminal .bg-47 { + background-color: #00ff5f; +} +.asciinema-terminal .fg-48 { + color: #00ff87; +} +.asciinema-terminal .bg-48 { + background-color: #00ff87; +} +.asciinema-terminal .fg-49 { + color: #00ffaf; +} +.asciinema-terminal .bg-49 { + background-color: #00ffaf; +} +.asciinema-terminal .fg-50 { + color: #00ffd7; +} +.asciinema-terminal .bg-50 { + background-color: #00ffd7; +} +.asciinema-terminal .fg-51 { + color: #00ffff; +} +.asciinema-terminal .bg-51 { + background-color: #00ffff; +} +.asciinema-terminal .fg-52 { + color: #5f0000; +} +.asciinema-terminal .bg-52 { + background-color: #5f0000; +} +.asciinema-terminal .fg-53 { + color: #5f005f; +} +.asciinema-terminal .bg-53 { + background-color: #5f005f; +} +.asciinema-terminal .fg-54 { + color: #5f0087; +} +.asciinema-terminal .bg-54 { + background-color: #5f0087; +} +.asciinema-terminal .fg-55 { + color: #5f00af; +} +.asciinema-terminal .bg-55 { + background-color: #5f00af; +} +.asciinema-terminal .fg-56 { + color: #5f00d7; +} +.asciinema-terminal .bg-56 { + background-color: #5f00d7; +} +.asciinema-terminal .fg-57 { + color: #5f00ff; +} +.asciinema-terminal .bg-57 { + background-color: #5f00ff; +} +.asciinema-terminal .fg-58 { + color: #5f5f00; +} +.asciinema-terminal .bg-58 { + background-color: #5f5f00; +} +.asciinema-terminal .fg-59 { + color: #5f5f5f; +} +.asciinema-terminal .bg-59 { + background-color: #5f5f5f; +} +.asciinema-terminal .fg-60 { + color: #5f5f87; +} +.asciinema-terminal .bg-60 { + background-color: #5f5f87; +} +.asciinema-terminal .fg-61 { + color: #5f5faf; +} +.asciinema-terminal .bg-61 { + background-color: #5f5faf; +} +.asciinema-terminal .fg-62 { + color: #5f5fd7; +} +.asciinema-terminal .bg-62 { + background-color: #5f5fd7; +} +.asciinema-terminal .fg-63 { + color: #5f5fff; +} +.asciinema-terminal .bg-63 { + background-color: #5f5fff; +} +.asciinema-terminal .fg-64 { + color: #5f8700; +} +.asciinema-terminal .bg-64 { + background-color: #5f8700; +} +.asciinema-terminal .fg-65 { + color: #5f875f; +} +.asciinema-terminal .bg-65 { + background-color: #5f875f; +} +.asciinema-terminal .fg-66 { + color: #5f8787; +} +.asciinema-terminal .bg-66 { + background-color: #5f8787; +} +.asciinema-terminal .fg-67 { + color: #5f87af; +} +.asciinema-terminal .bg-67 { + background-color: #5f87af; +} +.asciinema-terminal .fg-68 { + color: #5f87d7; +} +.asciinema-terminal .bg-68 { + background-color: #5f87d7; +} +.asciinema-terminal .fg-69 { + color: #5f87ff; +} +.asciinema-terminal .bg-69 { + background-color: #5f87ff; +} +.asciinema-terminal .fg-70 { + color: #5faf00; +} +.asciinema-terminal .bg-70 { + background-color: #5faf00; +} +.asciinema-terminal .fg-71 { + color: #5faf5f; +} +.asciinema-terminal .bg-71 { + background-color: #5faf5f; +} +.asciinema-terminal .fg-72 { + color: #5faf87; +} +.asciinema-terminal .bg-72 { + background-color: #5faf87; +} +.asciinema-terminal .fg-73 { + color: #5fafaf; +} +.asciinema-terminal .bg-73 { + background-color: #5fafaf; +} +.asciinema-terminal .fg-74 { + color: #5fafd7; +} +.asciinema-terminal .bg-74 { + background-color: #5fafd7; +} +.asciinema-terminal .fg-75 { + color: #5fafff; +} +.asciinema-terminal .bg-75 { + background-color: #5fafff; +} +.asciinema-terminal .fg-76 { + color: #5fd700; +} +.asciinema-terminal .bg-76 { + background-color: #5fd700; +} +.asciinema-terminal .fg-77 { + color: #5fd75f; +} +.asciinema-terminal .bg-77 { + background-color: #5fd75f; +} +.asciinema-terminal .fg-78 { + color: #5fd787; +} +.asciinema-terminal .bg-78 { + background-color: #5fd787; +} +.asciinema-terminal .fg-79 { + color: #5fd7af; +} +.asciinema-terminal .bg-79 { + background-color: #5fd7af; +} +.asciinema-terminal .fg-80 { + color: #5fd7d7; +} +.asciinema-terminal .bg-80 { + background-color: #5fd7d7; +} +.asciinema-terminal .fg-81 { + color: #5fd7ff; +} +.asciinema-terminal .bg-81 { + background-color: #5fd7ff; +} +.asciinema-terminal .fg-82 { + color: #5fff00; +} +.asciinema-terminal .bg-82 { + background-color: #5fff00; +} +.asciinema-terminal .fg-83 { + color: #5fff5f; +} +.asciinema-terminal .bg-83 { + background-color: #5fff5f; +} +.asciinema-terminal .fg-84 { + color: #5fff87; +} +.asciinema-terminal .bg-84 { + background-color: #5fff87; +} +.asciinema-terminal .fg-85 { + color: #5fffaf; +} +.asciinema-terminal .bg-85 { + background-color: #5fffaf; +} +.asciinema-terminal .fg-86 { + color: #5fffd7; +} +.asciinema-terminal .bg-86 { + background-color: #5fffd7; +} +.asciinema-terminal .fg-87 { + color: #5fffff; +} +.asciinema-terminal .bg-87 { + background-color: #5fffff; +} +.asciinema-terminal .fg-88 { + color: #870000; +} +.asciinema-terminal .bg-88 { + background-color: #870000; +} +.asciinema-terminal .fg-89 { + color: #87005f; +} +.asciinema-terminal .bg-89 { + background-color: #87005f; +} +.asciinema-terminal .fg-90 { + color: #870087; +} +.asciinema-terminal .bg-90 { + background-color: #870087; +} +.asciinema-terminal .fg-91 { + color: #8700af; +} +.asciinema-terminal .bg-91 { + background-color: #8700af; +} +.asciinema-terminal .fg-92 { + color: #8700d7; +} +.asciinema-terminal .bg-92 { + background-color: #8700d7; +} +.asciinema-terminal .fg-93 { + color: #8700ff; +} +.asciinema-terminal .bg-93 { + background-color: #8700ff; +} +.asciinema-terminal .fg-94 { + color: #875f00; +} +.asciinema-terminal .bg-94 { + background-color: #875f00; +} +.asciinema-terminal .fg-95 { + color: #875f5f; +} +.asciinema-terminal .bg-95 { + background-color: #875f5f; +} +.asciinema-terminal .fg-96 { + color: #875f87; +} +.asciinema-terminal .bg-96 { + background-color: #875f87; +} +.asciinema-terminal .fg-97 { + color: #875faf; +} +.asciinema-terminal .bg-97 { + background-color: #875faf; +} +.asciinema-terminal .fg-98 { + color: #875fd7; +} +.asciinema-terminal .bg-98 { + background-color: #875fd7; +} +.asciinema-terminal .fg-99 { + color: #875fff; +} +.asciinema-terminal .bg-99 { + background-color: #875fff; +} +.asciinema-terminal .fg-100 { + color: #878700; +} +.asciinema-terminal .bg-100 { + background-color: #878700; +} +.asciinema-terminal .fg-101 { + color: #87875f; +} +.asciinema-terminal .bg-101 { + background-color: #87875f; +} +.asciinema-terminal .fg-102 { + color: #878787; +} +.asciinema-terminal .bg-102 { + background-color: #878787; +} +.asciinema-terminal .fg-103 { + color: #8787af; +} +.asciinema-terminal .bg-103 { + background-color: #8787af; +} +.asciinema-terminal .fg-104 { + color: #8787d7; +} +.asciinema-terminal .bg-104 { + background-color: #8787d7; +} +.asciinema-terminal .fg-105 { + color: #8787ff; +} +.asciinema-terminal .bg-105 { + background-color: #8787ff; +} +.asciinema-terminal .fg-106 { + color: #87af00; +} +.asciinema-terminal .bg-106 { + background-color: #87af00; +} +.asciinema-terminal .fg-107 { + color: #87af5f; +} +.asciinema-terminal .bg-107 { + background-color: #87af5f; +} +.asciinema-terminal .fg-108 { + color: #87af87; +} +.asciinema-terminal .bg-108 { + background-color: #87af87; +} +.asciinema-terminal .fg-109 { + color: #87afaf; +} +.asciinema-terminal .bg-109 { + background-color: #87afaf; +} +.asciinema-terminal .fg-110 { + color: #87afd7; +} +.asciinema-terminal .bg-110 { + background-color: #87afd7; +} +.asciinema-terminal .fg-111 { + color: #87afff; +} +.asciinema-terminal .bg-111 { + background-color: #87afff; +} +.asciinema-terminal .fg-112 { + color: #87d700; +} +.asciinema-terminal .bg-112 { + background-color: #87d700; +} +.asciinema-terminal .fg-113 { + color: #87d75f; +} +.asciinema-terminal .bg-113 { + background-color: #87d75f; +} +.asciinema-terminal .fg-114 { + color: #87d787; +} +.asciinema-terminal .bg-114 { + background-color: #87d787; +} +.asciinema-terminal .fg-115 { + color: #87d7af; +} +.asciinema-terminal .bg-115 { + background-color: #87d7af; +} +.asciinema-terminal .fg-116 { + color: #87d7d7; +} +.asciinema-terminal .bg-116 { + background-color: #87d7d7; +} +.asciinema-terminal .fg-117 { + color: #87d7ff; +} +.asciinema-terminal .bg-117 { + background-color: #87d7ff; +} +.asciinema-terminal .fg-118 { + color: #87ff00; +} +.asciinema-terminal .bg-118 { + background-color: #87ff00; +} +.asciinema-terminal .fg-119 { + color: #87ff5f; +} +.asciinema-terminal .bg-119 { + background-color: #87ff5f; +} +.asciinema-terminal .fg-120 { + color: #87ff87; +} +.asciinema-terminal .bg-120 { + background-color: #87ff87; +} +.asciinema-terminal .fg-121 { + color: #87ffaf; +} +.asciinema-terminal .bg-121 { + background-color: #87ffaf; +} +.asciinema-terminal .fg-122 { + color: #87ffd7; +} +.asciinema-terminal .bg-122 { + background-color: #87ffd7; +} +.asciinema-terminal .fg-123 { + color: #87ffff; +} +.asciinema-terminal .bg-123 { + background-color: #87ffff; +} +.asciinema-terminal .fg-124 { + color: #af0000; +} +.asciinema-terminal .bg-124 { + background-color: #af0000; +} +.asciinema-terminal .fg-125 { + color: #af005f; +} +.asciinema-terminal .bg-125 { + background-color: #af005f; +} +.asciinema-terminal .fg-126 { + color: #af0087; +} +.asciinema-terminal .bg-126 { + background-color: #af0087; +} +.asciinema-terminal .fg-127 { + color: #af00af; +} +.asciinema-terminal .bg-127 { + background-color: #af00af; +} +.asciinema-terminal .fg-128 { + color: #af00d7; +} +.asciinema-terminal .bg-128 { + background-color: #af00d7; +} +.asciinema-terminal .fg-129 { + color: #af00ff; +} +.asciinema-terminal .bg-129 { + background-color: #af00ff; +} +.asciinema-terminal .fg-130 { + color: #af5f00; +} +.asciinema-terminal .bg-130 { + background-color: #af5f00; +} +.asciinema-terminal .fg-131 { + color: #af5f5f; +} +.asciinema-terminal .bg-131 { + background-color: #af5f5f; +} +.asciinema-terminal .fg-132 { + color: #af5f87; +} +.asciinema-terminal .bg-132 { + background-color: #af5f87; +} +.asciinema-terminal .fg-133 { + color: #af5faf; +} +.asciinema-terminal .bg-133 { + background-color: #af5faf; +} +.asciinema-terminal .fg-134 { + color: #af5fd7; +} +.asciinema-terminal .bg-134 { + background-color: #af5fd7; +} +.asciinema-terminal .fg-135 { + color: #af5fff; +} +.asciinema-terminal .bg-135 { + background-color: #af5fff; +} +.asciinema-terminal .fg-136 { + color: #af8700; +} +.asciinema-terminal .bg-136 { + background-color: #af8700; +} +.asciinema-terminal .fg-137 { + color: #af875f; +} +.asciinema-terminal .bg-137 { + background-color: #af875f; +} +.asciinema-terminal .fg-138 { + color: #af8787; +} +.asciinema-terminal .bg-138 { + background-color: #af8787; +} +.asciinema-terminal .fg-139 { + color: #af87af; +} +.asciinema-terminal .bg-139 { + background-color: #af87af; +} +.asciinema-terminal .fg-140 { + color: #af87d7; +} +.asciinema-terminal .bg-140 { + background-color: #af87d7; +} +.asciinema-terminal .fg-141 { + color: #af87ff; +} +.asciinema-terminal .bg-141 { + background-color: #af87ff; +} +.asciinema-terminal .fg-142 { + color: #afaf00; +} +.asciinema-terminal .bg-142 { + background-color: #afaf00; +} +.asciinema-terminal .fg-143 { + color: #afaf5f; +} +.asciinema-terminal .bg-143 { + background-color: #afaf5f; +} +.asciinema-terminal .fg-144 { + color: #afaf87; +} +.asciinema-terminal .bg-144 { + background-color: #afaf87; +} +.asciinema-terminal .fg-145 { + color: #afafaf; +} +.asciinema-terminal .bg-145 { + background-color: #afafaf; +} +.asciinema-terminal .fg-146 { + color: #afafd7; +} +.asciinema-terminal .bg-146 { + background-color: #afafd7; +} +.asciinema-terminal .fg-147 { + color: #afafff; +} +.asciinema-terminal .bg-147 { + background-color: #afafff; +} +.asciinema-terminal .fg-148 { + color: #afd700; +} +.asciinema-terminal .bg-148 { + background-color: #afd700; +} +.asciinema-terminal .fg-149 { + color: #afd75f; +} +.asciinema-terminal .bg-149 { + background-color: #afd75f; +} +.asciinema-terminal .fg-150 { + color: #afd787; +} +.asciinema-terminal .bg-150 { + background-color: #afd787; +} +.asciinema-terminal .fg-151 { + color: #afd7af; +} +.asciinema-terminal .bg-151 { + background-color: #afd7af; +} +.asciinema-terminal .fg-152 { + color: #afd7d7; +} +.asciinema-terminal .bg-152 { + background-color: #afd7d7; +} +.asciinema-terminal .fg-153 { + color: #afd7ff; +} +.asciinema-terminal .bg-153 { + background-color: #afd7ff; +} +.asciinema-terminal .fg-154 { + color: #afff00; +} +.asciinema-terminal .bg-154 { + background-color: #afff00; +} +.asciinema-terminal .fg-155 { + color: #afff5f; +} +.asciinema-terminal .bg-155 { + background-color: #afff5f; +} +.asciinema-terminal .fg-156 { + color: #afff87; +} +.asciinema-terminal .bg-156 { + background-color: #afff87; +} +.asciinema-terminal .fg-157 { + color: #afffaf; +} +.asciinema-terminal .bg-157 { + background-color: #afffaf; +} +.asciinema-terminal .fg-158 { + color: #afffd7; +} +.asciinema-terminal .bg-158 { + background-color: #afffd7; +} +.asciinema-terminal .fg-159 { + color: #afffff; +} +.asciinema-terminal .bg-159 { + background-color: #afffff; +} +.asciinema-terminal .fg-160 { + color: #d70000; +} +.asciinema-terminal .bg-160 { + background-color: #d70000; +} +.asciinema-terminal .fg-161 { + color: #d7005f; +} +.asciinema-terminal .bg-161 { + background-color: #d7005f; +} +.asciinema-terminal .fg-162 { + color: #d70087; +} +.asciinema-terminal .bg-162 { + background-color: #d70087; +} +.asciinema-terminal .fg-163 { + color: #d700af; +} +.asciinema-terminal .bg-163 { + background-color: #d700af; +} +.asciinema-terminal .fg-164 { + color: #d700d7; +} +.asciinema-terminal .bg-164 { + background-color: #d700d7; +} +.asciinema-terminal .fg-165 { + color: #d700ff; +} +.asciinema-terminal .bg-165 { + background-color: #d700ff; +} +.asciinema-terminal .fg-166 { + color: #d75f00; +} +.asciinema-terminal .bg-166 { + background-color: #d75f00; +} +.asciinema-terminal .fg-167 { + color: #d75f5f; +} +.asciinema-terminal .bg-167 { + background-color: #d75f5f; +} +.asciinema-terminal .fg-168 { + color: #d75f87; +} +.asciinema-terminal .bg-168 { + background-color: #d75f87; +} +.asciinema-terminal .fg-169 { + color: #d75faf; +} +.asciinema-terminal .bg-169 { + background-color: #d75faf; +} +.asciinema-terminal .fg-170 { + color: #d75fd7; +} +.asciinema-terminal .bg-170 { + background-color: #d75fd7; +} +.asciinema-terminal .fg-171 { + color: #d75fff; +} +.asciinema-terminal .bg-171 { + background-color: #d75fff; +} +.asciinema-terminal .fg-172 { + color: #d78700; +} +.asciinema-terminal .bg-172 { + background-color: #d78700; +} +.asciinema-terminal .fg-173 { + color: #d7875f; +} +.asciinema-terminal .bg-173 { + background-color: #d7875f; +} +.asciinema-terminal .fg-174 { + color: #d78787; +} +.asciinema-terminal .bg-174 { + background-color: #d78787; +} +.asciinema-terminal .fg-175 { + color: #d787af; +} +.asciinema-terminal .bg-175 { + background-color: #d787af; +} +.asciinema-terminal .fg-176 { + color: #d787d7; +} +.asciinema-terminal .bg-176 { + background-color: #d787d7; +} +.asciinema-terminal .fg-177 { + color: #d787ff; +} +.asciinema-terminal .bg-177 { + background-color: #d787ff; +} +.asciinema-terminal .fg-178 { + color: #d7af00; +} +.asciinema-terminal .bg-178 { + background-color: #d7af00; +} +.asciinema-terminal .fg-179 { + color: #d7af5f; +} +.asciinema-terminal .bg-179 { + background-color: #d7af5f; +} +.asciinema-terminal .fg-180 { + color: #d7af87; +} +.asciinema-terminal .bg-180 { + background-color: #d7af87; +} +.asciinema-terminal .fg-181 { + color: #d7afaf; +} +.asciinema-terminal .bg-181 { + background-color: #d7afaf; +} +.asciinema-terminal .fg-182 { + color: #d7afd7; +} +.asciinema-terminal .bg-182 { + background-color: #d7afd7; +} +.asciinema-terminal .fg-183 { + color: #d7afff; +} +.asciinema-terminal .bg-183 { + background-color: #d7afff; +} +.asciinema-terminal .fg-184 { + color: #d7d700; +} +.asciinema-terminal .bg-184 { + background-color: #d7d700; +} +.asciinema-terminal .fg-185 { + color: #d7d75f; +} +.asciinema-terminal .bg-185 { + background-color: #d7d75f; +} +.asciinema-terminal .fg-186 { + color: #d7d787; +} +.asciinema-terminal .bg-186 { + background-color: #d7d787; +} +.asciinema-terminal .fg-187 { + color: #d7d7af; +} +.asciinema-terminal .bg-187 { + background-color: #d7d7af; +} +.asciinema-terminal .fg-188 { + color: #d7d7d7; +} +.asciinema-terminal .bg-188 { + background-color: #d7d7d7; +} +.asciinema-terminal .fg-189 { + color: #d7d7ff; +} +.asciinema-terminal .bg-189 { + background-color: #d7d7ff; +} +.asciinema-terminal .fg-190 { + color: #d7ff00; +} +.asciinema-terminal .bg-190 { + background-color: #d7ff00; +} +.asciinema-terminal .fg-191 { + color: #d7ff5f; +} +.asciinema-terminal .bg-191 { + background-color: #d7ff5f; +} +.asciinema-terminal .fg-192 { + color: #d7ff87; +} +.asciinema-terminal .bg-192 { + background-color: #d7ff87; +} +.asciinema-terminal .fg-193 { + color: #d7ffaf; +} +.asciinema-terminal .bg-193 { + background-color: #d7ffaf; +} +.asciinema-terminal .fg-194 { + color: #d7ffd7; +} +.asciinema-terminal .bg-194 { + background-color: #d7ffd7; +} +.asciinema-terminal .fg-195 { + color: #d7ffff; +} +.asciinema-terminal .bg-195 { + background-color: #d7ffff; +} +.asciinema-terminal .fg-196 { + color: #ff0000; +} +.asciinema-terminal .bg-196 { + background-color: #ff0000; +} +.asciinema-terminal .fg-197 { + color: #ff005f; +} +.asciinema-terminal .bg-197 { + background-color: #ff005f; +} +.asciinema-terminal .fg-198 { + color: #ff0087; +} +.asciinema-terminal .bg-198 { + background-color: #ff0087; +} +.asciinema-terminal .fg-199 { + color: #ff00af; +} +.asciinema-terminal .bg-199 { + background-color: #ff00af; +} +.asciinema-terminal .fg-200 { + color: #ff00d7; +} +.asciinema-terminal .bg-200 { + background-color: #ff00d7; +} +.asciinema-terminal .fg-201 { + color: #ff00ff; +} +.asciinema-terminal .bg-201 { + background-color: #ff00ff; +} +.asciinema-terminal .fg-202 { + color: #ff5f00; +} +.asciinema-terminal .bg-202 { + background-color: #ff5f00; +} +.asciinema-terminal .fg-203 { + color: #ff5f5f; +} +.asciinema-terminal .bg-203 { + background-color: #ff5f5f; +} +.asciinema-terminal .fg-204 { + color: #ff5f87; +} +.asciinema-terminal .bg-204 { + background-color: #ff5f87; +} +.asciinema-terminal .fg-205 { + color: #ff5faf; +} +.asciinema-terminal .bg-205 { + background-color: #ff5faf; +} +.asciinema-terminal .fg-206 { + color: #ff5fd7; +} +.asciinema-terminal .bg-206 { + background-color: #ff5fd7; +} +.asciinema-terminal .fg-207 { + color: #ff5fff; +} +.asciinema-terminal .bg-207 { + background-color: #ff5fff; +} +.asciinema-terminal .fg-208 { + color: #ff8700; +} +.asciinema-terminal .bg-208 { + background-color: #ff8700; +} +.asciinema-terminal .fg-209 { + color: #ff875f; +} +.asciinema-terminal .bg-209 { + background-color: #ff875f; +} +.asciinema-terminal .fg-210 { + color: #ff8787; +} +.asciinema-terminal .bg-210 { + background-color: #ff8787; +} +.asciinema-terminal .fg-211 { + color: #ff87af; +} +.asciinema-terminal .bg-211 { + background-color: #ff87af; +} +.asciinema-terminal .fg-212 { + color: #ff87d7; +} +.asciinema-terminal .bg-212 { + background-color: #ff87d7; +} +.asciinema-terminal .fg-213 { + color: #ff87ff; +} +.asciinema-terminal .bg-213 { + background-color: #ff87ff; +} +.asciinema-terminal .fg-214 { + color: #ffaf00; +} +.asciinema-terminal .bg-214 { + background-color: #ffaf00; +} +.asciinema-terminal .fg-215 { + color: #ffaf5f; +} +.asciinema-terminal .bg-215 { + background-color: #ffaf5f; +} +.asciinema-terminal .fg-216 { + color: #ffaf87; +} +.asciinema-terminal .bg-216 { + background-color: #ffaf87; +} +.asciinema-terminal .fg-217 { + color: #ffafaf; +} +.asciinema-terminal .bg-217 { + background-color: #ffafaf; +} +.asciinema-terminal .fg-218 { + color: #ffafd7; +} +.asciinema-terminal .bg-218 { + background-color: #ffafd7; +} +.asciinema-terminal .fg-219 { + color: #ffafff; +} +.asciinema-terminal .bg-219 { + background-color: #ffafff; +} +.asciinema-terminal .fg-220 { + color: #ffd700; +} +.asciinema-terminal .bg-220 { + background-color: #ffd700; +} +.asciinema-terminal .fg-221 { + color: #ffd75f; +} +.asciinema-terminal .bg-221 { + background-color: #ffd75f; +} +.asciinema-terminal .fg-222 { + color: #ffd787; +} +.asciinema-terminal .bg-222 { + background-color: #ffd787; +} +.asciinema-terminal .fg-223 { + color: #ffd7af; +} +.asciinema-terminal .bg-223 { + background-color: #ffd7af; +} +.asciinema-terminal .fg-224 { + color: #ffd7d7; +} +.asciinema-terminal .bg-224 { + background-color: #ffd7d7; +} +.asciinema-terminal .fg-225 { + color: #ffd7ff; +} +.asciinema-terminal .bg-225 { + background-color: #ffd7ff; +} +.asciinema-terminal .fg-226 { + color: #ffff00; +} +.asciinema-terminal .bg-226 { + background-color: #ffff00; +} +.asciinema-terminal .fg-227 { + color: #ffff5f; +} +.asciinema-terminal .bg-227 { + background-color: #ffff5f; +} +.asciinema-terminal .fg-228 { + color: #ffff87; +} +.asciinema-terminal .bg-228 { + background-color: #ffff87; +} +.asciinema-terminal .fg-229 { + color: #ffffaf; +} +.asciinema-terminal .bg-229 { + background-color: #ffffaf; +} +.asciinema-terminal .fg-230 { + color: #ffffd7; +} +.asciinema-terminal .bg-230 { + background-color: #ffffd7; +} +.asciinema-terminal .fg-231 { + color: #ffffff; +} +.asciinema-terminal .bg-231 { + background-color: #ffffff; +} +.asciinema-terminal .fg-232 { + color: #080808; +} +.asciinema-terminal .bg-232 { + background-color: #080808; +} +.asciinema-terminal .fg-233 { + color: #121212; +} +.asciinema-terminal .bg-233 { + background-color: #121212; +} +.asciinema-terminal .fg-234 { + color: #1c1c1c; +} +.asciinema-terminal .bg-234 { + background-color: #1c1c1c; +} +.asciinema-terminal .fg-235 { + color: #262626; +} +.asciinema-terminal .bg-235 { + background-color: #262626; +} +.asciinema-terminal .fg-236 { + color: #303030; +} +.asciinema-terminal .bg-236 { + background-color: #303030; +} +.asciinema-terminal .fg-237 { + color: #3a3a3a; +} +.asciinema-terminal .bg-237 { + background-color: #3a3a3a; +} +.asciinema-terminal .fg-238 { + color: #444444; +} +.asciinema-terminal .bg-238 { + background-color: #444444; +} +.asciinema-terminal .fg-239 { + color: #4e4e4e; +} +.asciinema-terminal .bg-239 { + background-color: #4e4e4e; +} +.asciinema-terminal .fg-240 { + color: #585858; +} +.asciinema-terminal .bg-240 { + background-color: #585858; +} +.asciinema-terminal .fg-241 { + color: #626262; +} +.asciinema-terminal .bg-241 { + background-color: #626262; +} +.asciinema-terminal .fg-242 { + color: #6c6c6c; +} +.asciinema-terminal .bg-242 { + background-color: #6c6c6c; +} +.asciinema-terminal .fg-243 { + color: #767676; +} +.asciinema-terminal .bg-243 { + background-color: #767676; +} +.asciinema-terminal .fg-244 { + color: #808080; +} +.asciinema-terminal .bg-244 { + background-color: #808080; +} +.asciinema-terminal .fg-245 { + color: #8a8a8a; +} +.asciinema-terminal .bg-245 { + background-color: #8a8a8a; +} +.asciinema-terminal .fg-246 { + color: #949494; +} +.asciinema-terminal .bg-246 { + background-color: #949494; +} +.asciinema-terminal .fg-247 { + color: #9e9e9e; +} +.asciinema-terminal .bg-247 { + background-color: #9e9e9e; +} +.asciinema-terminal .fg-248 { + color: #a8a8a8; +} +.asciinema-terminal .bg-248 { + background-color: #a8a8a8; +} +.asciinema-terminal .fg-249 { + color: #b2b2b2; +} +.asciinema-terminal .bg-249 { + background-color: #b2b2b2; +} +.asciinema-terminal .fg-250 { + color: #bcbcbc; +} +.asciinema-terminal .bg-250 { + background-color: #bcbcbc; +} +.asciinema-terminal .fg-251 { + color: #c6c6c6; +} +.asciinema-terminal .bg-251 { + background-color: #c6c6c6; +} +.asciinema-terminal .fg-252 { + color: #d0d0d0; +} +.asciinema-terminal .bg-252 { + background-color: #d0d0d0; +} +.asciinema-terminal .fg-253 { + color: #dadada; +} +.asciinema-terminal .bg-253 { + background-color: #dadada; +} +.asciinema-terminal .fg-254 { + color: #e4e4e4; +} +.asciinema-terminal .bg-254 { + background-color: #e4e4e4; +} +.asciinema-terminal .fg-255 { + color: #eeeeee; +} +.asciinema-terminal .bg-255 { + background-color: #eeeeee; +} +.asciinema-theme-asciinema .asciinema-terminal { + color: #cccccc; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-asciinema .fg-bg { + color: #121314; +} +.asciinema-theme-asciinema .bg-fg { + background-color: #cccccc; +} +.asciinema-theme-asciinema .fg-0 { + color: #000000; +} +.asciinema-theme-asciinema .bg-0 { + background-color: #000000; +} +.asciinema-theme-asciinema .fg-1 { + color: #dd3c69; +} +.asciinema-theme-asciinema .bg-1 { + background-color: #dd3c69; +} +.asciinema-theme-asciinema .fg-2 { + color: #4ebf22; +} +.asciinema-theme-asciinema .bg-2 { + background-color: #4ebf22; +} +.asciinema-theme-asciinema .fg-3 { + color: #ddaf3c; +} +.asciinema-theme-asciinema .bg-3 { + background-color: #ddaf3c; +} +.asciinema-theme-asciinema .fg-4 { + color: #26b0d7; +} +.asciinema-theme-asciinema .bg-4 { + background-color: #26b0d7; +} +.asciinema-theme-asciinema .fg-5 { + color: #b954e1; +} +.asciinema-theme-asciinema .bg-5 { + background-color: #b954e1; +} +.asciinema-theme-asciinema .fg-6 { + color: #54e1b9; +} +.asciinema-theme-asciinema .bg-6 { + background-color: #54e1b9; +} +.asciinema-theme-asciinema .fg-7 { + color: #d9d9d9; +} +.asciinema-theme-asciinema .bg-7 { + background-color: #d9d9d9; +} +.asciinema-theme-asciinema .fg-8 { + color: #4d4d4d; +} +.asciinema-theme-asciinema .bg-8 { + background-color: #4d4d4d; +} +.asciinema-theme-asciinema .fg-9 { + color: #dd3c69; +} +.asciinema-theme-asciinema .bg-9 { + background-color: #dd3c69; +} +.asciinema-theme-asciinema .fg-10 { + color: #4ebf22; +} +.asciinema-theme-asciinema .bg-10 { + background-color: #4ebf22; +} +.asciinema-theme-asciinema .fg-11 { + color: #ddaf3c; +} +.asciinema-theme-asciinema .bg-11 { + background-color: #ddaf3c; +} +.asciinema-theme-asciinema .fg-12 { + color: #26b0d7; +} +.asciinema-theme-asciinema .bg-12 { + background-color: #26b0d7; +} +.asciinema-theme-asciinema .fg-13 { + color: #b954e1; +} +.asciinema-theme-asciinema .bg-13 { + background-color: #b954e1; +} +.asciinema-theme-asciinema .fg-14 { + color: #54e1b9; +} +.asciinema-theme-asciinema .bg-14 { + background-color: #54e1b9; +} +.asciinema-theme-asciinema .fg-15 { + color: #ffffff; +} +.asciinema-theme-asciinema .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-asciinema .fg-8, +.asciinema-theme-asciinema .fg-9, +.asciinema-theme-asciinema .fg-10, +.asciinema-theme-asciinema .fg-11, +.asciinema-theme-asciinema .fg-12, +.asciinema-theme-asciinema .fg-13, +.asciinema-theme-asciinema .fg-14, +.asciinema-theme-asciinema .fg-15 { + font-weight: bold; +} +.asciinema-theme-tango .asciinema-terminal { + color: #cccccc; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-tango .fg-bg { + color: #121314; +} +.asciinema-theme-tango .bg-fg { + background-color: #cccccc; +} +.asciinema-theme-tango .fg-0 { + color: #000000; +} +.asciinema-theme-tango .bg-0 { + background-color: #000000; +} +.asciinema-theme-tango .fg-1 { + color: #cc0000; +} +.asciinema-theme-tango .bg-1 { + background-color: #cc0000; +} +.asciinema-theme-tango .fg-2 { + color: #4e9a06; +} +.asciinema-theme-tango .bg-2 { + background-color: #4e9a06; +} +.asciinema-theme-tango .fg-3 { + color: #c4a000; +} +.asciinema-theme-tango .bg-3 { + background-color: #c4a000; +} +.asciinema-theme-tango .fg-4 { + color: #3465a4; +} +.asciinema-theme-tango .bg-4 { + background-color: #3465a4; +} +.asciinema-theme-tango .fg-5 { + color: #75507b; +} +.asciinema-theme-tango .bg-5 { + background-color: #75507b; +} +.asciinema-theme-tango .fg-6 { + color: #06989a; +} +.asciinema-theme-tango .bg-6 { + background-color: #06989a; +} +.asciinema-theme-tango .fg-7 { + color: #d3d7cf; +} +.asciinema-theme-tango .bg-7 { + background-color: #d3d7cf; +} +.asciinema-theme-tango .fg-8 { + color: #555753; +} +.asciinema-theme-tango .bg-8 { + background-color: #555753; +} +.asciinema-theme-tango .fg-9 { + color: #ef2929; +} +.asciinema-theme-tango .bg-9 { + background-color: #ef2929; +} +.asciinema-theme-tango .fg-10 { + color: #8ae234; +} +.asciinema-theme-tango .bg-10 { + background-color: #8ae234; +} +.asciinema-theme-tango .fg-11 { + color: #fce94f; +} +.asciinema-theme-tango .bg-11 { + background-color: #fce94f; +} +.asciinema-theme-tango .fg-12 { + color: #729fcf; +} +.asciinema-theme-tango .bg-12 { + background-color: #729fcf; +} +.asciinema-theme-tango .fg-13 { + color: #ad7fa8; +} +.asciinema-theme-tango .bg-13 { + background-color: #ad7fa8; +} +.asciinema-theme-tango .fg-14 { + color: #34e2e2; +} +.asciinema-theme-tango .bg-14 { + background-color: #34e2e2; +} +.asciinema-theme-tango .fg-15 { + color: #eeeeec; +} +.asciinema-theme-tango .bg-15 { + background-color: #eeeeec; +} +.asciinema-theme-tango .fg-8, +.asciinema-theme-tango .fg-9, +.asciinema-theme-tango .fg-10, +.asciinema-theme-tango .fg-11, +.asciinema-theme-tango .fg-12, +.asciinema-theme-tango .fg-13, +.asciinema-theme-tango .fg-14, +.asciinema-theme-tango .fg-15 { + font-weight: bold; +} +.asciinema-theme-solarized-dark .asciinema-terminal { + color: #839496; + background-color: #002b36; + border-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-bg { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-fg { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-dark .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-dark .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-dark .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-dark .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-dark .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-dark .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-dark .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-dark .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-dark .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-dark .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-dark .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-dark .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-dark .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-dark .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-dark .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-dark .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-dark .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-dark .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-dark .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-dark .fg-11 { + color: #657b83; +} +.asciinema-theme-solarized-dark .bg-11 { + background-color: #657b83; +} +.asciinema-theme-solarized-dark .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-dark .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-dark .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-dark .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-dark .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-dark .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-dark .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light .asciinema-terminal { + color: #657b83; + background-color: #fdf6e3; + border-color: #fdf6e3; +} +.asciinema-theme-solarized-light .fg-bg { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-fg { + background-color: #657b83; +} +.asciinema-theme-solarized-light .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-light .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-light .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-light .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-light .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-light .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-light .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-light .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-light .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-light .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-light .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-light .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-light .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-light .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-light .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-light .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-light .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-light .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-light .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-light .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-light .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-light .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-light .fg-11 { + color: #657c83; +} +.asciinema-theme-solarized-light .bg-11 { + background-color: #657c83; +} +.asciinema-theme-solarized-light .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-light .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-light .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-light .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-light .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-light .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-light .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-seti .asciinema-terminal { + color: #cacecd; + background-color: #111213; + border-color: #111213; +} +.asciinema-theme-seti .fg-bg { + color: #111213; +} +.asciinema-theme-seti .bg-fg { + background-color: #cacecd; +} +.asciinema-theme-seti .fg-0 { + color: #323232; +} +.asciinema-theme-seti .bg-0 { + background-color: #323232; +} +.asciinema-theme-seti .fg-1 { + color: #c22832; +} +.asciinema-theme-seti .bg-1 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-2 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-2 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-3 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-3 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-4 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-4 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-5 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-5 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-6 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-6 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-7 { + color: #eeeeee; +} +.asciinema-theme-seti .bg-7 { + background-color: #eeeeee; +} +.asciinema-theme-seti .fg-8 { + color: #323232; +} +.asciinema-theme-seti .bg-8 { + background-color: #323232; +} +.asciinema-theme-seti .fg-9 { + color: #c22832; +} +.asciinema-theme-seti .bg-9 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-10 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-10 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-11 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-11 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-12 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-12 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-13 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-13 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-14 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-14 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-15 { + color: #ffffff; +} +.asciinema-theme-seti .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-seti .fg-8, +.asciinema-theme-seti .fg-9, +.asciinema-theme-seti .fg-10, +.asciinema-theme-seti .fg-11, +.asciinema-theme-seti .fg-12, +.asciinema-theme-seti .fg-13, +.asciinema-theme-seti .fg-14, +.asciinema-theme-seti .fg-15 { + font-weight: bold; +} +/* Based on Monokai from base16 collection - https://github.com/chriskempson/base16 */ +.asciinema-theme-monokai .asciinema-terminal { + color: #f8f8f2; + background-color: #272822; + border-color: #272822; +} +.asciinema-theme-monokai .fg-bg { + color: #272822; +} +.asciinema-theme-monokai .bg-fg { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-0 { + color: #272822; +} +.asciinema-theme-monokai .bg-0 { + background-color: #272822; +} +.asciinema-theme-monokai .fg-1 { + color: #f92672; +} +.asciinema-theme-monokai .bg-1 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-2 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-2 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-3 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-3 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-4 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-4 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-5 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-5 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-6 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-6 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-7 { + color: #f8f8f2; +} +.asciinema-theme-monokai .bg-7 { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-8 { + color: #75715e; +} +.asciinema-theme-monokai .bg-8 { + background-color: #75715e; +} +.asciinema-theme-monokai .fg-9 { + color: #f92672; +} +.asciinema-theme-monokai .bg-9 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-10 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-10 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-11 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-11 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-12 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-12 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-13 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-13 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-14 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-14 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-15 { + color: #f9f8f5; +} +.asciinema-theme-monokai .bg-15 { + background-color: #f9f8f5; +} +.asciinema-theme-monokai .fg-8, +.asciinema-theme-monokai .fg-9, +.asciinema-theme-monokai .fg-10, +.asciinema-theme-monokai .fg-11, +.asciinema-theme-monokai .fg-12, +.asciinema-theme-monokai .fg-13, +.asciinema-theme-monokai .fg-14, +.asciinema-theme-monokai .fg-15 { + font-weight: bold; +} diff --git a/css/img.css b/css/img.css new file mode 100644 index 0000000..44245c0 --- /dev/null +++ b/css/img.css @@ -0,0 +1,12 @@ +p img{ + +} + +.img-link{ + margin-top: 5px; + margin-left: 5px; + padding: 5px; + border: 1px solid #efeded; + float: left; + line-height: 0; +} diff --git a/docs/administration/index.html b/docs/administration/index.html new file mode 100644 index 0000000..cd92a13 --- /dev/null +++ b/docs/administration/index.html @@ -0,0 +1,32 @@ +Administration | INFINI Pizza +
+Administration +

Administration +#

Cluster management +#

Search and analyze +#

\ No newline at end of file diff --git a/docs/administration/index.xml b/docs/administration/index.xml new file mode 100644 index 0000000..459373e --- /dev/null +++ b/docs/administration/index.xml @@ -0,0 +1 @@ +Administration on INFINI Pizza/docs/administration/Recent content in Administration on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/docs/community/index.html b/docs/community/index.html new file mode 100644 index 0000000..612b0fa --- /dev/null +++ b/docs/community/index.html @@ -0,0 +1,46 @@ +Community | INFINI Pizza +
+Community +

Community hall of fame +#

The following acknowledges the Maintainers for the Pizza project, +credits to those who have Contributed to this repository (via bug reports, code, design, ideas, project management, +translation, testing, etc.), proactive advocates of pizza as Evangelists, and any other References utilized.

Maintainers +#

Medcl(@medcl), +SteveLauC, +Loi Chyan(@loichyan)

Contributors +#

Evangelists +#

Adopters +#

Pizza community of adopters is growing! +Innovative organizations of all sizes and across industry sectors are committed +to accelerating the adoption of commercial-grade, production-ready open source technologies +developed by the Pizza community.

Do you use INFINI Pizza? +Show your support for open source by adding your logo to this page.

Please +create an issue to add your logo below.

References +#

\ No newline at end of file diff --git a/docs/community/index.xml b/docs/community/index.xml new file mode 100644 index 0000000..4bd2c25 --- /dev/null +++ b/docs/community/index.xml @@ -0,0 +1 @@ +Community on INFINI Pizza/docs/community/Recent content in Community on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/docs/getting-started/configuration/index.html b/docs/getting-started/configuration/index.html new file mode 100644 index 0000000..7f9e340 --- /dev/null +++ b/docs/getting-started/configuration/index.html @@ -0,0 +1,86 @@ +Configuration | INFINI Pizza +
+Configuration +

Configuration +#

Pizza supports several methods to overwrite the default configuration.

Command lines +#

➜  ./bin/pizza --help
+A Distributed Real-Time Search & AI-Native Innovation Engine.
+
+Usage: pizza [OPTIONS] [COMMAND]
+
+Commands:
+  service  Builtin service management (install, uninstall, start, stop)
+  help     Print this message or the help of the given subcommand(s)
+
+Options:
+  -l, --log <LEVEL>           Set the logging level, options: trace,debug,info,warn,error
+      --debug                 Run in debug mode, panic immediately with full stack trace
+  -c, --config <FILE>         
+  -p, --pid <FILE>            Place pid to this file
+  -E, --override <KEY=VALUE>  
+  -h, --help                  Print help
+  -V, --version               Print version
+

Configuration file +#

You can fully customize Pizza by utilizing the pizza.yaml configuration +file:

# ======================== INFINI Pizza Configuration ==========================
+
+# -------------------------------- Log -----------------------------------------
+log:
+  level: info
+
+# -------------------------------- API -----------------------------------------
+api:
+  logging: true
+  network:
+    binding: 127.0.0.1:9100
+    skip_occupied_port: true
+
+# -------------------------------- Cluster -------------------------------------
+cluster:
+  name: pizza
+
+node:
+  name: my_node_1
+  network:
+    binding: 127.0.0.1:8100
+    skip_occupied_port: true
+# -------------------------------- Storage -------------------------------------
+storage:
+  compression: ZSTD
+
+# -------------------------------- MemTable ------------------------------------
+memtable:
+  threshold: 1k
+
+max_num_of_instance: 2
+allow_multi_instance: true
+

Override configuration +#

You can tweak the configuration by passing the command line option -E with KEY=VALUE style during Pizza start:

./bin/pizza -E log.level=trace -E api.network.binding=127.0.0.1:12200
+
\ No newline at end of file diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html new file mode 100644 index 0000000..473516b --- /dev/null +++ b/docs/getting-started/index.html @@ -0,0 +1,29 @@ +Getting started | INFINI Pizza +
+Getting started +
\ No newline at end of file diff --git a/docs/getting-started/index.xml b/docs/getting-started/index.xml new file mode 100644 index 0000000..4e0f7bd --- /dev/null +++ b/docs/getting-started/index.xml @@ -0,0 +1,5 @@ +Getting started on INFINI Pizza/docs/getting-started/Recent content in Getting started on INFINI PizzaHugo -- gohugo.ioInstallation/docs/getting-started/installation/Mon, 01 Jan 0001 00:00:00 +0000/docs/getting-started/installation/Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies. +Automatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza: +curl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows: +-v &lt;version number&gt; (default is the latest version) -d &lt;installation directory&gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:Configuration/docs/getting-started/configuration/Mon, 01 Jan 0001 00:00:00 +0000/docs/getting-started/configuration/Configuration # Pizza supports several methods to overwrite the default configuration. +Command lines # ➜ ./bin/pizza --help A Distributed Real-Time Search &amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log &lt;LEVEL&gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config &lt;FILE&gt; -p, --pid &lt;FILE&gt; Place pid to this file -E, --override &lt;KEY=VALUE&gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza. \ No newline at end of file diff --git a/docs/getting-started/installation/index.html b/docs/getting-started/installation/index.html new file mode 100644 index 0000000..a1182a2 --- /dev/null +++ b/docs/getting-started/installation/index.html @@ -0,0 +1,68 @@ +Installation | INFINI Pizza +
+Installation +

Installation +#

Pizza is compatible with all major operating systems. The package is +compiled statically, and it does not require any external dependencies.

Automatic installation +#

Use the following command to automatically download the latest version of INFINI +Pizza for your platform and extract it into /opt/pizza:

curl -sSL http://get.infini.cloud | bash -s -- -p pizza
+

The optional parameters for the script are as follows:

  • -v <version number> (default is the latest version)
  • -d <installation directory> (default is /opt/pizza)

Manual installation +#

Visit the URL below to download the package for your operating system:

https://release.infinilabs.com/

Verification of the installation +#

Assuming Pizza is in your $PATH after installation, run the following +command to ensure the package has been installed correctly:

$ pizza --version
+PIZZA 0.1.0
+

Starting the server +#

Start Pizza as follows with +the configuration:

$ pizza --config pizza.yaml
+   ___ _____  __________   _
+  / _ \\_   \/ _  / _  /  /_\
+ / /_)/ / /\/\// /\// /  //_\\
+/ ___/\/ /_   / //\/ //\/  _  \
+\/   \____/  /____/____/\_/ \_/
+
+[PIZZA] The Next-Gen Real-Time Hybrid Search & AI-Native Innovation Engine.
+...
+

Interaction with the server +#

Assuming Pizza is listening on 127.0.0.1:9200, use the following +command to create a collection named testing:

curl -XPUT http://127.0.0.1:9200/testing
+

Refer to +the reference page for more APIs.

Shutdown the server +#

Press Ctrl+C to shut down Pizza, and the message below is displayed:

...
+   __ _  __ ____ __ _  __ __
+  / // |/ // __// // |/ // /
+ / // || // _/ / // || // /
+/_//_/|_//_/  /_//_/|_//_/
+
+©INFINI.LTD, All Rights Reserved.
+
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..d9ecea1 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,29 @@ +Documentation | INFINI Pizza +
+Documentation +
\ No newline at end of file diff --git a/docs/index.xml b/docs/index.xml new file mode 100644 index 0000000..5a5682d --- /dev/null +++ b/docs/index.xml @@ -0,0 +1 @@ +Documentation on INFINI Pizza/docs/Recent content in Documentation on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/docs/overview/architecture/index.html b/docs/overview/architecture/index.html new file mode 100644 index 0000000..2536114 --- /dev/null +++ b/docs/overview/architecture/index.html @@ -0,0 +1,29 @@ +Architecture | INFINI Pizza +
+Architecture +
\ No newline at end of file diff --git a/docs/overview/index.html b/docs/overview/index.html new file mode 100644 index 0000000..bf5a927 --- /dev/null +++ b/docs/overview/index.html @@ -0,0 +1,66 @@ +Overview | INFINI Pizza +
+Overview +

Overview +#

Introduction +#

INFINI Pizza is a distributed hybrid search database system. +Our mission is to deliver real-time smart search experiences tailored for enterprises +by fully harnessing the potential of modern hardware and the AI capability. +We are committed to meeting the demands of high concurrency and high throughput in challenging environments, +all while providing seamless and efficient search capabilities.

Features +#

The Next-Gen Real-Time Search & AI-Native Innovation Engine Written in Rust.

Major Features of Pizza:

  • True Real-Time, get search results instantly after insertion, no need to +refresh anymore.
  • Support partial update in place, no longer pull and push back the entire +document again.
  • High performance, lightning fast with high throughput and low latency, +hardware reduced.
  • High scalability, supports very large-scale clusters, beyond petabytes.
  • Native integration with LLMs and ML, empowering AI-Native enterprise +innovation.
  • Design with storage and computation separation, and also storage and index +separation.

Architecture +#

Pizza is building on top of these awesome projects:

Why Pizza +#

The name Pizza was taken from our unique sharding design.

The documents in Pizza are persisted as Parquet files in object storage. Native +integration with other big data systems through object storage and the standard +Parquet format.

When to use Pizza +#

Pizza is good fit when:

  • You have latency-sensitive search applications that millisecond matters.
  • You need fresh data, your data is mutable, and you need fast queries.
  • You need to handle high concurrency with complex queries.
  • You need to handle more than petabytes data for user-facing use cases.
  • You need to handle JOIN for complex data relations.
  • You need to keep thousands of fields, but only a handful are subject to change.
  • You need to manage both structured and unstructured data in a cohesive manner.

Pizza is designed to address these problems at heart, to solve real critical business issues, +serve your data-driven applications in realtime at very large scale. +Enhance and enrich the data experiences of your end-users.

Design choices +#

The philosophy of Pizza is that indexes should be designed per use case, +and should not attempt to fit every use case with a single index. Therefore, we +introduced Views, which allow combining different document sources into a single +index or separating a document into different layers of indexes for different +use cases.

By emphasizes the decoupling of storage and computation, +as well as the separation of storage and indexing. Which enables efficient and +scalable data processing by allowing independent management and optimization +of storage resources, computational resources, and indexing strategies.

Native integration with LLMs (Language Models) and ML (Machine Learning) +technologies is a key aspect of Pizza, providing powerful capabilities +for AI-Native enterprise innovation. By seamlessly integrating with LLMs and ML +frameworks, Pizza enables advanced natural language processing, machine +learning, and data analytics directly within the search and data retrieval +pipeline.

We are in the process of building the next-generation search infrastructure, +driven by our unwavering commitment to delivering real-time search experiences for enterprises, +unlocking the potential of modern hardware, and catering to the demands of high concurrency and high throughput +in the most challenging of environments

Next step +#

Install and configure Pizza.

\ No newline at end of file diff --git a/docs/overview/index.xml b/docs/overview/index.xml new file mode 100644 index 0000000..9268b21 --- /dev/null +++ b/docs/overview/index.xml @@ -0,0 +1 @@ +Overview on INFINI Pizza/docs/overview/Recent content in Overview on INFINI PizzaHugo -- gohugo.ioArchitecture/docs/overview/architecture/Mon, 01 Jan 0001 00:00:00 +0000/docs/overview/architecture/ \ No newline at end of file diff --git a/docs/references/aggregation/avg/index.html b/docs/references/aggregation/avg/index.html new file mode 100644 index 0000000..e8f3760 --- /dev/null +++ b/docs/references/aggregation/avg/index.html @@ -0,0 +1,60 @@ +Avg aggregation | INFINI Pizza +
+Avg aggregation +

Avg aggregation +#

A single-value metrics aggregation that computes the average of numeric values +that are extracted from the aggregated documents.

Examples +#

Assuming the data consists of documents representing exams grades (between 0 +and 100) of students we can average their scores with:

POST /exams/_search
+{
+  "aggs": {
+    "avg_grade": {
+      "avg": {
+        "field": "grade"
+      }
+    }
+  }
+}
+

The above aggregation computes the average grade over all documents. The +aggregation type is avg and the field setting defines the numeric field of +the documents the average will be computed on. The above will return the +following:

{
+  ...
+  "aggregations": {
+    "avg_grade": {
+      "value": 75.0
+    }
+  }
+}
+

The name of the aggregation (avg_grade above) also serves as the key by which +the aggregation result can be retrieved from the returned response.

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/aggregation/date-histogram/index.html b/docs/references/aggregation/date-histogram/index.html new file mode 100644 index 0000000..531bd8f --- /dev/null +++ b/docs/references/aggregation/date-histogram/index.html @@ -0,0 +1,101 @@ +Date histogram aggregation | INFINI Pizza +
+Date histogram aggregation +

Date histogram aggregation +#

This multi-bucket aggregation is similar to the normal histogram, but it can +only be used with date or date range values. Because dates are represented +internally in Elasticsearch as long values, it is possible, but not as accurate, +to use the normal histogram on dates as well. The main difference in the two +APIs is that here the interval can be specified using date/time expressions. +Time-based data requires special support because time-based intervals are not +always a fixed length.

Examples +#

As an example, here is an aggregation requesting bucket intervals of a month in +calendar time:

POST /sales/_search
+{
+  "aggs": {
+    "sales_over_time": {
+      "date_histogram": {
+        "field": "date",
+        "calendar_interval": "1M"
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "sales_over_time": {
+      "buckets": [
+        {
+          "key": 1420070400000,
+          "doc_count": 3
+        },
+        {
+          "key": 1422748800000,
+          "doc_count": 2
+        },
+        {
+          "key": 1425168000000,
+          "doc_count": 2
+        }
+      ]
+    }
+  }
+}
+

Parameters for date_histogram +#

  • field
    (Required, string) Field you wish to aggregate.

calendar_interval +#

(Optional, string) Calendar-aware intervals are configured with the +calendar_interval parameter. You can specify calendar intervals using the unit +name, such as month, or as a single unit quantity, such as 1M. For example, +day and 1d are equivalent. Multiple quantities, such as 2d, are not +supported.

The accepted calendar intervals are:

  • minute, 1m
    All minutes begin at 00 seconds. One minute is the interval between 00 seconds +of the first minute and 00 seconds of the following minute in the specified time +zone, compensating for any intervening leap seconds, so that the number of minutes +and seconds past the hour is the same at the start and end.
  • hour, 1h
    All hours begin at 00 minutes and 00 seconds. One hour (1h) is the interval between +00:00 minutes of the first hour and 00:00 minutes of the following hour in the +specified time zone, compensating for any intervening leap seconds, so that the +number of minutes and seconds past the hour is the same at the start and end.
  • day, 1d
    All days begin at the earliest possible time, which is usually 00:00:00 (midnight). +One day (1d) is the interval between the start of the day and the start of the +following day in the specified time zone, compensating for any intervening time +changes.
  • week, 1w
    One week is the interval between the start day_of_week:hour:minute:second and the +same day of the week and time of the following week in the specified time zone.
  • month, 1M
    One month is the interval between the start day of the month and time of day and +the same day of the month and time of the following month in the specified time +zone, so that the day of the month and time of day are the same at the start and +end.
  • quarter, 1q
    One quarter is the interval between the start day of the month and time of day +and the same day of the month and time of day three months later, so that the day +of the month and time of day are the same at the start and end.
  • year, 1y
    One year is the interval between the start day of the month and time of day and +the same day of the month and time of day the following year in the specified time +zone, so that the date and time are the same at the start and end.

fixed_interval +#

Fixed intervals are configured with the fixed_interval parameter.

In contrast to calendar-aware intervals, fixed intervals are a fixed number of +SI units and never deviate, regardless of where they fall on the calendar. One +second is always composed of 1000ms. This allows fixed intervals to be +specified in any multiple of the supported units.

However, it means fixed intervals cannot express other units such as months, +since the duration of a month is not a fixed quantity. Attempting to specify a +calendar interval like month or quarter will throw an exception.

The accepted units for fixed intervals are:

  • milliseconds (ms)
    A single millisecond. This is a very, very small interval.
  • seconds (s)
    Defined as 1000 milliseconds each.
  • minutes (m)
    Defined as 60 seconds each (60,000 milliseconds). All minutes begin at 00 seconds.
  • hours (h)
    Defined as 60 minutes each (3,600,000 milliseconds). All hours begin at 00 minutes +and 00 seconds.
  • days (d)
    Defined as 24 hours (86,400,000 milliseconds). All days begin at the earliest possible +time, which is usually 00:00:00 (midnight).
\ No newline at end of file diff --git a/docs/references/aggregation/index.html b/docs/references/aggregation/index.html new file mode 100644 index 0000000..e09d8ad --- /dev/null +++ b/docs/references/aggregation/index.html @@ -0,0 +1,44 @@ +Aggregation | INFINI Pizza +
+Aggregation +

Aggregation +#

An aggregation summarizes your data as metrics, statistics, or other analytics.

Pizza organizes aggregations into the following categories:

  • Metric aggregations that calculate metrics, such as a +sum or average, from field values.
  • Bucket aggregations that group documents into +buckets, also called bins, based on field values, ranges, or other criteria.

Metric aggregations +#

  • avg aggregation
    A single-value metrics aggregation that computes the average of numeric values +that are extracted from the aggregated documents.
  • max aggregation
    A single-value metrics aggregation that keeps track and returns the maximum value +among the numeric values extracted from the aggregated documents.
  • min aggregation
    A single-value metrics aggregation that keeps track and returns the minimum value +among numeric values extracted from the aggregated documents.
  • percentiles aggregation
    A multi-value metrics aggregation that calculates one or more percentiles over +numeric values extracted from the aggregated documents.
  • sum aggregation
    A single-value metrics aggregation that sums up numeric values that are extracted +from the aggregated documents.
  • value_count aggregation
    A single-value metrics aggregation that counts the number of values that are extracted +from the aggregated documents.

Bucket aggregations +#

  • date_histogram aggregation
    A histogram aggregation that can only be used with date or date range values.
  • terms aggregation
    A multi-bucket value source based aggregation where buckets are dynamically built - +one per unique value.
\ No newline at end of file diff --git a/docs/references/aggregation/index.xml b/docs/references/aggregation/index.xml new file mode 100644 index 0000000..c0a41ec --- /dev/null +++ b/docs/references/aggregation/index.xml @@ -0,0 +1,16 @@ +Aggregation on INFINI Pizza/docs/references/aggregation/Recent content in Aggregation on INFINI PizzaHugo -- gohugo.ioAvg aggregation/docs/references/aggregation/avg/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/avg/Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. +Examples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with: +POST /exams/_search { &#34;aggs&#34;: { &#34;avg_grade&#34;: { &#34;avg&#34;: { &#34;field&#34;: &#34;grade&#34; } } } } The above aggregation computes the average grade over all documents.Date histogram aggregation/docs/references/aggregation/date-histogram/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/date-histogram/Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.Max aggregation/docs/references/aggregation/max/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/max/Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. +Examples # Computing the max price value across all documents: +POST /sales/_search { &#34;aggs&#34;: { &#34;max_price&#34;: { &#34;max&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;max_price&#34;: { &#34;value&#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.Min aggregation/docs/references/aggregation/min/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/min/Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. +Examples # Computing the min price value across all documents: +POST /sales/_search { &#34;aggs&#34;: { &#34;min_price&#34;: { &#34;min&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;min_price&#34;: { &#34;value&#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.Percentiles aggregation/docs/references/aggregation/percentiles/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/percentiles/Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. +Percentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values. +Percentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean.Sum aggregation/docs/references/aggregation/sum/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/sum/Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. +Examples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with: +POST /sales/_search { &#34;query&#34;: { &#34;constant_score&#34;: { &#34;filter&#34;: { &#34;match&#34;: { &#34;type&#34;: &#34;hat&#34; } } } }, &#34;aggs&#34;: { &#34;hat_prices&#34;: { &#34;sum&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Resulting in:Terms aggregation/docs/references/aggregation/terms/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/terms/Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. +Examples # POST /_search { &#34;aggs&#34;: { &#34;genres&#34;: { &#34;terms&#34;: { &#34;field&#34;: &#34;genre&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;genres&#34;: { &#34;doc_count_error_upper_bound&#34;: 0, &#34;sum_other_doc_count&#34;: 0, &#34;buckets&#34;: [ { &#34;key&#34;: &#34;electronic&#34;, &#34;doc_count&#34;: 6 }, { &#34;key&#34;: &#34;rock&#34;, &#34;doc_count&#34;: 3 }, { &#34;key&#34;: &#34;jazz&#34;, &#34;doc_count&#34;: 2 } ] } } } Parameters for terms # fieldValue count aggregation/docs/references/aggregation/value-count/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/value-count/Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over. +value_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually. \ No newline at end of file diff --git a/docs/references/aggregation/max/index.html b/docs/references/aggregation/max/index.html new file mode 100644 index 0000000..65e041c --- /dev/null +++ b/docs/references/aggregation/max/index.html @@ -0,0 +1,59 @@ +Max aggregation | INFINI Pizza +
+Max aggregation +

Max aggregation +#

A single-value metrics aggregation that keeps track and returns the maximum +value among the numeric values extracted from the aggregated documents.

Examples +#

Computing the max price value across all documents:

POST /sales/_search
+{
+  "aggs": {
+    "max_price": {
+      "max": {
+        "field": "price"
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "max_price": {
+      "value": 200.0
+    }
+  }
+}
+

As can be seen, the name of the aggregation (max_price above) also serves as +the key by which the aggregation result can be retrieved from the returned +response.

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/aggregation/min/index.html b/docs/references/aggregation/min/index.html new file mode 100644 index 0000000..1b9327c --- /dev/null +++ b/docs/references/aggregation/min/index.html @@ -0,0 +1,59 @@ +Min aggregation | INFINI Pizza +
+Min aggregation +

Min aggregation +#

A single-value metrics aggregation that keeps track and returns the minimum +value among numeric values extracted from the aggregated documents.

Examples +#

Computing the min price value across all documents:

POST /sales/_search
+{
+  "aggs": {
+    "min_price": {
+      "min": {
+        "field": "price"
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "min_price": {
+      "value": 10.0
+    }
+  }
+}
+

As can be seen, the name of the aggregation (min_price above) also serves as +the key by which the aggregation result can be retrieved from the returned +response.

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/aggregation/percentiles/index.html b/docs/references/aggregation/percentiles/index.html new file mode 100644 index 0000000..002eff4 --- /dev/null +++ b/docs/references/aggregation/percentiles/index.html @@ -0,0 +1,139 @@ +Percentiles aggregation | INFINI Pizza +
+Percentiles aggregation +

Percentiles aggregation +#

A multi-value metrics aggregation that calculates one or more percentiles over +numeric values extracted from the aggregated documents.

Percentiles show the point at which a certain percentage of observed values +occur. For example, the 95th percentile is the value which is greater than 95% +of the observed values.

Percentiles are often used to find outliers. In normal distributions, the 0.13th +and 99.87th percentiles represents three standard deviations from the mean. Any +data which falls outside three standard deviations is often considered an +anomaly.

When a range of percentiles are retrieved, they can be used to estimate the data +distribution and determine if the data is skewed, bimodal, etc.

Examples +#

Assume your data consists of website load times. The average and median load +times are not overly useful to an administrator. The max may be interesting, but +it can be easily skewed by a single slow response.

Let’s look at a range of percentiles representing load time:

POST latency/_search
+{
+  "aggs": {
+    "load_time_outlier": {
+      "percentiles": {
+        "field": "load_time"
+      }
+    }
+  }
+}
+

By default, the percentile metric will generate a range of percentiles: +[1, 5, 25, 50, 75, 95, 99]. The response will look like this:

{
+  ...
+ "aggregations": {
+    "load_time_outlier": {
+      "values": {
+        "1.0": 10.0,
+        "5.0": 30.0,
+        "25.0": 170.0,
+        "50.0": 445.0,
+        "75.0": 720.0,
+        "95.0": 940.0,
+        "99.0": 980.0
+      }
+    }
+  }
+}
+

As you can see, the aggregation will return a calculated value for each +percentile in the default range. If we assume response times are in +milliseconds, it is immediately obvious that the webpage normally loads in +10-725ms, but occasionally spikes to 945-985ms.

Often, administrators are only interested in outliers — the extreme percentiles. +We can specify just the percents we are interested in (requested percentiles +must be a value between 0-100 inclusive):

POST latency/_search
+{
+  "aggs": {
+    "load_time_outlier": {
+      "percentiles": {
+        "field": "load_time",
+        "percents": [95, 99, 99.9]
+      }
+    }
+  }
+}
+

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
  • percents
    (Optional, array) A range of percentiles that are calculated. Default is [1, 5, 25, 50, 75, 95, 99].

keyed +#

By default the keyed flag is set to true which associates a unique string +key with each bucket and returns the ranges as a hash rather than an array. +Setting the keyed flag to false will disable this behavior:

POST latency/_search
+{
+  "aggs": {
+    "load_time_outlier": {
+      "percentiles": {
+        "field": "load_time",
+        "keyed": false
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "load_time_outlier": {
+      "values": [
+        {
+          "key": 1.0,
+          "value": 10.0
+        },
+        {
+          "key": 5.0,
+          "value": 30.0
+        },
+        {
+          "key": 25.0,
+          "value": 170.0
+        },
+        {
+          "key": 50.0,
+          "value": 445.0
+        },
+        {
+          "key": 75.0,
+          "value": 720.0
+        },
+        {
+          "key": 95.0,
+          "value": 940.0
+        },
+        {
+          "key": 99.0,
+          "value": 980.0
+        }
+      ]
+    }
+  }
+}
+
\ No newline at end of file diff --git a/docs/references/aggregation/sum/index.html b/docs/references/aggregation/sum/index.html new file mode 100644 index 0000000..c3fe95e --- /dev/null +++ b/docs/references/aggregation/sum/index.html @@ -0,0 +1,66 @@ +Sum aggregation | INFINI Pizza +
+Sum aggregation +

Sum aggregation +#

A single-value metrics aggregation that sums up numeric values that are +extracted from the aggregated documents.

Examples +#

Assuming the data consists of documents representing sales records we can sum +the sale price of all hats with:

POST /sales/_search
+{
+  "query": {
+    "constant_score": {
+      "filter": {
+        "match": {
+          "type": "hat"
+        }
+      }
+    }
+  },
+  "aggs": {
+    "hat_prices": {
+      "sum": {
+        "field": "price"
+      }
+    }
+  }
+}
+

Resulting in:

{
+  ...
+  "aggregations": {
+    "hat_prices": {
+      "value": 450.0
+    }
+  }
+}
+

The name of the aggregation (hat_prices above) also serves as the key by which +the aggregation result can be retrieved from the returned response.

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/aggregation/terms/index.html b/docs/references/aggregation/terms/index.html new file mode 100644 index 0000000..2bc10a4 --- /dev/null +++ b/docs/references/aggregation/terms/index.html @@ -0,0 +1,70 @@ +Terms aggregation | INFINI Pizza +
+Terms aggregation +

Terms aggregation +#

A multi-bucket value source based aggregation where buckets are dynamically +built - one per unique value.

Examples +#

POST /_search
+{
+  "aggs": {
+    "genres": {
+      "terms": {
+        "field": "genre"
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "genres": {
+      "doc_count_error_upper_bound": 0,
+      "sum_other_doc_count": 0,
+      "buckets": [
+        {
+          "key": "electronic",
+          "doc_count": 6
+        },
+        {
+          "key": "rock",
+          "doc_count": 3
+        },
+        {
+          "key": "jazz",
+          "doc_count": 2
+        }
+      ]
+    }
+  }
+}
+

Parameters for terms +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/aggregation/value-count/index.html b/docs/references/aggregation/value-count/index.html new file mode 100644 index 0000000..834700f --- /dev/null +++ b/docs/references/aggregation/value-count/index.html @@ -0,0 +1,59 @@ +Value count aggregation | INFINI Pizza +
+Value count aggregation +

Value count aggregation +#

A single-value metrics aggregation that counts the number of values that are +extracted from the aggregated documents. Typically, this aggregator will be used +in conjunction with other single-value aggregations. For example, when computing +the avg one might be interested in the number of values the average is +computed over.

value_count does not de-duplicate values, so even if a field has duplicates +each value will be counted individually.

Examples +#

Assuming the data consists of documents representing sales records we can sum +the sale price of all hats with:

POST /sales/_search
+{
+  "aggs" : {
+    "types_count" : {
+      "value_count" : {
+        "field" : "type"
+      }
+    }
+  }
+}
+

Response:

{
+  ...
+  "aggregations": {
+    "types_count": {
+      "value": 7
+    }
+  }
+}
+

The name of the aggregation (types_count above) also serves as the key by +which the aggregation result can be retrieved from the returned response.

Parameters for avg +#

  • field
    (Required, string) Field you wish to aggregate.
\ No newline at end of file diff --git a/docs/references/collection/create/index.html b/docs/references/collection/create/index.html new file mode 100644 index 0000000..70ae171 --- /dev/null +++ b/docs/references/collection/create/index.html @@ -0,0 +1,48 @@ +Create a collection | INFINI Pizza +
+Create a collection +

Create a collection +#

Creates a new collection.

Examples +#

The following request creates a new collection called my-collection in the +namespace my-namespace:

PUT /my-namespace:my-collection
+

If creating a collection within the default namespace, it can be simplified as:

PUT /my-collection
+

Request +#

PUT /[<namespace>:]<name>
+

Path parameters +#

  • <namespace>
    (Optional, string) The namespace which the collection belongs to. Namespace names +must meet the following criteria:
    • Lowercase only
    • Cannot include \ /, *, ?, ", <, >, |, , ,, #
    • Cannot start with -, _, +
    • Cannot be . or ..
    • Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters +will count towards the 255 limit faster)
  • <name>
    (Required, string) Name of the collection you wish to create. Collection names +must meet the same criteria as namespace names.
\ No newline at end of file diff --git a/docs/references/collection/delete/index.html b/docs/references/collection/delete/index.html new file mode 100644 index 0000000..3b67859 --- /dev/null +++ b/docs/references/collection/delete/index.html @@ -0,0 +1,43 @@ +Delete a collection | INFINI Pizza +
+Delete a collection +

Delete a collection +#

Delete a exists collection.

Examples +#

The following request delete the collection called my-collection:

DELETE my-collection
+

Request +#

PUT /[<namespace>:]<name>
+

Path Parameters +#

  • <namespace>
    (Optional, string) The namespace which the collection belongs to.
  • <name>
    (Required, string) Name of the collection you wish to create.
\ No newline at end of file diff --git a/docs/references/collection/index.html b/docs/references/collection/index.html new file mode 100644 index 0000000..45a636f --- /dev/null +++ b/docs/references/collection/index.html @@ -0,0 +1,35 @@ +Collection | INFINI Pizza +
+Collection +

Collection +#

A “Collection” typically refers to a grouping or container for related data items in a database +or similar data storage system. It can hold various types of data, such as documents, records, +or other structured data elements. In the context of the previous discussion about namespaces and data types, +a collection could contain documents, each representing a specific piece of information or record.

Collection management +#

Collection APIs are used to manage individual collections and settings.

\ No newline at end of file diff --git a/docs/references/collection/index.xml b/docs/references/collection/index.xml new file mode 100644 index 0000000..a318ad8 --- /dev/null +++ b/docs/references/collection/index.xml @@ -0,0 +1,9 @@ +Collection on INFINI Pizza/docs/references/collection/Recent content in Collection on INFINI PizzaHugo -- gohugo.ioCreate a collection/docs/references/collection/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/collection/create/Create a collection # Creates a new collection. +Examples # The following request creates a new collection called my-collection in the namespace my-namespace: +PUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as: +PUT /my-collection Request # PUT /[&lt;namespace&gt;:]&lt;name&gt; Path parameters # &lt;namespace&gt; +(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \ /, *, ?Delete a collection/docs/references/collection/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/collection/delete/Delete a collection # Delete a exists collection. +Examples # The following request delete the collection called my-collection: +DELETE my-collection Request # PUT /[&lt;namespace&gt;:]&lt;name&gt; Path Parameters # &lt;namespace&gt; +(Optional, string) The namespace which the collection belongs to. &lt;name&gt; +(Required, string) Name of the collection you wish to create. \ No newline at end of file diff --git a/docs/references/document/bulk/index.html b/docs/references/document/bulk/index.html new file mode 100644 index 0000000..d0e1d79 --- /dev/null +++ b/docs/references/document/bulk/index.html @@ -0,0 +1,121 @@ +Batch document operation | INFINI Pizza +
+Batch document operation +

Batch document operation +#

Provides a efficient way to perform multiple index, create, delete, and update +operations in a single request.

Examples +#

POST /_bulk
+{ "index" : { "_index" : "test", "_id" : "1" } }
+{ "field1" : "value1" }
+{ "delete" : { "_index" : "test", "_id" : "2" } }
+{ "create" : { "_index" : "test", "_id" : "3" } }
+{ "field1" : "value3" }
+{ "update" : {"_id" : "1", "_index" : "test"} }
+{ "doc" : {"field2" : "value2"} }
+

The API returns the following result:

{
+  "took": 30,
+  "errors": false,
+  "items": [
+    {
+      "index": {
+        "_namespace": "default",
+        "_collection": "test",
+        "result": "created",
+        ...
+      }
+    },
+    {
+      "delete": {
+        "_namespace": "default",
+        "_collection": "test",
+        "result": "not_found",
+        ...
+      }
+    },
+    {
+      "create": {
+        "_namespace": "default",
+        "_collection": "test",
+        "result": "created",
+        ...
+      }
+    },
+    {
+      "update": {
+        "_namespace": "default",
+        "_collection": "test",
+        "result": "updated",
+        ...
+      }
+    }
+  ]
+}
+

Request +#

POST /_bulk
+POST /<target>/_bulk
+

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.

Request body +#

The actions are specified in the request body using a newline delimited JSON +(NDJSON) structure:

action_and_meta_data\n
+optional_source\n
+action_and_meta_data\n
+optional_source\n
+....
+action_and_meta_data\n
+optional_source\n
+

The index and create actions expect a source on the next line, and have the +same semantics as the standard API: create fails if a document with the same +ID already exists in the target, index adds or replaces a document as +necessary.

update expects that the partial doc, upsert, and script and its options are +specified on the next line.

delete does not expect a source on the next line and has the same semantics as +the standard delete API.

Because this format uses literal \n’s as delimiters, make sure that the JSON +actions and sources are not pretty printed.

If you provide a <target> in the request path, it is used for any actions that +don’t explicitly specify an _index argument.

create +#

Indexes the specified document if it does not already exist. The following line +must contain the source data to be indexed.

  • _namespace
    (Optional, string) Name of the namespace to perform the action on.
  • _collection
    (Optional, string) Name of the collection to perform the action on. This parameter +is required if a <target> is not specified in the request path.
  • _index
    (Optional, string) A shortcut to specify the namespace and collection in [<namespace>:]<collection> +syntax. This parameter conflicts with <_namespace> and <_collection>.
  • _id
    (Optional, string) The document ID. If no ID is specified, a document ID is automatically +generated.

delete +#

Removes the specified document from the index.

  • _namespace
    (Optional, string) Name of the namespace to perform the action on.
  • _collection
    (Optional, string) Name of the collection to perform the action on. This parameter +is required if a <target> is not specified in the request path.
  • _index
    (Optional, string) A shortcut to specify the namespace and collection in [<namespace>:]<collection> +syntax. This parameter conflicts with <_namespace> and <_collection>.
  • _id
    (Required, string) The document ID. If no ID is specified, a document ID is automatically +generated.

index +#

Indexes the specified document. If the document exists, replaces the document +and increments the version. The following line must contain the source data to +be indexed.

  • _namespace
    (Optional, string) Name of the namespace to perform the action on.
  • _collection
    (Optional, string) Name of the collection to perform the action on. This parameter +is required if a <target> is not specified in the request path.
  • _index
    (Optional, string) A shortcut to specify the namespace and collection in [<namespace>:]<collection> +syntax. This parameter conflicts with <_namespace> and <_collection>.
  • _id
    (Optional, string) The document ID. If no ID is specified, a document ID is automatically +generated.

delete +#

Removes the specified document from the index.

  • _namespace
    (Optional, string) Name of the namespace to perform the action on.
  • _collection
    (Optional, string) Name of the collection to perform the action on. This parameter +is required if a <target> is not specified in the request path.
  • _index
    (Optional, string) A shortcut to specify the namespace and collection in [<namespace>:]<collection> +syntax. This parameter conflicts with <_namespace> and <_collection>.
  • _id
    (Required, string) The document ID. If no ID is specified, a document ID is automatically +generated.

doc +#

The partial document to index. Required for update operations.

<fields> +#

The document source to index. Required for create and index operations.

\ No newline at end of file diff --git a/docs/references/document/create/index.html b/docs/references/document/create/index.html new file mode 100644 index 0000000..4020434 --- /dev/null +++ b/docs/references/document/create/index.html @@ -0,0 +1,66 @@ +Create a document | INFINI Pizza +
+Create a document +

Create a document +#

Creates a new document.

Examples +#

Insert a JSON document into the my-collection collection:

POST /my-collection/_doc
+{
+  "message": "GET /search HTTP/1.1 200 1070000",
+  "org": {
+    "id": "infini"
+  }
+}
+

The API returns the following result:

{
+  "_id": "0,0",
+  "_version": 1,
+  "_namespace": "default",
+  "_collection": "my-collection",
+  "result": "created",
+  ...
+}
+

The API supports passing a customized UUID as the document identify, eg:

POST /my-collection/_doc/news_001
+{
+  "message": "GET /search HTTP/1.1 200 1070000",
+  "org": {
+    "id": "infini"
+  }
+}
+

Request +#

POST /<target>/_doc/[<doc_id>]
+{<fields>}
+

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.
    • <doc_id>
      (Optional, string) The unique identify of the document, auto generated if not specified.

Request body +#

  • <fields>
    (Required, string) Request body contains the JSON source for the document data.
\ No newline at end of file diff --git a/docs/references/document/delete/index.html b/docs/references/document/delete/index.html new file mode 100644 index 0000000..58f0699 --- /dev/null +++ b/docs/references/document/delete/index.html @@ -0,0 +1,50 @@ +Delete a document | INFINI Pizza +
+Delete a document +

Delete a document +#

Delete a specific document from the specified collection by specifying its unique identifier.

Examples +#

Delete the document 0,0 from collection my-collection:

DELETE /my-collection/_doc/0,0
+

The API returns the following result:

{
+  "_id": "0,0",
+  "result": "deleted",
+  ...
+}
+

Request +#

DELETE /<target>/_doc/<doc_id>
+

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.
  • <doc_id>
    (Required, string) Unique identifier for the document, support both _key or _id.
\ No newline at end of file diff --git a/docs/references/document/fetch/index.html b/docs/references/document/fetch/index.html new file mode 100644 index 0000000..6476d8c --- /dev/null +++ b/docs/references/document/fetch/index.html @@ -0,0 +1,59 @@ +Fetch a document | INFINI Pizza +
+Fetch a document +

Fetch a document +#

Retrieve an existing document by specifying its unique identifier.

Examples +#

Fetch a document from the my-collection collection with customized uuid news_001:

GET /my-collection/_doc/news_001
+

The API returns the following result:

{
+  "_id": "0,0",
+  "_version": 1,
+  "_namespace": "default",
+  "_collection": "my-collection",
+  "_key" : "news_001",
+  "found": true,
+  "_source" : {
+    "message": "GET /search HTTP/1.1 200 1070000",
+    "org": {
+      "id": "infini"
+    }
+  }
+}
+

As you can see, the customized uuid are represented as _key within the document, +and there is also a _id returned with value 0,0, +this is the internal id generated by Pizza, and it is guaranteed to be unique, +so you can also fetch this document by this value like this:

GET /my-collection/_doc/0,0
+

Request +#

POST /<target>/_doc/<doc_id>
+

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.
  • <doc_id>
    (Required, string) The unique identify of this document, support both _key or _id.
\ No newline at end of file diff --git a/docs/references/document/index.html b/docs/references/document/index.html new file mode 100644 index 0000000..7630143 --- /dev/null +++ b/docs/references/document/index.html @@ -0,0 +1,35 @@ +Document | INFINI Pizza +
+Document +

Document +#

In Pizza, a document is a data structure composed of field-and-value pairs. +It’s roughly equivalent to a row in a relational database table, but with a dynamic schema. +Documents are the basic unit of data storage in Pizza, and collections are groupings of documents.

Each document in Pizza is represented in JSON format, which is a lightweight data interchange format +that is easy for humans to read and write and easy for machines to parse and generate.

Document management +#

Document APIs are used to manage documents.

\ No newline at end of file diff --git a/docs/references/document/index.xml b/docs/references/document/index.xml new file mode 100644 index 0000000..e0fa7b3 --- /dev/null +++ b/docs/references/document/index.xml @@ -0,0 +1,21 @@ +Document on INFINI Pizza/docs/references/document/Recent content in Document on INFINI PizzaHugo -- gohugo.ioCreate a document/docs/references/document/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/create/Create a document # Creates a new document. +Examples # Insert a JSON document into the my-collection collection: +POST /my-collection/_doc { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infini&#34; } } The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;_version&#34;: 1, &#34;_namespace&#34;: &#34;default&#34;, &#34;_collection&#34;: &#34;my-collection&#34;, &#34;result&#34;: &#34;created&#34;, ... } The API supports passing a customized UUID as the document identify, eg: +POST /my-collection/_doc/news_001 { &#34;message&#34;: &#34;GET /search HTTP/1.Fetch a document/docs/references/document/fetch/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/fetch/Fetch a document # Retrieve an existing document by specifying its unique identifier. +Examples # Fetch a document from the my-collection collection with customized uuid news_001: +GET /my-collection/_doc/news_001 The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;_version&#34;: 1, &#34;_namespace&#34;: &#34;default&#34;, &#34;_collection&#34;: &#34;my-collection&#34;, &#34;_key&#34; : &#34;news_001&#34;, &#34;found&#34;: true, &#34;_source&#34; : { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infini&#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:Replace a document/docs/references/document/replace/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/replace/Replace a document # Replace an existing document by specifying its unique identifier and the new content. +Examples # Replace a document news_001 of the collection my-collection with new content: +PUT /my-collection/_doc/news_001 { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infinilabs&#34; } } The API returns as following result: +{&#34;_id&#34;:&#34;0,0&#34;, &#34;_key&#34;:&#34;news_001&#34;, &#34;result&#34;:&#34;updated&#34;} After the document modification, If you perform the fetch request: +GET /my-collection/_doc/news_001 It returns an updated document like:Partial update a document/docs/references/document/partial_update/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/partial_update/Partial update a document # Sometimes we may only need to update a portion fields of the document. +Examples # Update the org.id field of the document news_001 in the collection my-collection: +PUT /my-collection/_doc/news_001/_update { &#34;sync&#34;:{ &#34;replace&#34;:{ &#34;org&#34;: { &#34;id&#34;: &#34;infinilabs&#34; } } } } The API returns as following result: +{&#34;_id&#34;:&#34;0,0&#34;, &#34;_key&#34;:&#34;news_001&#34;, &#34;result&#34;:&#34;updated&#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.Delete a document/docs/references/document/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/delete/Delete a document # Delete a specific document from the specified collection by specifying its unique identifier. +Examples # Delete the document 0,0 from collection my-collection: +DELETE /my-collection/_doc/0,0 The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;result&#34;: &#34;deleted&#34;, ... } Request # DELETE /&lt;target&gt;/_doc/&lt;doc_id&gt; Path parameters # &lt;target&gt; +(Required, string) Name of the collection to target. &lt;doc_id&gt; +(Required, string) Unique identifier for the document, support both _key or _id.Batch document operation/docs/references/document/bulk/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/bulk/Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request. +Examples # POST /_bulk { &#34;index&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;1&#34; } } { &#34;field1&#34; : &#34;value1&#34; } { &#34;delete&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;2&#34; } } { &#34;create&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;3&#34; } } { &#34;field1&#34; : &#34;value3&#34; } { &#34;update&#34; : {&#34;_id&#34; : &#34;1&#34;, &#34;_index&#34; : &#34;test&#34;} } { &#34;doc&#34; : {&#34;field2&#34; : &#34;value2&#34;} } The API returns the following result: \ No newline at end of file diff --git a/docs/references/document/partial_update/index.html b/docs/references/document/partial_update/index.html new file mode 100644 index 0000000..02e25e3 --- /dev/null +++ b/docs/references/document/partial_update/index.html @@ -0,0 +1,64 @@ +Partial update a document | INFINI Pizza +
+Partial update a document +

Partial update a document +#

Sometimes we may only need to update a portion fields of the document.

Examples +#

Update the org.id field of the document news_001 in the collection my-collection:

PUT /my-collection/_doc/news_001/_update
+{
+  "sync":{
+  	"replace":{
+  	    "org": {
+          "id": "infinilabs"
+        }
+    }
+  }
+}
+

The API returns as following result:

{"_id":"0,0", "_key":"news_001", "result":"updated"}
+

Pizza using the method of fetching a document, then merging partial updates and replacing it.

Request +#

POST /<target>/_doc/<doc_id>/_update
+{
+  "sync":{
+      <operation>: {<fields>}
+    }
+  "async":{
+      <operation>: {<fields>}
+    }
+}
+
+

Pizza support both sync and async way to perform the updates, in order to update in realtime, +you need to use sync here.

In asynchronous mode, the update process is considered complete once the request is committed to the WAL. +Background tasks independently consume and process updates asynchronously, +making it suitable for scenarios prioritizing update efficiency.

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.
  • <doc_id>
    (Required, string) The unique identify of this document, support both _key or _id.

Request body +#

  • <operation> The operation supported by partial updates: add, replace, remove, array_append.
  • <fields>
    (Required, string) The JSON format of the fields operation by partial updates.
\ No newline at end of file diff --git a/docs/references/document/replace/index.html b/docs/references/document/replace/index.html new file mode 100644 index 0000000..d58f61e --- /dev/null +++ b/docs/references/document/replace/index.html @@ -0,0 +1,67 @@ +Replace a document | INFINI Pizza +
+Replace a document +

Replace a document +#

Replace an existing document by specifying its unique identifier and the new content.

Examples +#

Replace a document news_001 of the collection my-collection with new content:

PUT /my-collection/_doc/news_001
+{
+    "message": "GET /search HTTP/1.1 200 1070000",
+    "org": {
+      "id": "infinilabs"
+    }
+}
+

The API returns as following result:

{"_id":"0,0", "_key":"news_001", "result":"updated"}
+

After the document modification, If you perform the fetch request:

GET /my-collection/_doc/news_001
+

It returns an updated document like:

{
+  "_id": "0,0",
+  "_version": 2,
+  "_namespace": "default",
+  "_collection": "my-collection",
+  "_key" : "news_001",
+  "found": true,
+  "_source" : {
+    "message": "GET /search HTTP/1.1 200 1070000",
+    "org": {
+      "id": "infinilabs"
+    }
+  }
+}
+

Note that the document _version was increased to 2.

Pizza works by marking the old document as deleted and insert a new document under the hood.

Request +#

POST /<target>/_doc/<doc_id>
+{<fields>}
+

Path parameters +#

  • <target>
    (Required, string) Name of the collection to target.
  • <doc_id>
    (Required, string) The unique identify of this document, support both _key or _id.

Request body +#

  • <fields>
    (Required, string) Request body contains the JSON source for the document data.
\ No newline at end of file diff --git a/docs/references/index.html b/docs/references/index.html new file mode 100644 index 0000000..6dc2c77 --- /dev/null +++ b/docs/references/index.html @@ -0,0 +1,32 @@ +References | INFINI Pizza +
+References +
\ No newline at end of file diff --git a/docs/references/index.xml b/docs/references/index.xml new file mode 100644 index 0000000..62e7cf1 --- /dev/null +++ b/docs/references/index.xml @@ -0,0 +1 @@ +References on INFINI Pizza/docs/references/Recent content in References on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/docs/references/namespace/create/index.html b/docs/references/namespace/create/index.html new file mode 100644 index 0000000..e110064 --- /dev/null +++ b/docs/references/namespace/create/index.html @@ -0,0 +1,43 @@ +Create a namespace | INFINI Pizza +
+Create a namespace +

Create a namespace +#

Creates a new namespace.

Examples +#

If creating a website namespace, the following request creates a new namespace called website:

PUT /_namespace/website
+

Request +#

PUT /_namespace/<name>
+

Path parameters +#

  • <name>
    (Required, string) The name of the namespace. Namespace names +must meet the following criteria:
    • Lowercase only
    • Cannot include \ /, *, ?, ", <, >, |, , ,, #
    • Cannot start with -, _, +
    • Cannot be . or ..
    • Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters +will count towards the 255 limit faster)
\ No newline at end of file diff --git a/docs/references/namespace/delete/index.html b/docs/references/namespace/delete/index.html new file mode 100644 index 0000000..185d044 --- /dev/null +++ b/docs/references/namespace/delete/index.html @@ -0,0 +1,41 @@ +Delete a namespace | INFINI Pizza +
+Delete a namespace +

Delete a namespace +#

Delete a exists namespace.

Examples +#

The following request delete the namespace called website:

DELETE /_namespace/website
+

Request +#

DELETE /_namespace/<name>
+

Path parameters +#

  • <name>
    (Optional, string) The name of the namespace that you want to delete.
\ No newline at end of file diff --git a/docs/references/namespace/index.html b/docs/references/namespace/index.html new file mode 100644 index 0000000..7080e5a --- /dev/null +++ b/docs/references/namespace/index.html @@ -0,0 +1,37 @@ +Namespace | INFINI Pizza +
+Namespace +

Namespace +#

Pizza supports a multi-tenant architecture, +allowing different sets of data for various scenarios to be stored within a single engine. +Each set is referred to as a namespace, and different namespaces can have distinct topologies +and access permissions configured.

Usually, there’s no need to set up an additional namespace, and the default namespace is default.

Within a namespace, there are several types of data:

  • Collection, Docs: Collections of documents.
  • Data: Source data, stored in columns layout.
  • Index: Indexed data, built based on Data, optional.
  • View: View data, composite views of data across collections.

Namespace management +#

Namespace APIs are used to manage individual Namespace and settings.

\ No newline at end of file diff --git a/docs/references/namespace/index.xml b/docs/references/namespace/index.xml new file mode 100644 index 0000000..9f9e26a --- /dev/null +++ b/docs/references/namespace/index.xml @@ -0,0 +1,7 @@ +Namespace on INFINI Pizza/docs/references/namespace/Recent content in Namespace on INFINI PizzaHugo -- gohugo.ioCreate a namespace/docs/references/namespace/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/namespace/create/Create a namespace # Creates a new namespace. +Examples # If creating a website namespace, the following request creates a new namespace called website: +PUT /_namespace/website Request # PUT /_namespace/&lt;name&gt; Path parameters # &lt;name&gt; +(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \ /, *, ?, &quot;, &lt;, &gt;, |, , ,, # Cannot start with -, _, + Cannot be .Delete a namespace/docs/references/namespace/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/namespace/delete/Delete a namespace # Delete a exists namespace. +Examples # The following request delete the namespace called website: +DELETE /_namespace/website Request # DELETE /_namespace/&lt;name&gt; Path parameters # &lt;name&gt; +(Optional, string) The name of the namespace that you want to delete. \ No newline at end of file diff --git a/docs/references/search/index.html b/docs/references/search/index.html new file mode 100644 index 0000000..e4e7ca2 --- /dev/null +++ b/docs/references/search/index.html @@ -0,0 +1,52 @@ +Search | INFINI Pizza +
+Search +

Search +#

A search query, or query, is a request for information about documents in Pizza +collections.

A search consists of one or more queries that are combined and sent to Pizza. +Documents that match a search’s queries are returned in the hits, or search +results, of the response.

A search may also contain additional information used to better process its +queries. For example, a search may be limited to a specific collection or only +return a specific number of results.

Examples +#

Search all the collections under the default namespace whose names are ended +with -logs, fetch the documents whose field year has value 2024:

POST /default.*-logs/_search
+{
+  "query": {
+    "term": {
+      "year": "2024" 
+    }
+  }
+}
+

Requests +#

POST /<targets>/_search
+

Path parameters +#

  • targets
    (Optional, String) Comma-separated, names of the collection to search (wildcard supported)

Query parameters +#

  • from
    (Optional, integer) How many documents to skip, should be non-negative and defaults to 0.

  • size
    (Optional, integer) The maximun number of documents to be returned in hits, defaults to 20.

Term-level queries +#

  • prefix query
    Returns documents that contain a specific prefix in a provided field.
  • range query
    Returns documents that contain terms within a provided range.
  • regexp query
    Returns documents that contain terms matching a regular expression.
  • term query
    Returns documents that contain an exact term in a provided field.
\ No newline at end of file diff --git a/docs/references/search/index.xml b/docs/references/search/index.xml new file mode 100644 index 0000000..3c51029 --- /dev/null +++ b/docs/references/search/index.xml @@ -0,0 +1,12 @@ +Search on INFINI Pizza/docs/references/search/Recent content in Search on INFINI PizzaHugo -- gohugo.ioPrefix query/docs/references/search/prefix/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/prefix/Prefix query # Returns documents that contain a specific prefix in a provided field. +Examples # The following search returns documents where the org.id field contains a term that begins with inf. +GET /_search { &#34;query&#34;: { &#34;prefix&#34;: { &#34;org.id&#34;: { &#34;value&#34;: &#34;inf&#34; } } } } Top-level parameters for prefix # &lt;field&gt; +(Required, object) Field you wish to search. Parameters for &lt;field&gt; # valueRange query/docs/references/search/range/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/range/Range query # Returns documents that contain terms within a provided range. +Examples # The following search returns documents where the age field contains a term between 10 and 20. +GET /_search { &#34;query&#34;: { &#34;range&#34;: { &#34;age&#34;: { &#34;gte&#34;: 10, &#34;lte&#34;: 20 } } } } Top-level parameters for range # &lt;field&gt; +(Required, object) Field you wish to search. Parameters for &lt;field&gt; # gtRegexp query/docs/references/search/regexp/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/regexp/Regexp query # Returns documents that contain terms matching a regular expression. +A regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax. +Examples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters.Term query/docs/references/search/term/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/term/Term query # Returns documents that contain an exact term in a provided field. +You can use the term query to find documents based on a precise value such as a price, a product ID, or a username. +Examples # GET /_search { &#34;query&#34;: { &#34;term&#34;: { &#34;org.id&#34;: { &#34;value&#34;: &#34;infini&#34; } } } } Top-level parameters for term # &lt;field&gt; +(Required, object) Field you wish to search. \ No newline at end of file diff --git a/docs/references/search/prefix/index.html b/docs/references/search/prefix/index.html new file mode 100644 index 0000000..43076bf --- /dev/null +++ b/docs/references/search/prefix/index.html @@ -0,0 +1,52 @@ +Prefix query | INFINI Pizza +
+Prefix query +

Prefix query +#

Returns documents that contain a specific prefix in a provided field.

Examples +#

The following search returns documents where the org.id field contains a term +that begins with inf.

GET /_search
+{
+  "query": {
+    "prefix": {
+      "org.id": {
+        "value": "inf"
+      }
+    }
+  }
+}
+

Top-level parameters for prefix +#

  • <field>
    (Required, object) Field you wish to search.

Parameters for <field> +#

  • value
    (Required, string) Beginning characters of terms you wish to find in the provided +<field>.
  • case_insensitive
    (Optional, Boolean) Allows ASCII case insensitive matching of the value with the +indexed field values when set to true. Default is false.
\ No newline at end of file diff --git a/docs/references/search/range/index.html b/docs/references/search/range/index.html new file mode 100644 index 0000000..019f937 --- /dev/null +++ b/docs/references/search/range/index.html @@ -0,0 +1,51 @@ +Range query | INFINI Pizza +
+Range query +

Range query +#

Returns documents that contain terms within a provided range.

Examples +#

The following search returns documents where the age field contains a term +between 10 and 20.

GET /_search
+{
+  "query": {
+    "range": {
+      "age": {
+        "gte": 10,
+        "lte": 20
+      }
+    }
+  }
+}
+

Top-level parameters for range +#

  • <field>
    (Required, object) Field you wish to search.

Parameters for <field> +#

  • gt
    (Optional) Greater than.
  • gte
    (Optional) Greater than or equal to.
  • lt
    (Optional) Less than.
  • lte
    (Optional) Less than or equal to.
\ No newline at end of file diff --git a/docs/references/search/regexp/index.html b/docs/references/search/regexp/index.html new file mode 100644 index 0000000..a27f091 --- /dev/null +++ b/docs/references/search/regexp/index.html @@ -0,0 +1,58 @@ +Regexp query | INFINI Pizza +
+Regexp query +

Regexp query +#

Returns documents that contain terms matching a +regular expression.

A regular expression is a way to match patterns in data using placeholder +characters, called operators. For a list of operators supported by the regexp +query, see +Regular expression syntax.

Examples +#

The following search returns documents where the org.id field contains any +term that begins with in and ends with y. The .* operators match any +characters of any length, including no characters. Matching terms can include +ini, inni, and infini.

GET /_search
+{
+  "query": {
+    "regexp": {
+      "org.id": {
+        "value": "in.*i",
+        "case_insensitive": true
+      }
+    }
+  }
+}
+

Top-level parameters for range +#

  • <field>
    (Required, object) Field you wish to search.

Parameters for <field> +#

  • value
    (Required, string) Regular expression for terms you wish to find in the +provided <field>. For a list of supported operators, see +Regular expression syntax.
  • case_insensitive
    (Optional, Boolean) Allows ASCII case insensitive matching of the value with the +indexed field values when set to true. Default is false.
\ No newline at end of file diff --git a/docs/references/search/term/index.html b/docs/references/search/term/index.html new file mode 100644 index 0000000..f5a7e46 --- /dev/null +++ b/docs/references/search/term/index.html @@ -0,0 +1,53 @@ +Term query | INFINI Pizza +
+Term query +

Term query +#

Returns documents that contain an exact term in a provided field.

You can use the term query to find documents based on a precise value such as a +price, a product ID, or a username.

Examples +#

GET /_search
+{
+  "query": {
+    "term": {
+      "org.id": {
+        "value": "infini"
+      }
+    }
+  }
+}
+

Top-level parameters for term +#

  • <field>
    (Required, object) Field you wish to search.

Parameters for <field> +#

  • value
    (Required, string) Term you wish to find in the provided <field>. To return a +document, the term must exactly match the field value, including whitespace and +capitalization.
  • case_insensitive
    (Optional, Boolean) Allows ASCII case insensitive matching of the value with the +indexed field values when set to true. Default is false.
\ No newline at end of file diff --git a/docs/release-notes/index.html b/docs/release-notes/index.html new file mode 100644 index 0000000..77408fe --- /dev/null +++ b/docs/release-notes/index.html @@ -0,0 +1,36 @@ +Release notes | INFINI Pizza +
+Release notes +

Release notes +#

Information about release notes of INFINI Pizza is provided here.

0.1.0 +#

Breaking changes +#

Features +#

Bug fix +#

Improvements +#

\ No newline at end of file diff --git a/docs/release-notes/index.xml b/docs/release-notes/index.xml new file mode 100644 index 0000000..4104bf8 --- /dev/null +++ b/docs/release-notes/index.xml @@ -0,0 +1 @@ +Release notes on INFINI Pizza/docs/release-notes/Recent content in Release notes on INFINI PizzaHugo -- gohugo.io \ No newline at end of file diff --git a/en.search-data.min.037d8229575f923dafe199da92051e91b8d6debf6f269a0d7788069e7bb39059.js b/en.search-data.min.037d8229575f923dafe199da92051e91b8d6debf6f269a0d7788069e7bb39059.js new file mode 100644 index 0000000..87c3653 --- /dev/null +++ b/en.search-data.min.037d8229575f923dafe199da92051e91b8d6debf6f269a0d7788069e7bb39059.js @@ -0,0 +1 @@ +'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/docs/references/aggregation/avg/','title':"Avg aggregation",'section':"Aggregation",'content':"Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with:\nPOST /exams/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;avg\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;grade\u0026#34; } } } } The above aggregation computes the average grade over all documents. The aggregation type is avg and the field setting defines the numeric field of the documents the average will be computed on. The above will return the following:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;value\u0026#34;: 75.0 } } } The name of the aggregation (avg_grade above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':1,'href':'/docs/references/collection/create/','title':"Create a collection",'section':"Collection",'content':"Create a collection # Creates a new collection.\nExamples # The following request creates a new collection called my-collection in the namespace my-namespace:\nPUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as:\nPUT /my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. Collection names must meet the same criteria as namespace names. "});index.add({'id':2,'href':'/docs/references/document/create/','title':"Create a document",'section':"Document",'content':"Create a document # Creates a new document.\nExamples # Insert a JSON document into the my-collection collection:\nPOST /my-collection/_doc { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } The API supports passing a customized UUID as the document identify, eg:\nPOST /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } Request # POST /\u0026lt;target\u0026gt;/_doc/[\u0026lt;doc_id\u0026gt;] {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Optional, string) The unique identify of the document, auto generated if not specified. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':3,'href':'/docs/references/namespace/create/','title':"Create a namespace",'section':"Namespace",'content':"Create a namespace # Creates a new namespace.\nExamples # If creating a website namespace, the following request creates a new namespace called website:\nPUT /_namespace/website Request # PUT /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) "});index.add({'id':4,'href':'/docs/references/aggregation/date-histogram/','title':"Date histogram aggregation",'section':"Aggregation",'content':"Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.\nExamples # As an example, here is an aggregation requesting bucket intervals of a month in calendar time:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;date_histogram\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;date\u0026#34;, \u0026#34;calendar_interval\u0026#34;: \u0026#34;1M\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: 1420070400000, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: 1422748800000, \u0026#34;doc_count\u0026#34;: 2 }, { \u0026#34;key\u0026#34;: 1425168000000, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for date_histogram # field\n(Required, string) Field you wish to aggregate. calendar_interval # (Optional, string) Calendar-aware intervals are configured with the calendar_interval parameter. You can specify calendar intervals using the unit name, such as month, or as a single unit quantity, such as 1M. For example, day and 1d are equivalent. Multiple quantities, such as 2d, are not supported.\nThe accepted calendar intervals are:\n minute, 1m\nAll minutes begin at 00 seconds. One minute is the interval between 00 seconds of the first minute and 00 seconds of the following minute in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. hour, 1h\nAll hours begin at 00 minutes and 00 seconds. One hour (1h) is the interval between 00:00 minutes of the first hour and 00:00 minutes of the following hour in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. day, 1d\nAll days begin at the earliest possible time, which is usually 00:00:00 (midnight). One day (1d) is the interval between the start of the day and the start of the following day in the specified time zone, compensating for any intervening time changes. week, 1w\nOne week is the interval between the start day_of_week:hour:minute:second and the same day of the week and time of the following week in the specified time zone. month, 1M\nOne month is the interval between the start day of the month and time of day and the same day of the month and time of the following month in the specified time zone, so that the day of the month and time of day are the same at the start and end. quarter, 1q\nOne quarter is the interval between the start day of the month and time of day and the same day of the month and time of day three months later, so that the day of the month and time of day are the same at the start and end. year, 1y\nOne year is the interval between the start day of the month and time of day and the same day of the month and time of day the following year in the specified time zone, so that the date and time are the same at the start and end. fixed_interval # Fixed intervals are configured with the fixed_interval parameter.\nIn contrast to calendar-aware intervals, fixed intervals are a fixed number of SI units and never deviate, regardless of where they fall on the calendar. One second is always composed of 1000ms. This allows fixed intervals to be specified in any multiple of the supported units.\nHowever, it means fixed intervals cannot express other units such as months, since the duration of a month is not a fixed quantity. Attempting to specify a calendar interval like month or quarter will throw an exception.\nThe accepted units for fixed intervals are:\n milliseconds (ms)\nA single millisecond. This is a very, very small interval. seconds (s)\nDefined as 1000 milliseconds each. minutes (m)\nDefined as 60 seconds each (60,000 milliseconds). All minutes begin at 00 seconds. hours (h)\nDefined as 60 minutes each (3,600,000 milliseconds). All hours begin at 00 minutes and 00 seconds. days (d)\nDefined as 24 hours (86,400,000 milliseconds). All days begin at the earliest possible time, which is usually 00:00:00 (midnight). "});index.add({'id':5,'href':'/docs/getting-started/installation/','title':"Installation",'section':"Getting started",'content':"Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies.\nAutomatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza:\ncurl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows:\n -v \u0026lt;version number\u0026gt; (default is the latest version) -d \u0026lt;installation directory\u0026gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:\nhttps://release.infinilabs.com/\nVerification of the installation # Assuming Pizza is in your $PATH after installation, run the following command to ensure the package has been installed correctly:\n$ pizza --version PIZZA 0.1.0 Starting the server # Start Pizza as follows with the configuration:\n$ pizza --config pizza.yaml ___ _____ __________ _ / _ \\\\_ \\/ _ / _ / /_\\ / /_)/ / /\\/\\// /\\// / //_\\\\ / ___/\\/ /_ / //\\/ //\\/ _ \\ \\/ \\____/ /____/____/\\_/ \\_/ [PIZZA] The Next-Gen Real-Time Hybrid Search \u0026amp; AI-Native Innovation Engine. ... Interaction with the server # Assuming Pizza is listening on 127.0.0.1:9200, use the following command to create a collection named testing:\ncurl -XPUT http://127.0.0.1:9200/testing Refer to the reference page for more APIs.\nShutdown the server # Press Ctrl+C to shut down Pizza, and the message below is displayed:\n... __ _ __ ____ __ _ __ __ / // |/ // __// // |/ // / / // || // _/ / // || // / /_//_/|_//_/ /_//_/|_//_/ ©INFINI.LTD, All Rights Reserved. "});index.add({'id':6,'href':'/docs/references/aggregation/max/','title':"Max aggregation",'section':"Aggregation",'content':"Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents.\nExamples # Computing the max price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;max\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;value\u0026#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':7,'href':'/docs/references/aggregation/min/','title':"Min aggregation",'section':"Aggregation",'content':"Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.\nExamples # Computing the min price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;min\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;value\u0026#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':8,'href':'/docs/references/namespace/','title':"Namespace",'section':"References",'content':"Namespace # Pizza supports a multi-tenant architecture, allowing different sets of data for various scenarios to be stored within a single engine. Each set is referred to as a namespace, and different namespaces can have distinct topologies and access permissions configured.\nUsually, there\u0026rsquo;s no need to set up an additional namespace, and the default namespace is default.\nWithin a namespace, there are several types of data:\n Collection, Docs: Collections of documents. Data: Source data, stored in columns layout. Index: Indexed data, built based on Data, optional. View: View data, composite views of data across collections. Namespace management # Namespace APIs are used to manage individual Namespace and settings.\n Create a namespace Delete a namespace "});index.add({'id':9,'href':'/docs/overview/','title':"Overview",'section':"Documentation",'content':"Overview # Introduction # INFINI Pizza is a distributed hybrid search database system. Our mission is to deliver real-time smart search experiences tailored for enterprises by fully harnessing the potential of modern hardware and the AI capability. We are committed to meeting the demands of high concurrency and high throughput in challenging environments, all while providing seamless and efficient search capabilities.\nFeatures # The Next-Gen Real-Time Search \u0026amp; AI-Native Innovation Engine Written in Rust.\n Major Features of Pizza:\n True Real-Time, get search results instantly after insertion, no need to refresh anymore. Support partial update in place, no longer pull and push back the entire document again. High performance, lightning fast with high throughput and low latency, hardware reduced. High scalability, supports very large-scale clusters, beyond petabytes. Native integration with LLMs and ML, empowering AI-Native enterprise innovation. Design with storage and computation separation, and also storage and index separation. Architecture # -- Pizza is building on top of these awesome projects:\n Rust Apache Arrow Arrow DataFusion Why Pizza # The name Pizza was taken from our unique sharding design.\nThe documents in Pizza are persisted as Parquet files in object storage. Native integration with other big data systems through object storage and the standard Parquet format.\nWhen to use Pizza # Pizza is good fit when:\n You have latency-sensitive search applications that millisecond matters. You need fresh data, your data is mutable, and you need fast queries. You need to handle high concurrency with complex queries. You need to handle more than petabytes data for user-facing use cases. You need to handle JOIN for complex data relations. You need to keep thousands of fields, but only a handful are subject to change. You need to manage both structured and unstructured data in a cohesive manner. Pizza is designed to address these problems at heart, to solve real critical business issues, serve your data-driven applications in realtime at very large scale. Enhance and enrich the data experiences of your end-users.\nDesign choices # The philosophy of Pizza is that indexes should be designed per use case, and should not attempt to fit every use case with a single index. Therefore, we introduced Views, which allow combining different document sources into a single index or separating a document into different layers of indexes for different use cases.\nBy emphasizes the decoupling of storage and computation, as well as the separation of storage and indexing. Which enables efficient and scalable data processing by allowing independent management and optimization of storage resources, computational resources, and indexing strategies.\nNative integration with LLMs (Language Models) and ML (Machine Learning) technologies is a key aspect of Pizza, providing powerful capabilities for AI-Native enterprise innovation. By seamlessly integrating with LLMs and ML frameworks, Pizza enables advanced natural language processing, machine learning, and data analytics directly within the search and data retrieval pipeline.\nWe are in the process of building the next-generation search infrastructure, driven by our unwavering commitment to delivering real-time search experiences for enterprises, unlocking the potential of modern hardware, and catering to the demands of high concurrency and high throughput in the most challenging of environments\nNext step # Install and configure Pizza.\n"});index.add({'id':10,'href':'/docs/references/aggregation/percentiles/','title':"Percentiles aggregation",'section':"Aggregation",'content':"Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents.\nPercentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values.\nPercentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean. Any data which falls outside three standard deviations is often considered an anomaly.\nWhen a range of percentiles are retrieved, they can be used to estimate the data distribution and determine if the data is skewed, bimodal, etc.\nExamples # Assume your data consists of website load times. The average and median load times are not overly useful to an administrator. The max may be interesting, but it can be easily skewed by a single slow response.\nLet\u0026rsquo;s look at a range of percentiles representing load time:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34; } } } } By default, the percentile metric will generate a range of percentiles: [1, 5, 25, 50, 75, 95, 99]. The response will look like this:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: { \u0026#34;1.0\u0026#34;: 10.0, \u0026#34;5.0\u0026#34;: 30.0, \u0026#34;25.0\u0026#34;: 170.0, \u0026#34;50.0\u0026#34;: 445.0, \u0026#34;75.0\u0026#34;: 720.0, \u0026#34;95.0\u0026#34;: 940.0, \u0026#34;99.0\u0026#34;: 980.0 } } } } As you can see, the aggregation will return a calculated value for each percentile in the default range. If we assume response times are in milliseconds, it is immediately obvious that the webpage normally loads in 10-725ms, but occasionally spikes to 945-985ms.\nOften, administrators are only interested in outliers — the extreme percentiles. We can specify just the percents we are interested in (requested percentiles must be a value between 0-100 inclusive):\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;percents\u0026#34;: [95, 99, 99.9] } } } } Parameters for avg # field\n(Required, string) Field you wish to aggregate. percents\n(Optional, array) A range of percentiles that are calculated. Default is [1, 5, 25, 50, 75, 95, 99]. keyed # By default the keyed flag is set to true which associates a unique string key with each bucket and returns the ranges as a hash rather than an array. Setting the keyed flag to false will disable this behavior:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;keyed\u0026#34;: false } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: [ { \u0026#34;key\u0026#34;: 1.0, \u0026#34;value\u0026#34;: 10.0 }, { \u0026#34;key\u0026#34;: 5.0, \u0026#34;value\u0026#34;: 30.0 }, { \u0026#34;key\u0026#34;: 25.0, \u0026#34;value\u0026#34;: 170.0 }, { \u0026#34;key\u0026#34;: 50.0, \u0026#34;value\u0026#34;: 445.0 }, { \u0026#34;key\u0026#34;: 75.0, \u0026#34;value\u0026#34;: 720.0 }, { \u0026#34;key\u0026#34;: 95.0, \u0026#34;value\u0026#34;: 940.0 }, { \u0026#34;key\u0026#34;: 99.0, \u0026#34;value\u0026#34;: 980.0 } ] } } } "});index.add({'id':11,'href':'/docs/references/search/prefix/','title':"Prefix query",'section':"Search",'content':"Prefix query # Returns documents that contain a specific prefix in a provided field.\nExamples # The following search returns documents where the org.id field contains a term that begins with inf.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;prefix\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;inf\u0026#34; } } } } Top-level parameters for prefix # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Beginning characters of terms you wish to find in the provided \u0026lt;field\u0026gt;. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':12,'href':'/docs/references/search/range/','title':"Range query",'section':"Search",'content':"Range query # Returns documents that contain terms within a provided range.\nExamples # The following search returns documents where the age field contains a term between 10 and 20.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;range\u0026#34;: { \u0026#34;age\u0026#34;: { \u0026#34;gte\u0026#34;: 10, \u0026#34;lte\u0026#34;: 20 } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # gt\n(Optional) Greater than. gte\n(Optional) Greater than or equal to. lt\n(Optional) Less than. lte\n(Optional) Less than or equal to. "});index.add({'id':13,'href':'/docs/references/search/regexp/','title':"Regexp query",'section':"Search",'content':"Regexp query # Returns documents that contain terms matching a regular expression.\nA regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax.\nExamples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters. Matching terms can include ini, inni, and infini.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;regexp\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;in.*i\u0026#34;, \u0026#34;case_insensitive\u0026#34;: true } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Regular expression for terms you wish to find in the provided \u0026lt;field\u0026gt;. For a list of supported operators, see Regular expression syntax. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':14,'href':'/docs/references/aggregation/sum/','title':"Sum aggregation",'section':"Aggregation",'content':"Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;query\u0026#34;: { \u0026#34;constant_score\u0026#34;: { \u0026#34;filter\u0026#34;: { \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;hat\u0026#34; } } } }, \u0026#34;aggs\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;sum\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Resulting in:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;value\u0026#34;: 450.0 } } } The name of the aggregation (hat_prices above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':15,'href':'/docs/references/search/term/','title':"Term query",'section':"Search",'content':"Term query # Returns documents that contain an exact term in a provided field.\nYou can use the term query to find documents based on a precise value such as a price, a product ID, or a username.\nExamples # GET /_search { \u0026#34;query\u0026#34;: { \u0026#34;term\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;infini\u0026#34; } } } } Top-level parameters for term # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Term you wish to find in the provided \u0026lt;field\u0026gt;. To return a document, the term must exactly match the field value, including whitespace and capitalization. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':16,'href':'/docs/references/aggregation/terms/','title':"Terms aggregation",'section':"Aggregation",'content':"Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value.\nExamples # POST /_search { \u0026#34;aggs\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;terms\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;genre\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;doc_count_error_upper_bound\u0026#34;: 0, \u0026#34;sum_other_doc_count\u0026#34;: 0, \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: \u0026#34;electronic\u0026#34;, \u0026#34;doc_count\u0026#34;: 6 }, { \u0026#34;key\u0026#34;: \u0026#34;rock\u0026#34;, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: \u0026#34;jazz\u0026#34;, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for terms # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':17,'href':'/docs/references/aggregation/value-count/','title':"Value count aggregation",'section':"Aggregation",'content':"Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over.\nvalue_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;aggs\u0026#34; : { \u0026#34;types_count\u0026#34; : { \u0026#34;value_count\u0026#34; : { \u0026#34;field\u0026#34; : \u0026#34;type\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;types_count\u0026#34;: { \u0026#34;value\u0026#34;: 7 } } } The name of the aggregation (types_count above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':18,'href':'/docs/references/collection/','title':"Collection",'section':"References",'content':"Collection # A \u0026ldquo;Collection\u0026rdquo; typically refers to a grouping or container for related data items in a database or similar data storage system. It can hold various types of data, such as documents, records, or other structured data elements. In the context of the previous discussion about namespaces and data types, a collection could contain documents, each representing a specific piece of information or record.\nCollection management # Collection APIs are used to manage individual collections and settings.\n Create a collection Delete a collection "});index.add({'id':19,'href':'/docs/getting-started/configuration/','title':"Configuration",'section':"Getting started",'content':"Configuration # Pizza supports several methods to overwrite the default configuration.\nCommand lines # ➜ ./bin/pizza --help A Distributed Real-Time Search \u0026amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log \u0026lt;LEVEL\u0026gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config \u0026lt;FILE\u0026gt; -p, --pid \u0026lt;FILE\u0026gt; Place pid to this file -E, --override \u0026lt;KEY=VALUE\u0026gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza.yaml configuration file:\n# ======================== INFINI Pizza Configuration ========================== # -------------------------------- Log ----------------------------------------- log: level: info # -------------------------------- API ----------------------------------------- api: logging: true network: binding: 127.0.0.1:9100 skip_occupied_port: true # -------------------------------- Cluster ------------------------------------- cluster: name: pizza node: name: my_node_1 network: binding: 127.0.0.1:8100 skip_occupied_port: true # -------------------------------- Storage ------------------------------------- storage: compression: ZSTD # -------------------------------- MemTable ------------------------------------ memtable: threshold: 1k max_num_of_instance: 2 allow_multi_instance: true Override configuration # You can tweak the configuration by passing the command line option -E with KEY=VALUE style during Pizza start:\n./bin/pizza -E log.level=trace -E api.network.binding=127.0.0.1:12200 "});index.add({'id':20,'href':'/docs/references/collection/delete/','title':"Delete a collection",'section':"Collection",'content':"Delete a collection # Delete a exists collection.\nExamples # The following request delete the collection called my-collection:\nDELETE my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path Parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. "});index.add({'id':21,'href':'/docs/references/namespace/delete/','title':"Delete a namespace",'section':"Namespace",'content':"Delete a namespace # Delete a exists namespace.\nExamples # The following request delete the namespace called website:\nDELETE /_namespace/website Request # DELETE /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Optional, string) The name of the namespace that you want to delete. "});index.add({'id':22,'href':'/docs/references/document/','title':"Document",'section':"References",'content':"Document # In Pizza, a document is a data structure composed of field-and-value pairs. It\u0026rsquo;s roughly equivalent to a row in a relational database table, but with a dynamic schema. Documents are the basic unit of data storage in Pizza, and collections are groupings of documents.\nEach document in Pizza is represented in JSON format, which is a lightweight data interchange format that is easy for humans to read and write and easy for machines to parse and generate.\nDocument management # Document APIs are used to manage documents.\n Create a document Fetch a document Replace a document Partial update a document Delete a document Batch document operation "});index.add({'id':23,'href':'/docs/references/','title':"References",'section':"Documentation",'content':"References # Data management # Namespace APIs Collection APIs Document APIs Search and analyze # Search you data Aggregations "});index.add({'id':24,'href':'/docs/administration/','title':"Administration",'section':"Documentation",'content':"Administration # Cluster management # Search and analyze # "});index.add({'id':25,'href':'/docs/release-notes/','title':"Release notes",'section':"Documentation",'content':"Release notes # Information about release notes of INFINI Pizza is provided here.\n0.1.0 # Breaking changes # Features # Bug fix # Improvements # "});index.add({'id':26,'href':'/docs/references/document/fetch/','title':"Fetch a document",'section':"Document",'content':"Fetch a document # Retrieve an existing document by specifying its unique identifier.\nExamples # Fetch a document from the my-collection collection with customized uuid news_001:\nGET /my-collection/_doc/news_001 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:\nGET /my-collection/_doc/0,0 Request # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. "});index.add({'id':27,'href':'/docs/references/document/replace/','title':"Replace a document",'section':"Document",'content':"Replace a document # Replace an existing document by specifying its unique identifier and the new content.\nExamples # Replace a document news_001 of the collection my-collection with new content:\nPUT /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} After the document modification, If you perform the fetch request:\nGET /my-collection/_doc/news_001 It returns an updated document like:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } Note that the document _version was increased to 2.\nPizza works by marking the old document as deleted and insert a new document under the hood.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':28,'href':'/docs/references/document/partial_update/','title':"Partial update a document",'section':"Document",'content':"Partial update a document # Sometimes we may only need to update a portion fields of the document.\nExamples # Update the org.id field of the document news_001 in the collection my-collection:\nPUT /my-collection/_doc/news_001/_update { \u0026#34;sync\u0026#34;:{ \u0026#34;replace\u0026#34;:{ \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt;/_update { \u0026#34;sync\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } \u0026#34;async\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } } Pizza support both sync and async way to perform the updates, in order to update in realtime, you need to use sync here.\nIn asynchronous mode, the update process is considered complete once the request is committed to the WAL. Background tasks independently consume and process updates asynchronously, making it suitable for scenarios prioritizing update efficiency.\nPath parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;operation\u0026gt; The operation supported by partial updates: add, replace, remove, array_append. \u0026lt;fields\u0026gt;\n(Required, string) The JSON format of the fields operation by partial updates. "});index.add({'id':29,'href':'/docs/references/document/delete/','title':"Delete a document",'section':"Document",'content':"Delete a document # Delete a specific document from the specified collection by specifying its unique identifier.\nExamples # Delete the document 1 from collection my-collection:\nDELETE /my-collection/_doc/0,0 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;result\u0026#34;: \u0026#34;deleted\u0026#34;, ... } Request # DELETE /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) Unique identifier for the document, support both _key or _id. "});index.add({'id':30,'href':'/docs/references/document/bulk/','title':"Batch document operation",'section':"Document",'content':"Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request.\nExamples # POST /_bulk { \u0026#34;index\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value1\u0026#34; } { \u0026#34;delete\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;2\u0026#34; } } { \u0026#34;create\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;3\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value3\u0026#34; } { \u0026#34;update\u0026#34; : {\u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34;, \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;} } { \u0026#34;doc\u0026#34; : {\u0026#34;field2\u0026#34; : \u0026#34;value2\u0026#34;} } The API returns the following result:\n{ \u0026#34;took\u0026#34;: 30, \u0026#34;errors\u0026#34;: false, \u0026#34;items\u0026#34;: [ { \u0026#34;index\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;delete\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;not_found\u0026#34;, ... } }, { \u0026#34;create\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;update\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;updated\u0026#34;, ... } } ] } Request # POST /_bulk POST /\u0026lt;target\u0026gt;/_bulk Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. Request body # The actions are specified in the request body using a newline delimited JSON (NDJSON) structure:\naction_and_meta_data\\n optional_source\\n action_and_meta_data\\n optional_source\\n .... action_and_meta_data\\n optional_source\\n The index and create actions expect a source on the next line, and have the same semantics as the standard API: create fails if a document with the same ID already exists in the target, index adds or replaces a document as necessary.\nupdate expects that the partial doc, upsert, and script and its options are specified on the next line.\ndelete does not expect a source on the next line and has the same semantics as the standard delete API.\nBecause this format uses literal \\n\u0026rsquo;s as delimiters, make sure that the JSON actions and sources are not pretty printed.\nIf you provide a \u0026lt;target\u0026gt; in the request path, it is used for any actions that don’t explicitly specify an _index argument.\ncreate # Indexes the specified document if it does not already exist. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. index # Indexes the specified document. If the document exists, replaces the document and increments the version. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. doc # The partial document to index. Required for update operations.\n\u0026lt;fields\u0026gt; # The document source to index. Required for create and index operations.\n"});index.add({'id':31,'href':'/docs/references/search/','title':"Search",'section':"References",'content':"Search # A search query, or query, is a request for information about documents in Pizza collections.\nA search consists of one or more queries that are combined and sent to Pizza. Documents that match a search\u0026rsquo;s queries are returned in the hits, or search results, of the response.\nA search may also contain additional information used to better process its queries. For example, a search may be limited to a specific collection or only return a specific number of results.\nTerm-level queries # prefix query\nReturns documents that contain a specific prefix in a provided field. range query\nReturns documents that contain terms within a provided range. regexp query\nReturns documents that contain terms matching a regular expression. term query\nReturns documents that contain an exact term in a provided field. "});index.add({'id':32,'href':'/docs/references/aggregation/','title':"Aggregation",'section':"References",'content':"Aggregation # An aggregation summarizes your data as metrics, statistics, or other analytics.\nPizza organizes aggregations into the following categories:\n Metric aggregations that calculate metrics, such as a sum or average, from field values. Bucket aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. Metric aggregations # avg aggregation\nA single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. max aggregation\nA single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. min aggregation\nA single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. percentiles aggregation\nA multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. sum aggregation\nA single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. value_count aggregation\nA single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Bucket aggregations # date_histogram aggregation\nA histogram aggregation that can only be used with date or date range values. terms aggregation\nA multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. "});index.add({'id':33,'href':'/docs/community/','title':"Community",'section':"Documentation",'content':"Community hall of fame # The following acknowledges the Maintainers for the Pizza project, credits to those who have Contributed to this repository (via bug reports, code, design, ideas, project management, translation, testing, etc.), proactive advocates of pizza as Evangelists, and any other References utilized.\nMaintainers # Medcl(@medcl), SteveLauC, Loi Chyan(@loichyan)\nContributors # Evangelists # Adopters # Pizza community of adopters is growing! Innovative organizations of all sizes and across industry sectors are committed to accelerating the adoption of commercial-grade, production-ready open source technologies developed by the Pizza community.\nDo you use INFINI Pizza? Show your support for open source by adding your logo to this page.\nPlease create an issue to add your logo below.\nReferences # "});})(); \ No newline at end of file diff --git a/en.search-data.min.49e90322b03f690d765bf7acfa146e27640860875fd991bd0a5455b816c35d90.js b/en.search-data.min.49e90322b03f690d765bf7acfa146e27640860875fd991bd0a5455b816c35d90.js new file mode 100644 index 0000000..10d69d1 --- /dev/null +++ b/en.search-data.min.49e90322b03f690d765bf7acfa146e27640860875fd991bd0a5455b816c35d90.js @@ -0,0 +1 @@ +'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/docs/references/aggregation/avg/','title':"Avg aggregation",'section':"Aggregation",'content':"Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with:\nPOST /exams/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;avg\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;grade\u0026#34; } } } } The above aggregation computes the average grade over all documents. The aggregation type is avg and the field setting defines the numeric field of the documents the average will be computed on. The above will return the following:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;value\u0026#34;: 75.0 } } } The name of the aggregation (avg_grade above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':1,'href':'/docs/references/collection/create/','title':"Create a collection",'section':"Collection",'content':"Create a collection # Creates a new collection.\nExamples # The following request creates a new collection called my-collection in the namespace my-namespace:\nPUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as:\nPUT /my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. Collection names must meet the same criteria as namespace names. "});index.add({'id':2,'href':'/docs/references/document/create/','title':"Create a document",'section':"Document",'content':"Create a document # Creates a new document.\nExamples # Insert a JSON document into the my-collection collection:\nPOST /my-collection/_doc { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } The API supports passing a customized UUID as the document identify, eg:\nPOST /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } Request # POST /\u0026lt;target\u0026gt;/_doc/[\u0026lt;doc_id\u0026gt;] {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Optional, string) The unique identify of the document, auto generated if not specified. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':3,'href':'/docs/references/namespace/create/','title':"Create a namespace",'section':"Namespace",'content':"Create a namespace # Creates a new namespace.\nExamples # If creating a website namespace, the following request creates a new namespace called website:\nPUT /_namespace/website Request # PUT /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) "});index.add({'id':4,'href':'/docs/references/aggregation/date-histogram/','title':"Date histogram aggregation",'section':"Aggregation",'content':"Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.\nExamples # As an example, here is an aggregation requesting bucket intervals of a month in calendar time:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;date_histogram\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;date\u0026#34;, \u0026#34;calendar_interval\u0026#34;: \u0026#34;1M\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: 1420070400000, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: 1422748800000, \u0026#34;doc_count\u0026#34;: 2 }, { \u0026#34;key\u0026#34;: 1425168000000, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for date_histogram # field\n(Required, string) Field you wish to aggregate. calendar_interval # (Optional, string) Calendar-aware intervals are configured with the calendar_interval parameter. You can specify calendar intervals using the unit name, such as month, or as a single unit quantity, such as 1M. For example, day and 1d are equivalent. Multiple quantities, such as 2d, are not supported.\nThe accepted calendar intervals are:\n minute, 1m\nAll minutes begin at 00 seconds. One minute is the interval between 00 seconds of the first minute and 00 seconds of the following minute in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. hour, 1h\nAll hours begin at 00 minutes and 00 seconds. One hour (1h) is the interval between 00:00 minutes of the first hour and 00:00 minutes of the following hour in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. day, 1d\nAll days begin at the earliest possible time, which is usually 00:00:00 (midnight). One day (1d) is the interval between the start of the day and the start of the following day in the specified time zone, compensating for any intervening time changes. week, 1w\nOne week is the interval between the start day_of_week:hour:minute:second and the same day of the week and time of the following week in the specified time zone. month, 1M\nOne month is the interval between the start day of the month and time of day and the same day of the month and time of the following month in the specified time zone, so that the day of the month and time of day are the same at the start and end. quarter, 1q\nOne quarter is the interval between the start day of the month and time of day and the same day of the month and time of day three months later, so that the day of the month and time of day are the same at the start and end. year, 1y\nOne year is the interval between the start day of the month and time of day and the same day of the month and time of day the following year in the specified time zone, so that the date and time are the same at the start and end. fixed_interval # Fixed intervals are configured with the fixed_interval parameter.\nIn contrast to calendar-aware intervals, fixed intervals are a fixed number of SI units and never deviate, regardless of where they fall on the calendar. One second is always composed of 1000ms. This allows fixed intervals to be specified in any multiple of the supported units.\nHowever, it means fixed intervals cannot express other units such as months, since the duration of a month is not a fixed quantity. Attempting to specify a calendar interval like month or quarter will throw an exception.\nThe accepted units for fixed intervals are:\n milliseconds (ms)\nA single millisecond. This is a very, very small interval. seconds (s)\nDefined as 1000 milliseconds each. minutes (m)\nDefined as 60 seconds each (60,000 milliseconds). All minutes begin at 00 seconds. hours (h)\nDefined as 60 minutes each (3,600,000 milliseconds). All hours begin at 00 minutes and 00 seconds. days (d)\nDefined as 24 hours (86,400,000 milliseconds). All days begin at the earliest possible time, which is usually 00:00:00 (midnight). "});index.add({'id':5,'href':'/docs/getting-started/installation/','title':"Installation",'section':"Getting started",'content':"Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies.\nAutomatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza:\ncurl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows:\n -v \u0026lt;version number\u0026gt; (default is the latest version) -d \u0026lt;installation directory\u0026gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:\nhttps://release.infinilabs.com/\nVerification of the installation # Assuming Pizza is in your $PATH after installation, run the following command to ensure the package has been installed correctly:\n$ pizza --version PIZZA 0.1.0 Starting the server # Start Pizza as follows with the configuration:\n$ pizza --config pizza.yaml ___ _____ __________ _ / _ \\\\_ \\/ _ / _ / /_\\ / /_)/ / /\\/\\// /\\// / //_\\\\ / ___/\\/ /_ / //\\/ //\\/ _ \\ \\/ \\____/ /____/____/\\_/ \\_/ [PIZZA] The Next-Gen Real-Time Hybrid Search \u0026amp; AI-Native Innovation Engine. ... Interaction with the server # Assuming Pizza is listening on 127.0.0.1:9200, use the following command to create a collection named testing:\ncurl -XPUT http://127.0.0.1:9200/testing Refer to the reference page for more APIs.\nShutdown the server # Press Ctrl+C to shut down Pizza, and the message below is displayed:\n... __ _ __ ____ __ _ __ __ / // |/ // __// // |/ // / / // || // _/ / // || // / /_//_/|_//_/ /_//_/|_//_/ ©INFINI.LTD, All Rights Reserved. "});index.add({'id':6,'href':'/docs/references/aggregation/max/','title':"Max aggregation",'section':"Aggregation",'content':"Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents.\nExamples # Computing the max price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;max\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;value\u0026#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':7,'href':'/docs/references/aggregation/min/','title':"Min aggregation",'section':"Aggregation",'content':"Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.\nExamples # Computing the min price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;min\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;value\u0026#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':8,'href':'/docs/references/namespace/','title':"Namespace",'section':"References",'content':"Namespace # Pizza supports a multi-tenant architecture, allowing different sets of data for various scenarios to be stored within a single engine. Each set is referred to as a namespace, and different namespaces can have distinct topologies and access permissions configured.\nUsually, there\u0026rsquo;s no need to set up an additional namespace, and the default namespace is default.\nWithin a namespace, there are several types of data:\n Collection, Docs: Collections of documents. Data: Source data, stored in columns layout. Index: Indexed data, built based on Data, optional. View: View data, composite views of data across collections. Namespace management # Namespace APIs are used to manage individual Namespace and settings.\n Create a namespace Delete a namespace "});index.add({'id':9,'href':'/docs/overview/','title':"Overview",'section':"Documentation",'content':"Overview # Introduction # INFINI Pizza is a distributed hybrid search database system. Our mission is to deliver real-time smart search experiences tailored for enterprises by fully harnessing the potential of modern hardware and the AI capability. We are committed to meeting the demands of high concurrency and high throughput in challenging environments, all while providing seamless and efficient search capabilities.\nFeatures # The Next-Gen Real-Time Search \u0026amp; AI-Native Innovation Engine Written in Rust.\n Major Features of Pizza:\n True Real-Time, get search results instantly after insertion, no need to refresh anymore. Support partial update in place, no longer pull and push back the entire document again. High performance, lightning fast with high throughput and low latency, hardware reduced. High scalability, supports very large-scale clusters, beyond petabytes. Native integration with LLMs and ML, empowering AI-Native enterprise innovation. Design with storage and computation separation, and also storage and index separation. Architecture # -- Pizza is building on top of these awesome projects:\n Rust Apache Arrow Arrow DataFusion Why Pizza # The name Pizza was taken from our unique sharding design.\nThe documents in Pizza are persisted as Parquet files in object storage. Native integration with other big data systems through object storage and the standard Parquet format.\nWhen to use Pizza # Pizza is good fit when:\n You have latency-sensitive search applications that millisecond matters. You need fresh data, your data is mutable, and you need fast queries. You need to handle high concurrency with complex queries. You need to handle more than petabytes data for user-facing use cases. You need to handle JOIN for complex data relations. You need to keep thousands of fields, but only a handful are subject to change. You need to manage both structured and unstructured data in a cohesive manner. Pizza is designed to address these problems at heart, to solve real critical business issues, serve your data-driven applications in realtime at very large scale. Enhance and enrich the data experiences of your end-users.\nDesign choices # The philosophy of Pizza is that indexes should be designed per use case, and should not attempt to fit every use case with a single index. Therefore, we introduced Views, which allow combining different document sources into a single index or separating a document into different layers of indexes for different use cases.\nBy emphasizes the decoupling of storage and computation, as well as the separation of storage and indexing. Which enables efficient and scalable data processing by allowing independent management and optimization of storage resources, computational resources, and indexing strategies.\nNative integration with LLMs (Language Models) and ML (Machine Learning) technologies is a key aspect of Pizza, providing powerful capabilities for AI-Native enterprise innovation. By seamlessly integrating with LLMs and ML frameworks, Pizza enables advanced natural language processing, machine learning, and data analytics directly within the search and data retrieval pipeline.\nWe are in the process of building the next-generation search infrastructure, driven by our unwavering commitment to delivering real-time search experiences for enterprises, unlocking the potential of modern hardware, and catering to the demands of high concurrency and high throughput in the most challenging of environments\nNext step # Install and configure Pizza.\n"});index.add({'id':10,'href':'/docs/references/aggregation/percentiles/','title':"Percentiles aggregation",'section':"Aggregation",'content':"Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents.\nPercentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values.\nPercentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean. Any data which falls outside three standard deviations is often considered an anomaly.\nWhen a range of percentiles are retrieved, they can be used to estimate the data distribution and determine if the data is skewed, bimodal, etc.\nExamples # Assume your data consists of website load times. The average and median load times are not overly useful to an administrator. The max may be interesting, but it can be easily skewed by a single slow response.\nLet\u0026rsquo;s look at a range of percentiles representing load time:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34; } } } } By default, the percentile metric will generate a range of percentiles: [1, 5, 25, 50, 75, 95, 99]. The response will look like this:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: { \u0026#34;1.0\u0026#34;: 10.0, \u0026#34;5.0\u0026#34;: 30.0, \u0026#34;25.0\u0026#34;: 170.0, \u0026#34;50.0\u0026#34;: 445.0, \u0026#34;75.0\u0026#34;: 720.0, \u0026#34;95.0\u0026#34;: 940.0, \u0026#34;99.0\u0026#34;: 980.0 } } } } As you can see, the aggregation will return a calculated value for each percentile in the default range. If we assume response times are in milliseconds, it is immediately obvious that the webpage normally loads in 10-725ms, but occasionally spikes to 945-985ms.\nOften, administrators are only interested in outliers — the extreme percentiles. We can specify just the percents we are interested in (requested percentiles must be a value between 0-100 inclusive):\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;percents\u0026#34;: [95, 99, 99.9] } } } } Parameters for avg # field\n(Required, string) Field you wish to aggregate. percents\n(Optional, array) A range of percentiles that are calculated. Default is [1, 5, 25, 50, 75, 95, 99]. keyed # By default the keyed flag is set to true which associates a unique string key with each bucket and returns the ranges as a hash rather than an array. Setting the keyed flag to false will disable this behavior:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;keyed\u0026#34;: false } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: [ { \u0026#34;key\u0026#34;: 1.0, \u0026#34;value\u0026#34;: 10.0 }, { \u0026#34;key\u0026#34;: 5.0, \u0026#34;value\u0026#34;: 30.0 }, { \u0026#34;key\u0026#34;: 25.0, \u0026#34;value\u0026#34;: 170.0 }, { \u0026#34;key\u0026#34;: 50.0, \u0026#34;value\u0026#34;: 445.0 }, { \u0026#34;key\u0026#34;: 75.0, \u0026#34;value\u0026#34;: 720.0 }, { \u0026#34;key\u0026#34;: 95.0, \u0026#34;value\u0026#34;: 940.0 }, { \u0026#34;key\u0026#34;: 99.0, \u0026#34;value\u0026#34;: 980.0 } ] } } } "});index.add({'id':11,'href':'/docs/references/search/prefix/','title':"Prefix query",'section':"Search",'content':"Prefix query # Returns documents that contain a specific prefix in a provided field.\nExamples # The following search returns documents where the org.id field contains a term that begins with inf.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;prefix\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;inf\u0026#34; } } } } Top-level parameters for prefix # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Beginning characters of terms you wish to find in the provided \u0026lt;field\u0026gt;. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':12,'href':'/docs/references/search/range/','title':"Range query",'section':"Search",'content':"Range query # Returns documents that contain terms within a provided range.\nExamples # The following search returns documents where the age field contains a term between 10 and 20.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;range\u0026#34;: { \u0026#34;age\u0026#34;: { \u0026#34;gte\u0026#34;: 10, \u0026#34;lte\u0026#34;: 20 } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # gt\n(Optional) Greater than. gte\n(Optional) Greater than or equal to. lt\n(Optional) Less than. lte\n(Optional) Less than or equal to. "});index.add({'id':13,'href':'/docs/references/search/regexp/','title':"Regexp query",'section':"Search",'content':"Regexp query # Returns documents that contain terms matching a regular expression.\nA regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax.\nExamples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters. Matching terms can include ini, inni, and infini.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;regexp\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;in.*i\u0026#34;, \u0026#34;case_insensitive\u0026#34;: true } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Regular expression for terms you wish to find in the provided \u0026lt;field\u0026gt;. For a list of supported operators, see Regular expression syntax. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':14,'href':'/docs/references/aggregation/sum/','title':"Sum aggregation",'section':"Aggregation",'content':"Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;query\u0026#34;: { \u0026#34;constant_score\u0026#34;: { \u0026#34;filter\u0026#34;: { \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;hat\u0026#34; } } } }, \u0026#34;aggs\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;sum\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Resulting in:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;value\u0026#34;: 450.0 } } } The name of the aggregation (hat_prices above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':15,'href':'/docs/references/search/term/','title':"Term query",'section':"Search",'content':"Term query # Returns documents that contain an exact term in a provided field.\nYou can use the term query to find documents based on a precise value such as a price, a product ID, or a username.\nExamples # GET /_search { \u0026#34;query\u0026#34;: { \u0026#34;term\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;infini\u0026#34; } } } } Top-level parameters for term # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Term you wish to find in the provided \u0026lt;field\u0026gt;. To return a document, the term must exactly match the field value, including whitespace and capitalization. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':16,'href':'/docs/references/aggregation/terms/','title':"Terms aggregation",'section':"Aggregation",'content':"Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value.\nExamples # POST /_search { \u0026#34;aggs\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;terms\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;genre\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;doc_count_error_upper_bound\u0026#34;: 0, \u0026#34;sum_other_doc_count\u0026#34;: 0, \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: \u0026#34;electronic\u0026#34;, \u0026#34;doc_count\u0026#34;: 6 }, { \u0026#34;key\u0026#34;: \u0026#34;rock\u0026#34;, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: \u0026#34;jazz\u0026#34;, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for terms # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':17,'href':'/docs/references/aggregation/value-count/','title':"Value count aggregation",'section':"Aggregation",'content':"Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over.\nvalue_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;aggs\u0026#34; : { \u0026#34;types_count\u0026#34; : { \u0026#34;value_count\u0026#34; : { \u0026#34;field\u0026#34; : \u0026#34;type\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;types_count\u0026#34;: { \u0026#34;value\u0026#34;: 7 } } } The name of the aggregation (types_count above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':18,'href':'/docs/references/collection/','title':"Collection",'section':"References",'content':"Collection # A \u0026ldquo;Collection\u0026rdquo; typically refers to a grouping or container for related data items in a database or similar data storage system. It can hold various types of data, such as documents, records, or other structured data elements. In the context of the previous discussion about namespaces and data types, a collection could contain documents, each representing a specific piece of information or record.\nCollection management # Collection APIs are used to manage individual collections and settings.\n Create a collection Delete a collection "});index.add({'id':19,'href':'/docs/getting-started/configuration/','title':"Configuration",'section':"Getting started",'content':"Configuration # Pizza supports several methods to overwrite the default configuration.\nCommand lines # ➜ ./bin/pizza --help A Distributed Real-Time Search \u0026amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log \u0026lt;LEVEL\u0026gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config \u0026lt;FILE\u0026gt; -p, --pid \u0026lt;FILE\u0026gt; Place pid to this file -E, --override \u0026lt;KEY=VALUE\u0026gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza.yaml configuration file:\n# ======================== INFINI Pizza Configuration ========================== # -------------------------------- Log ----------------------------------------- log: level: info # -------------------------------- API ----------------------------------------- api: logging: true network: binding: 127.0.0.1:9100 skip_occupied_port: true # -------------------------------- Cluster ------------------------------------- cluster: name: pizza node: name: my_node_1 network: binding: 127.0.0.1:8100 skip_occupied_port: true # -------------------------------- Storage ------------------------------------- storage: compression: ZSTD # -------------------------------- MemTable ------------------------------------ memtable: threshold: 1k max_num_of_instance: 2 allow_multi_instance: true Override configuration # You can tweak the configuration by passing the command line option -E with KEY=VALUE style during Pizza start:\n./bin/pizza -E log.level=trace -E api.network.binding=127.0.0.1:12200 "});index.add({'id':20,'href':'/docs/references/collection/delete/','title':"Delete a collection",'section':"Collection",'content':"Delete a collection # Delete a exists collection.\nExamples # The following request delete the collection called my-collection:\nDELETE my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path Parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. "});index.add({'id':21,'href':'/docs/references/namespace/delete/','title':"Delete a namespace",'section':"Namespace",'content':"Delete a namespace # Delete a exists namespace.\nExamples # The following request delete the namespace called website:\nDELETE /_namespace/website Request # DELETE /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Optional, string) The name of the namespace that you want to delete. "});index.add({'id':22,'href':'/docs/references/document/','title':"Document",'section':"References",'content':"Document # In Pizza, a document is a data structure composed of field-and-value pairs. It\u0026rsquo;s roughly equivalent to a row in a relational database table, but with a dynamic schema. Documents are the basic unit of data storage in Pizza, and collections are groupings of documents.\nEach document in Pizza is represented in JSON format, which is a lightweight data interchange format that is easy for humans to read and write and easy for machines to parse and generate.\nDocument management # Document APIs are used to manage documents.\n Create a document Fetch a document Replace a document Partial update a document Delete a document Batch document operation "});index.add({'id':23,'href':'/docs/references/','title':"References",'section':"Documentation",'content':"References # Data management # Namespace APIs Collection APIs Document APIs Search and analyze # Search you data Aggregations "});index.add({'id':24,'href':'/docs/administration/','title':"Administration",'section':"Documentation",'content':"Administration # Cluster management # Search and analyze # "});index.add({'id':25,'href':'/docs/release-notes/','title':"Release notes",'section':"Documentation",'content':"Release notes # Information about release notes of INFINI Pizza is provided here.\n0.1.0 # Breaking changes # Features # Bug fix # Improvements # "});index.add({'id':26,'href':'/docs/references/document/fetch/','title':"Fetch a document",'section':"Document",'content':"Fetch a document # Retrieve an existing document by specifying its unique identifier.\nExamples # Fetch a document from the my-collection collection with customized uuid news_001:\nGET /my-collection/_doc/news_001 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:\nGET /my-collection/_doc/0,0 Request # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. "});index.add({'id':27,'href':'/docs/references/document/replace/','title':"Replace a document",'section':"Document",'content':"Replace a document # Replace an existing document by specifying its unique identifier and the new content.\nExamples # Replace a document news_001 of the collection my-collection with new content:\nPUT /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} After the document modification, If you perform the fetch request:\nGET /my-collection/_doc/news_001 It returns an updated document like:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } Note that the document _version was increased to 2.\nPizza works by marking the old document as deleted and insert a new document under the hood.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':28,'href':'/docs/references/document/partial_update/','title':"Partial update a document",'section':"Document",'content':"Partial update a document # Sometimes we may only need to update a portion fields of the document.\nExamples # Update the org.id field of the document news_001 in the collection my-collection:\nPUT /my-collection/_doc/news_001/_update { \u0026#34;sync\u0026#34;:{ \u0026#34;replace\u0026#34;:{ \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt;/_update { \u0026#34;sync\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } \u0026#34;async\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } } Pizza support both sync and async way to perform the updates, in order to update in realtime, you need to use sync here.\nIn asynchronous mode, the update process is considered complete once the request is committed to the WAL. Background tasks independently consume and process updates asynchronously, making it suitable for scenarios prioritizing update efficiency.\nPath parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;operation\u0026gt; The operation supported by partial updates: add, replace, remove, array_append. \u0026lt;fields\u0026gt;\n(Required, string) The JSON format of the fields operation by partial updates. "});index.add({'id':29,'href':'/docs/references/document/delete/','title':"Delete a document",'section':"Document",'content':"Delete a document # Delete a specific document from the specified collection by specifying its unique identifier.\nExamples # Delete the document 0,0 from collection my-collection:\nDELETE /my-collection/_doc/0,0 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;deleted\u0026#34;, ... } Request # DELETE /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) Unique identifier for the document, support both _key or _id. "});index.add({'id':30,'href':'/docs/references/document/bulk/','title':"Batch document operation",'section':"Document",'content':"Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request.\nExamples # POST /_bulk { \u0026#34;index\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value1\u0026#34; } { \u0026#34;delete\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;2\u0026#34; } } { \u0026#34;create\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;3\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value3\u0026#34; } { \u0026#34;update\u0026#34; : {\u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34;, \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;} } { \u0026#34;doc\u0026#34; : {\u0026#34;field2\u0026#34; : \u0026#34;value2\u0026#34;} } The API returns the following result:\n{ \u0026#34;took\u0026#34;: 30, \u0026#34;errors\u0026#34;: false, \u0026#34;items\u0026#34;: [ { \u0026#34;index\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;delete\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;not_found\u0026#34;, ... } }, { \u0026#34;create\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;update\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;updated\u0026#34;, ... } } ] } Request # POST /_bulk POST /\u0026lt;target\u0026gt;/_bulk Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. Request body # The actions are specified in the request body using a newline delimited JSON (NDJSON) structure:\naction_and_meta_data\\n optional_source\\n action_and_meta_data\\n optional_source\\n .... action_and_meta_data\\n optional_source\\n The index and create actions expect a source on the next line, and have the same semantics as the standard API: create fails if a document with the same ID already exists in the target, index adds or replaces a document as necessary.\nupdate expects that the partial doc, upsert, and script and its options are specified on the next line.\ndelete does not expect a source on the next line and has the same semantics as the standard delete API.\nBecause this format uses literal \\n\u0026rsquo;s as delimiters, make sure that the JSON actions and sources are not pretty printed.\nIf you provide a \u0026lt;target\u0026gt; in the request path, it is used for any actions that don’t explicitly specify an _index argument.\ncreate # Indexes the specified document if it does not already exist. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. index # Indexes the specified document. If the document exists, replaces the document and increments the version. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. doc # The partial document to index. Required for update operations.\n\u0026lt;fields\u0026gt; # The document source to index. Required for create and index operations.\n"});index.add({'id':31,'href':'/docs/references/search/','title':"Search",'section':"References",'content':"Search # A search query, or query, is a request for information about documents in Pizza collections.\nA search consists of one or more queries that are combined and sent to Pizza. Documents that match a search\u0026rsquo;s queries are returned in the hits, or search results, of the response.\nA search may also contain additional information used to better process its queries. For example, a search may be limited to a specific collection or only return a specific number of results.\nExamples # Search all the collections under the default namespace whose names are ended with -logs, fetch the documents whose field year has value 2024:\nPOST /default.*-logs/_search { \u0026quot;query\u0026quot;: { \u0026quot;term\u0026quot;: { \u0026quot;year\u0026quot;: \u0026quot;2024\u0026quot; } } } Requests # POST /\u0026lt;targets\u0026gt;/_search Path parameters # targets\n(Optional, String) Comma-separated, names of the collection to search (wildcard supported) Query parameters # from\n(Optional, integer) How many documents to skip, should be non-negative and defaults to 0.\n size\n(Optional, integer) The maximun number of documents to be returned in hits, defaults to 20.\n Term-level queries # prefix query\nReturns documents that contain a specific prefix in a provided field. range query\nReturns documents that contain terms within a provided range. regexp query\nReturns documents that contain terms matching a regular expression. term query\nReturns documents that contain an exact term in a provided field. "});index.add({'id':32,'href':'/docs/references/aggregation/','title':"Aggregation",'section':"References",'content':"Aggregation # An aggregation summarizes your data as metrics, statistics, or other analytics.\nPizza organizes aggregations into the following categories:\n Metric aggregations that calculate metrics, such as a sum or average, from field values. Bucket aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. Metric aggregations # avg aggregation\nA single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. max aggregation\nA single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. min aggregation\nA single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. percentiles aggregation\nA multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. sum aggregation\nA single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. value_count aggregation\nA single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Bucket aggregations # date_histogram aggregation\nA histogram aggregation that can only be used with date or date range values. terms aggregation\nA multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. "});index.add({'id':33,'href':'/docs/community/','title':"Community",'section':"Documentation",'content':"Community hall of fame # The following acknowledges the Maintainers for the Pizza project, credits to those who have Contributed to this repository (via bug reports, code, design, ideas, project management, translation, testing, etc.), proactive advocates of pizza as Evangelists, and any other References utilized.\nMaintainers # Medcl(@medcl), SteveLauC, Loi Chyan(@loichyan)\nContributors # Evangelists # Adopters # Pizza community of adopters is growing! Innovative organizations of all sizes and across industry sectors are committed to accelerating the adoption of commercial-grade, production-ready open source technologies developed by the Pizza community.\nDo you use INFINI Pizza? Show your support for open source by adding your logo to this page.\nPlease create an issue to add your logo below.\nReferences # "});})(); \ No newline at end of file diff --git a/en.search-data.min.f01426de8634b9937aea3fe4b06b06c2d75630261202095a1ab9685fc15ab524.js b/en.search-data.min.f01426de8634b9937aea3fe4b06b06c2d75630261202095a1ab9685fc15ab524.js new file mode 100644 index 0000000..74b1424 --- /dev/null +++ b/en.search-data.min.f01426de8634b9937aea3fe4b06b06c2d75630261202095a1ab9685fc15ab524.js @@ -0,0 +1 @@ +'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/docs/references/aggregation/avg/','title':"Avg aggregation",'section':"Aggregation",'content':"Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with:\nPOST /exams/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;avg\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;grade\u0026#34; } } } } The above aggregation computes the average grade over all documents. The aggregation type is avg and the field setting defines the numeric field of the documents the average will be computed on. The above will return the following:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;value\u0026#34;: 75.0 } } } The name of the aggregation (avg_grade above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':1,'href':'/docs/references/collection/create/','title':"Create a collection",'section':"Collection",'content':"Create a collection # Creates a new collection.\nExamples # The following request creates a new collection called my-collection in the namespace my-namespace:\nPUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as:\nPUT /my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. Collection names must meet the same criteria as namespace names. "});index.add({'id':2,'href':'/docs/references/document/create/','title':"Create a document",'section':"Document",'content':"Create a document # Creates a new document.\nExamples # Insert a JSON document into the my-collection collection:\nPOST /my-collection/_doc { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } The API supports passing a customized UUID as the document identify, eg:\nPOST /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } Request # POST /\u0026lt;target\u0026gt;/_doc/[\u0026lt;doc_id\u0026gt;] {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Optional, string) The unique identify of the document, auto generated if not specified. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':3,'href':'/docs/references/namespace/create/','title':"Create a namespace",'section':"Namespace",'content':"Create a namespace # Creates a new namespace.\nExamples # If creating a website namespace, the following request creates a new namespace called website:\nPUT /_namespace/website Request # PUT /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) "});index.add({'id':4,'href':'/docs/references/aggregation/date-histogram/','title':"Date histogram aggregation",'section':"Aggregation",'content':"Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.\nExamples # As an example, here is an aggregation requesting bucket intervals of a month in calendar time:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;date_histogram\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;date\u0026#34;, \u0026#34;calendar_interval\u0026#34;: \u0026#34;1M\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: 1420070400000, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: 1422748800000, \u0026#34;doc_count\u0026#34;: 2 }, { \u0026#34;key\u0026#34;: 1425168000000, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for date_histogram # field\n(Required, string) Field you wish to aggregate. calendar_interval # (Optional, string) Calendar-aware intervals are configured with the calendar_interval parameter. You can specify calendar intervals using the unit name, such as month, or as a single unit quantity, such as 1M. For example, day and 1d are equivalent. Multiple quantities, such as 2d, are not supported.\nThe accepted calendar intervals are:\n minute, 1m\nAll minutes begin at 00 seconds. One minute is the interval between 00 seconds of the first minute and 00 seconds of the following minute in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. hour, 1h\nAll hours begin at 00 minutes and 00 seconds. One hour (1h) is the interval between 00:00 minutes of the first hour and 00:00 minutes of the following hour in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. day, 1d\nAll days begin at the earliest possible time, which is usually 00:00:00 (midnight). One day (1d) is the interval between the start of the day and the start of the following day in the specified time zone, compensating for any intervening time changes. week, 1w\nOne week is the interval between the start day_of_week:hour:minute:second and the same day of the week and time of the following week in the specified time zone. month, 1M\nOne month is the interval between the start day of the month and time of day and the same day of the month and time of the following month in the specified time zone, so that the day of the month and time of day are the same at the start and end. quarter, 1q\nOne quarter is the interval between the start day of the month and time of day and the same day of the month and time of day three months later, so that the day of the month and time of day are the same at the start and end. year, 1y\nOne year is the interval between the start day of the month and time of day and the same day of the month and time of day the following year in the specified time zone, so that the date and time are the same at the start and end. fixed_interval # Fixed intervals are configured with the fixed_interval parameter.\nIn contrast to calendar-aware intervals, fixed intervals are a fixed number of SI units and never deviate, regardless of where they fall on the calendar. One second is always composed of 1000ms. This allows fixed intervals to be specified in any multiple of the supported units.\nHowever, it means fixed intervals cannot express other units such as months, since the duration of a month is not a fixed quantity. Attempting to specify a calendar interval like month or quarter will throw an exception.\nThe accepted units for fixed intervals are:\n milliseconds (ms)\nA single millisecond. This is a very, very small interval. seconds (s)\nDefined as 1000 milliseconds each. minutes (m)\nDefined as 60 seconds each (60,000 milliseconds). All minutes begin at 00 seconds. hours (h)\nDefined as 60 minutes each (3,600,000 milliseconds). All hours begin at 00 minutes and 00 seconds. days (d)\nDefined as 24 hours (86,400,000 milliseconds). All days begin at the earliest possible time, which is usually 00:00:00 (midnight). "});index.add({'id':5,'href':'/docs/getting-started/installation/','title':"Installation",'section':"Getting started",'content':"Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies.\nAutomatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza:\ncurl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows:\n -v \u0026lt;version number\u0026gt; (default is the latest version) -d \u0026lt;installation directory\u0026gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:\nhttps://release.infinilabs.com/\nVerification of the installation # Assuming Pizza is in your $PATH after installation, run the following command to ensure the package has been installed correctly:\n$ pizza --version PIZZA 0.1.0 Starting the server # Start Pizza as follows with the configuration:\n$ pizza --config pizza.yaml ___ _____ __________ _ / _ \\\\_ \\/ _ / _ / /_\\ / /_)/ / /\\/\\// /\\// / //_\\\\ / ___/\\/ /_ / //\\/ //\\/ _ \\ \\/ \\____/ /____/____/\\_/ \\_/ [PIZZA] The Next-Gen Real-Time Hybrid Search \u0026amp; AI-Native Innovation Engine. ... Interaction with the server # Assuming Pizza is listening on 127.0.0.1:9200, use the following command to create a collection named testing:\ncurl -XPUT http://127.0.0.1:9200/testing Refer to the reference page for more APIs.\nShutdown the server # Press Ctrl+C to shut down Pizza, and the message below is displayed:\n... __ _ __ ____ __ _ __ __ / // |/ // __// // |/ // / / // || // _/ / // || // / /_//_/|_//_/ /_//_/|_//_/ ©INFINI.LTD, All Rights Reserved. "});index.add({'id':6,'href':'/docs/references/aggregation/max/','title':"Max aggregation",'section':"Aggregation",'content':"Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents.\nExamples # Computing the max price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;max\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;value\u0026#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':7,'href':'/docs/references/aggregation/min/','title':"Min aggregation",'section':"Aggregation",'content':"Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.\nExamples # Computing the min price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;min\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;value\u0026#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':8,'href':'/docs/references/namespace/','title':"Namespace",'section':"References",'content':"Namespace # Pizza supports a multi-tenant architecture, allowing different sets of data for various scenarios to be stored within a single engine. Each set is referred to as a namespace, and different namespaces can have distinct topologies and access permissions configured.\nUsually, there\u0026rsquo;s no need to set up an additional namespace, and the default namespace is default.\nWithin a namespace, there are several types of data:\n Collection, Docs: Collections of documents. Data: Source data, stored in columns layout. Index: Indexed data, built based on Data, optional. View: View data, composite views of data across collections. Namespace management # Namespace APIs are used to manage individual Namespace and settings.\n Create a namespace Delete a namespace "});index.add({'id':9,'href':'/docs/overview/','title':"Overview",'section':"Documentation",'content':"Overview # Introduction # INFINI Pizza is a distributed hybrid search database system. Our mission is to deliver real-time smart search experiences tailored for enterprises by fully harnessing the potential of modern hardware and the AI capability. We are committed to meeting the demands of high concurrency and high throughput in challenging environments, all while providing seamless and efficient search capabilities.\nFeatures # The Next-Gen Real-Time Search \u0026amp; AI-Native Innovation Engine Written in Rust.\n Major Features of Pizza:\n True Real-Time, get search results instantly after insertion, no need to refresh anymore. Support partial update in place, no longer pull and push back the entire document again. High performance, lightning fast with high throughput and low latency, hardware reduced. High scalability, supports very large-scale clusters, beyond petabytes. Native integration with LLMs and ML, empowering AI-Native enterprise innovation. Design with storage and computation separation, and also storage and index separation. Architecture # -- Pizza is building on top of these awesome projects:\n Rust Apache Arrow Arrow DataFusion Why Pizza # The name Pizza was taken from our unique sharding design.\nThe documents in Pizza are persisted as Parquet files in object storage. Native integration with other big data systems through object storage and the standard Parquet format.\nWhen to use Pizza # Pizza is good fit when:\n You have latency-sensitive search applications that millisecond matters. You need fresh data, your data is mutable, and you need fast queries. You need to handle high concurrency with complex queries. You need to handle more than petabytes data for user-facing use cases. You need to handle JOIN for complex data relations. You need to keep thousands of fields, but only a handful are subject to change. You need to manage both structured and unstructured data in a cohesive manner. Pizza is designed to address these problems at heart, to solve real critical business issues, serve your data-driven applications in realtime at very large scale. Enhance and enrich the data experiences of your end-users.\nDesign choices # The philosophy of Pizza is that indexes should be designed per use case, and should not attempt to fit every use case with a single index. Therefore, we introduced Views, which allow combining different document sources into a single index or separating a document into different layers of indexes for different use cases.\nBy emphasizes the decoupling of storage and computation, as well as the separation of storage and indexing. Which enables efficient and scalable data processing by allowing independent management and optimization of storage resources, computational resources, and indexing strategies.\nNative integration with LLMs (Language Models) and ML (Machine Learning) technologies is a key aspect of Pizza, providing powerful capabilities for AI-Native enterprise innovation. By seamlessly integrating with LLMs and ML frameworks, Pizza enables advanced natural language processing, machine learning, and data analytics directly within the search and data retrieval pipeline.\nWe are in the process of building the next-generation search infrastructure, driven by our unwavering commitment to delivering real-time search experiences for enterprises, unlocking the potential of modern hardware, and catering to the demands of high concurrency and high throughput in the most challenging of environments\nNext step # Install and configure Pizza.\n"});index.add({'id':10,'href':'/docs/references/aggregation/percentiles/','title':"Percentiles aggregation",'section':"Aggregation",'content':"Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents.\nPercentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values.\nPercentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean. Any data which falls outside three standard deviations is often considered an anomaly.\nWhen a range of percentiles are retrieved, they can be used to estimate the data distribution and determine if the data is skewed, bimodal, etc.\nExamples # Assume your data consists of website load times. The average and median load times are not overly useful to an administrator. The max may be interesting, but it can be easily skewed by a single slow response.\nLet\u0026rsquo;s look at a range of percentiles representing load time:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34; } } } } By default, the percentile metric will generate a range of percentiles: [1, 5, 25, 50, 75, 95, 99]. The response will look like this:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: { \u0026#34;1.0\u0026#34;: 10.0, \u0026#34;5.0\u0026#34;: 30.0, \u0026#34;25.0\u0026#34;: 170.0, \u0026#34;50.0\u0026#34;: 445.0, \u0026#34;75.0\u0026#34;: 720.0, \u0026#34;95.0\u0026#34;: 940.0, \u0026#34;99.0\u0026#34;: 980.0 } } } } As you can see, the aggregation will return a calculated value for each percentile in the default range. If we assume response times are in milliseconds, it is immediately obvious that the webpage normally loads in 10-725ms, but occasionally spikes to 945-985ms.\nOften, administrators are only interested in outliers — the extreme percentiles. We can specify just the percents we are interested in (requested percentiles must be a value between 0-100 inclusive):\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;percents\u0026#34;: [95, 99, 99.9] } } } } Parameters for avg # field\n(Required, string) Field you wish to aggregate. percents\n(Optional, array) A range of percentiles that are calculated. Default is [1, 5, 25, 50, 75, 95, 99]. keyed # By default the keyed flag is set to true which associates a unique string key with each bucket and returns the ranges as a hash rather than an array. Setting the keyed flag to false will disable this behavior:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;keyed\u0026#34;: false } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: [ { \u0026#34;key\u0026#34;: 1.0, \u0026#34;value\u0026#34;: 10.0 }, { \u0026#34;key\u0026#34;: 5.0, \u0026#34;value\u0026#34;: 30.0 }, { \u0026#34;key\u0026#34;: 25.0, \u0026#34;value\u0026#34;: 170.0 }, { \u0026#34;key\u0026#34;: 50.0, \u0026#34;value\u0026#34;: 445.0 }, { \u0026#34;key\u0026#34;: 75.0, \u0026#34;value\u0026#34;: 720.0 }, { \u0026#34;key\u0026#34;: 95.0, \u0026#34;value\u0026#34;: 940.0 }, { \u0026#34;key\u0026#34;: 99.0, \u0026#34;value\u0026#34;: 980.0 } ] } } } "});index.add({'id':11,'href':'/docs/references/search/prefix/','title':"Prefix query",'section':"Search",'content':"Prefix query # Returns documents that contain a specific prefix in a provided field.\nExamples # The following search returns documents where the org.id field contains a term that begins with inf.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;prefix\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;inf\u0026#34; } } } } Top-level parameters for prefix # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Beginning characters of terms you wish to find in the provided \u0026lt;field\u0026gt;. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':12,'href':'/docs/references/search/range/','title':"Range query",'section':"Search",'content':"Range query # Returns documents that contain terms within a provided range.\nExamples # The following search returns documents where the age field contains a term between 10 and 20.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;range\u0026#34;: { \u0026#34;age\u0026#34;: { \u0026#34;gte\u0026#34;: 10, \u0026#34;lte\u0026#34;: 20 } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # gt\n(Optional) Greater than. gte\n(Optional) Greater than or equal to. lt\n(Optional) Less than. lte\n(Optional) Less than or equal to. "});index.add({'id':13,'href':'/docs/references/search/regexp/','title':"Regexp query",'section':"Search",'content':"Regexp query # Returns documents that contain terms matching a regular expression.\nA regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax.\nExamples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters. Matching terms can include ini, inni, and infini.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;regexp\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;in.*i\u0026#34;, \u0026#34;case_insensitive\u0026#34;: true } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Regular expression for terms you wish to find in the provided \u0026lt;field\u0026gt;. For a list of supported operators, see Regular expression syntax. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':14,'href':'/docs/references/aggregation/sum/','title':"Sum aggregation",'section':"Aggregation",'content':"Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;query\u0026#34;: { \u0026#34;constant_score\u0026#34;: { \u0026#34;filter\u0026#34;: { \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;hat\u0026#34; } } } }, \u0026#34;aggs\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;sum\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Resulting in:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;value\u0026#34;: 450.0 } } } The name of the aggregation (hat_prices above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':15,'href':'/docs/references/search/term/','title':"Term query",'section':"Search",'content':"Term query # Returns documents that contain an exact term in a provided field.\nYou can use the term query to find documents based on a precise value such as a price, a product ID, or a username.\nExamples # GET /_search { \u0026#34;query\u0026#34;: { \u0026#34;term\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;infini\u0026#34; } } } } Top-level parameters for term # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Term you wish to find in the provided \u0026lt;field\u0026gt;. To return a document, the term must exactly match the field value, including whitespace and capitalization. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':16,'href':'/docs/references/aggregation/terms/','title':"Terms aggregation",'section':"Aggregation",'content':"Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value.\nExamples # POST /_search { \u0026#34;aggs\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;terms\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;genre\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;doc_count_error_upper_bound\u0026#34;: 0, \u0026#34;sum_other_doc_count\u0026#34;: 0, \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: \u0026#34;electronic\u0026#34;, \u0026#34;doc_count\u0026#34;: 6 }, { \u0026#34;key\u0026#34;: \u0026#34;rock\u0026#34;, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: \u0026#34;jazz\u0026#34;, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for terms # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':17,'href':'/docs/references/aggregation/value-count/','title':"Value count aggregation",'section':"Aggregation",'content':"Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over.\nvalue_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;aggs\u0026#34; : { \u0026#34;types_count\u0026#34; : { \u0026#34;value_count\u0026#34; : { \u0026#34;field\u0026#34; : \u0026#34;type\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;types_count\u0026#34;: { \u0026#34;value\u0026#34;: 7 } } } The name of the aggregation (types_count above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':18,'href':'/docs/references/collection/','title':"Collection",'section':"References",'content':"Collection # A \u0026ldquo;Collection\u0026rdquo; typically refers to a grouping or container for related data items in a database or similar data storage system. It can hold various types of data, such as documents, records, or other structured data elements. In the context of the previous discussion about namespaces and data types, a collection could contain documents, each representing a specific piece of information or record.\nCollection management # Collection APIs are used to manage individual collections and settings.\n Create a collection Delete a collection "});index.add({'id':19,'href':'/docs/getting-started/configuration/','title':"Configuration",'section':"Getting started",'content':"Configuration # Pizza supports several methods to overwrite the default configuration.\nCommand lines # ➜ ./bin/pizza --help A Distributed Real-Time Search \u0026amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log \u0026lt;LEVEL\u0026gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config \u0026lt;FILE\u0026gt; -p, --pid \u0026lt;FILE\u0026gt; Place pid to this file -E, --override \u0026lt;KEY=VALUE\u0026gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza.yaml configuration file:\n# ======================== INFINI Pizza Configuration ========================== # -------------------------------- Log ----------------------------------------- log: level: info # -------------------------------- API ----------------------------------------- api: logging: true network: binding: 127.0.0.1:9100 skip_occupied_port: true # -------------------------------- Cluster ------------------------------------- cluster: name: pizza node: name: my_node_1 network: binding: 127.0.0.1:8100 skip_occupied_port: true # -------------------------------- Storage ------------------------------------- storage: compression: ZSTD # -------------------------------- MemTable ------------------------------------ memtable: threshold: 1k max_num_of_instance: 2 allow_multi_instance: true Override configuration # You can tweak the configuration by passing the command line option -E with KEY=VALUE style during Pizza start:\n./bin/pizza -E log.level=trace -E api.network.binding=127.0.0.1:12200 "});index.add({'id':20,'href':'/docs/references/collection/delete/','title':"Delete a collection",'section':"Collection",'content':"Delete a collection # Delete a exists collection.\nExamples # The following request delete the collection called my-collection:\nDELETE my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path Parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. "});index.add({'id':21,'href':'/docs/references/namespace/delete/','title':"Delete a namespace",'section':"Namespace",'content':"Delete a namespace # Delete a exists namespace.\nExamples # The following request delete the namespace called website:\nDELETE /_namespace/website Request # DELETE /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Optional, string) The name of the namespace that you want to delete. "});index.add({'id':22,'href':'/docs/references/document/','title':"Document",'section':"References",'content':"Document # In Pizza, a document is a data structure composed of field-and-value pairs. It\u0026rsquo;s roughly equivalent to a row in a relational database table, but with a dynamic schema. Documents are the basic unit of data storage in Pizza, and collections are groupings of documents.\nEach document in Pizza is represented in JSON format, which is a lightweight data interchange format that is easy for humans to read and write and easy for machines to parse and generate.\nDocument management # Document APIs are used to manage documents.\n Create a document Fetch a document Replace a document Partial update a document Delete a document Batch document operation "});index.add({'id':23,'href':'/docs/references/','title':"References",'section':"Documentation",'content':"References # Data management # Namespace APIs Collection APIs Document APIs Search and analyze # Search you data Aggregations "});index.add({'id':24,'href':'/docs/administration/','title':"Administration",'section':"Documentation",'content':"Administration # Cluster management # Search and analyze # "});index.add({'id':25,'href':'/docs/release-notes/','title':"Release notes",'section':"Documentation",'content':"Release notes # Information about release notes of INFINI Pizza is provided here.\n0.1.0 # Breaking changes # Features # Bug fix # Improvements # "});index.add({'id':26,'href':'/docs/references/document/fetch/','title':"Fetch a document",'section':"Document",'content':"Fetch a document # Retrieve an existing document by specifying its unique identifier.\nExamples # Fetch a document from the my-collection collection with customized uuid news_001:\nGET /my-collection/_doc/news_001 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;_version\u0026#34; : 1, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:\nGET /my-collection/_doc/0,0 Request # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. "});index.add({'id':27,'href':'/docs/references/document/replace/','title':"Replace a document",'section':"Document",'content':"Replace a document # Replace an existing document by specifying its unique identifier and the new content.\nExamples # Replace a document news_001 of the collection my-collection with new content:\nPUT /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} After the document modification, If you perform the fetch request:\nGET /my-collection/_doc/news_001 It returns an updated document like:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;_version\u0026#34; : 2, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } Note that the document _version was increased to 2.\nPizza works by marking the old document as deleted and insert a new document under the hood.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':28,'href':'/docs/references/document/partial_update/','title':"Partial update a document",'section':"Document",'content':"Partial update a document # Sometimes we may only need to update a portion fields of the document.\nExamples # Update the org.id field of the document news_001 in the collection my-collection:\nPUT /my-collection/_doc/news_001/_update { \u0026#34;sync\u0026#34;:{ \u0026#34;replace\u0026#34;:{ \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt;/_update { \u0026#34;sync\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } \u0026#34;async\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } } Pizza support both sync and async way to perform the updates, in order to update in realtime, you need to use sync here.\nIn asynchronous mode, the update process is considered complete once the request is committed to the WAL. Background tasks independently consume and process updates asynchronously, making it suitable for scenarios prioritizing update efficiency.\nPath parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;operation\u0026gt; The operation supported by partial updates: add, replace, remove, array_append. \u0026lt;fields\u0026gt;\n(Required, string) The JSON format of the fields operation by partial updates. "});index.add({'id':29,'href':'/docs/references/document/delete/','title':"Delete a document",'section':"Document",'content':"Delete a document # Delete a specific document from the specified collection by specifying its unique identifier.\nExamples # Delete the document 1 from collection my-collection:\nDELETE /my-collection/_doc/0,0 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;result\u0026#34;: \u0026#34;deleted\u0026#34;, ... } Request # DELETE /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) Unique identifier for the document, support both _key or _id. "});index.add({'id':30,'href':'/docs/references/document/bulk/','title':"Batch document operation",'section':"Document",'content':"Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request.\nExamples # POST /_bulk { \u0026#34;index\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value1\u0026#34; } { \u0026#34;delete\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;2\u0026#34; } } { \u0026#34;create\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;3\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value3\u0026#34; } { \u0026#34;update\u0026#34; : {\u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34;, \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;} } { \u0026#34;doc\u0026#34; : {\u0026#34;field2\u0026#34; : \u0026#34;value2\u0026#34;} } The API returns the following result:\n{ \u0026#34;took\u0026#34;: 30, \u0026#34;errors\u0026#34;: false, \u0026#34;items\u0026#34;: [ { \u0026#34;index\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;delete\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;not_found\u0026#34;, ... } }, { \u0026#34;create\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;update\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;updated\u0026#34;, ... } } ] } Request # POST /_bulk POST /\u0026lt;target\u0026gt;/_bulk Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. Request body # The actions are specified in the request body using a newline delimited JSON (NDJSON) structure:\naction_and_meta_data\\n optional_source\\n action_and_meta_data\\n optional_source\\n .... action_and_meta_data\\n optional_source\\n The index and create actions expect a source on the next line, and have the same semantics as the standard API: create fails if a document with the same ID already exists in the target, index adds or replaces a document as necessary.\nupdate expects that the partial doc, upsert, and script and its options are specified on the next line.\ndelete does not expect a source on the next line and has the same semantics as the standard delete API.\nBecause this format uses literal \\n\u0026rsquo;s as delimiters, make sure that the JSON actions and sources are not pretty printed.\nIf you provide a \u0026lt;target\u0026gt; in the request path, it is used for any actions that don’t explicitly specify an _index argument.\ncreate # Indexes the specified document if it does not already exist. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. index # Indexes the specified document. If the document exists, replaces the document and increments the version. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. doc # The partial document to index. Required for update operations.\n\u0026lt;fields\u0026gt; # The document source to index. Required for create and index operations.\n"});index.add({'id':31,'href':'/docs/references/search/','title':"Search",'section':"References",'content':"Search # A search query, or query, is a request for information about documents in Pizza collections.\nA search consists of one or more queries that are combined and sent to Pizza. Documents that match a search\u0026rsquo;s queries are returned in the hits, or search results, of the response.\nA search may also contain additional information used to better process its queries. For example, a search may be limited to a specific collection or only return a specific number of results.\nTerm-level queries # prefix query\nReturns documents that contain a specific prefix in a provided field. range query\nReturns documents that contain terms within a provided range. regexp query\nReturns documents that contain terms matching a regular expression. term query\nReturns documents that contain an exact term in a provided field. "});index.add({'id':32,'href':'/docs/references/aggregation/','title':"Aggregation",'section':"References",'content':"Aggregation # An aggregation summarizes your data as metrics, statistics, or other analytics.\nPizza organizes aggregations into the following categories:\n Metric aggregations that calculate metrics, such as a sum or average, from field values. Bucket aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. Metric aggregations # avg aggregation\nA single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. max aggregation\nA single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. min aggregation\nA single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. percentiles aggregation\nA multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. sum aggregation\nA single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. value_count aggregation\nA single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Bucket aggregations # date_histogram aggregation\nA histogram aggregation that can only be used with date or date range values. terms aggregation\nA multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. "});index.add({'id':33,'href':'/docs/community/','title':"Community",'section':"Documentation",'content':"Community hall of fame # The following acknowledges the Maintainers for the Pizza project, credits to those who have Contributed to this repository (via bug reports, code, design, ideas, project management, translation, testing, etc.), proactive advocates of pizza as Evangelists, and any other References utilized.\nMaintainers # Medcl(@medcl), SteveLauC, Loi Chyan(@loichyan)\nContributors # Evangelists # Adopters # Pizza community of adopters is growing! Innovative organizations of all sizes and across industry sectors are committed to accelerating the adoption of commercial-grade, production-ready open source technologies developed by the Pizza community.\nDo you use INFINI Pizza? Show your support for open source by adding your logo to this page.\nPlease create an issue to add your logo below.\nReferences # "});})(); \ No newline at end of file diff --git a/en.search-data.min.fad7ab67520a5317f59227a6ce5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js b/en.search-data.min.fad7ab67520a5317f59227a6ce5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js new file mode 100644 index 0000000..2f1e0d6 --- /dev/null +++ b/en.search-data.min.fad7ab67520a5317f59227a6ce5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js @@ -0,0 +1 @@ +'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/docs/references/aggregation/avg/','title':"Avg aggregation",'section':"Aggregation",'content':"Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with:\nPOST /exams/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;avg\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;grade\u0026#34; } } } } The above aggregation computes the average grade over all documents. The aggregation type is avg and the field setting defines the numeric field of the documents the average will be computed on. The above will return the following:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;avg_grade\u0026#34;: { \u0026#34;value\u0026#34;: 75.0 } } } The name of the aggregation (avg_grade above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':1,'href':'/docs/references/collection/create/','title':"Create a collection",'section':"Collection",'content':"Create a collection # Creates a new collection.\nExamples # The following request creates a new collection called my-collection in the namespace my-namespace:\nPUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as:\nPUT /my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. Collection names must meet the same criteria as namespace names. "});index.add({'id':2,'href':'/docs/references/document/create/','title':"Create a document",'section':"Document",'content':"Create a document # Creates a new document.\nExamples # Insert a JSON document into the my-collection collection:\nPOST /my-collection/_doc { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } The API supports passing a customized UUID as the document identify, eg:\nPOST /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } Request # POST /\u0026lt;target\u0026gt;/_doc/[\u0026lt;doc_id\u0026gt;] {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Optional, string) The unique identify of the document, auto generated if not specified. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':3,'href':'/docs/references/namespace/create/','title':"Create a namespace",'section':"Namespace",'content':"Create a namespace # Creates a new namespace.\nExamples # If creating a website namespace, the following request creates a new namespace called website:\nPUT /_namespace/website Request # PUT /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \\ /, *, ?, \u0026quot;, \u0026lt;, \u0026gt;, |, , ,, # Cannot start with -, _, + Cannot be . or .. Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster) "});index.add({'id':4,'href':'/docs/references/aggregation/date-histogram/','title':"Date histogram aggregation",'section':"Aggregation",'content':"Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.\nExamples # As an example, here is an aggregation requesting bucket intervals of a month in calendar time:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;date_histogram\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;date\u0026#34;, \u0026#34;calendar_interval\u0026#34;: \u0026#34;1M\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;sales_over_time\u0026#34;: { \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: 1420070400000, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: 1422748800000, \u0026#34;doc_count\u0026#34;: 2 }, { \u0026#34;key\u0026#34;: 1425168000000, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for date_histogram # field\n(Required, string) Field you wish to aggregate. calendar_interval # (Optional, string) Calendar-aware intervals are configured with the calendar_interval parameter. You can specify calendar intervals using the unit name, such as month, or as a single unit quantity, such as 1M. For example, day and 1d are equivalent. Multiple quantities, such as 2d, are not supported.\nThe accepted calendar intervals are:\n minute, 1m\nAll minutes begin at 00 seconds. One minute is the interval between 00 seconds of the first minute and 00 seconds of the following minute in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. hour, 1h\nAll hours begin at 00 minutes and 00 seconds. One hour (1h) is the interval between 00:00 minutes of the first hour and 00:00 minutes of the following hour in the specified time zone, compensating for any intervening leap seconds, so that the number of minutes and seconds past the hour is the same at the start and end. day, 1d\nAll days begin at the earliest possible time, which is usually 00:00:00 (midnight). One day (1d) is the interval between the start of the day and the start of the following day in the specified time zone, compensating for any intervening time changes. week, 1w\nOne week is the interval between the start day_of_week:hour:minute:second and the same day of the week and time of the following week in the specified time zone. month, 1M\nOne month is the interval between the start day of the month and time of day and the same day of the month and time of the following month in the specified time zone, so that the day of the month and time of day are the same at the start and end. quarter, 1q\nOne quarter is the interval between the start day of the month and time of day and the same day of the month and time of day three months later, so that the day of the month and time of day are the same at the start and end. year, 1y\nOne year is the interval between the start day of the month and time of day and the same day of the month and time of day the following year in the specified time zone, so that the date and time are the same at the start and end. fixed_interval # Fixed intervals are configured with the fixed_interval parameter.\nIn contrast to calendar-aware intervals, fixed intervals are a fixed number of SI units and never deviate, regardless of where they fall on the calendar. One second is always composed of 1000ms. This allows fixed intervals to be specified in any multiple of the supported units.\nHowever, it means fixed intervals cannot express other units such as months, since the duration of a month is not a fixed quantity. Attempting to specify a calendar interval like month or quarter will throw an exception.\nThe accepted units for fixed intervals are:\n milliseconds (ms)\nA single millisecond. This is a very, very small interval. seconds (s)\nDefined as 1000 milliseconds each. minutes (m)\nDefined as 60 seconds each (60,000 milliseconds). All minutes begin at 00 seconds. hours (h)\nDefined as 60 minutes each (3,600,000 milliseconds). All hours begin at 00 minutes and 00 seconds. days (d)\nDefined as 24 hours (86,400,000 milliseconds). All days begin at the earliest possible time, which is usually 00:00:00 (midnight). "});index.add({'id':5,'href':'/docs/getting-started/installation/','title':"Installation",'section':"Getting started",'content':"Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies.\nAutomatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza:\ncurl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows:\n -v \u0026lt;version number\u0026gt; (default is the latest version) -d \u0026lt;installation directory\u0026gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:\nhttps://release.infinilabs.com/\nVerification of the installation # Assuming Pizza is in your $PATH after installation, run the following command to ensure the package has been installed correctly:\n$ pizza --version PIZZA 0.1.0 Starting the server # Start Pizza as follows with the configuration:\n$ pizza --config pizza.yaml ___ _____ __________ _ / _ \\\\_ \\/ _ / _ / /_\\ / /_)/ / /\\/\\// /\\// / //_\\\\ / ___/\\/ /_ / //\\/ //\\/ _ \\ \\/ \\____/ /____/____/\\_/ \\_/ [PIZZA] The Next-Gen Real-Time Hybrid Search \u0026amp; AI-Native Innovation Engine. ... Interaction with the server # Assuming Pizza is listening on 127.0.0.1:9200, use the following command to create a collection named testing:\ncurl -XPUT http://127.0.0.1:9200/testing Refer to the reference page for more APIs.\nShutdown the server # Press Ctrl+C to shut down Pizza, and the message below is displayed:\n... __ _ __ ____ __ _ __ __ / // |/ // __// // |/ // / / // || // _/ / // || // / /_//_/|_//_/ /_//_/|_//_/ ©INFINI.LTD, All Rights Reserved. "});index.add({'id':6,'href':'/docs/references/aggregation/max/','title':"Max aggregation",'section':"Aggregation",'content':"Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents.\nExamples # Computing the max price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;max\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;max_price\u0026#34;: { \u0026#34;value\u0026#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':7,'href':'/docs/references/aggregation/min/','title':"Min aggregation",'section':"Aggregation",'content':"Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.\nExamples # Computing the min price value across all documents:\nPOST /sales/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;min\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;min_price\u0026#34;: { \u0026#34;value\u0026#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':8,'href':'/docs/references/namespace/','title':"Namespace",'section':"References",'content':"Namespace # Pizza supports a multi-tenant architecture, allowing different sets of data for various scenarios to be stored within a single engine. Each set is referred to as a namespace, and different namespaces can have distinct topologies and access permissions configured.\nUsually, there\u0026rsquo;s no need to set up an additional namespace, and the default namespace is default.\nWithin a namespace, there are several types of data:\n Collection, Docs: Collections of documents. Data: Source data, stored in columns layout. Index: Indexed data, built based on Data, optional. View: View data, composite views of data across collections. Namespace management # Namespace APIs are used to manage individual Namespace and settings.\n Create a namespace Delete a namespace "});index.add({'id':9,'href':'/docs/overview/','title':"Overview",'section':"Documentation",'content':"Overview # Introduction # INFINI Pizza is a distributed hybrid search database system. Our mission is to deliver real-time smart search experiences tailored for enterprises by fully harnessing the potential of modern hardware and the AI capability. We are committed to meeting the demands of high concurrency and high throughput in challenging environments, all while providing seamless and efficient search capabilities.\nFeatures # The Next-Gen Real-Time Search \u0026amp; AI-Native Innovation Engine Written in Rust.\n Major Features of Pizza:\n True Real-Time, get search results instantly after insertion, no need to refresh anymore. Support partial update in place, no longer pull and push back the entire document again. High performance, lightning fast with high throughput and low latency, hardware reduced. High scalability, supports very large-scale clusters, beyond petabytes. Native integration with LLMs and ML, empowering AI-Native enterprise innovation. Design with storage and computation separation, and also storage and index separation. Architecture # -- Pizza is building on top of these awesome projects:\n Rust Apache Arrow Arrow DataFusion Why Pizza # The name Pizza was taken from our unique sharding design.\nThe documents in Pizza are persisted as Parquet files in object storage. Native integration with other big data systems through object storage and the standard Parquet format.\nWhen to use Pizza # Pizza is good fit when:\n You have latency-sensitive search applications that millisecond matters. You need fresh data, your data is mutable, and you need fast queries. You need to handle high concurrency with complex queries. You need to handle more than petabytes data for user-facing use cases. You need to handle JOIN for complex data relations. You need to keep thousands of fields, but only a handful are subject to change. You need to manage both structured and unstructured data in a cohesive manner. Pizza is designed to address these problems at heart, to solve real critical business issues, serve your data-driven applications in realtime at very large scale. Enhance and enrich the data experiences of your end-users.\nDesign choices # The philosophy of Pizza is that indexes should be designed per use case, and should not attempt to fit every use case with a single index. Therefore, we introduced Views, which allow combining different document sources into a single index or separating a document into different layers of indexes for different use cases.\nBy emphasizes the decoupling of storage and computation, as well as the separation of storage and indexing. Which enables efficient and scalable data processing by allowing independent management and optimization of storage resources, computational resources, and indexing strategies.\nNative integration with LLMs (Language Models) and ML (Machine Learning) technologies is a key aspect of Pizza, providing powerful capabilities for AI-Native enterprise innovation. By seamlessly integrating with LLMs and ML frameworks, Pizza enables advanced natural language processing, machine learning, and data analytics directly within the search and data retrieval pipeline.\nWe are in the process of building the next-generation search infrastructure, driven by our unwavering commitment to delivering real-time search experiences for enterprises, unlocking the potential of modern hardware, and catering to the demands of high concurrency and high throughput in the most challenging of environments\nNext step # Install and configure Pizza.\n"});index.add({'id':10,'href':'/docs/references/aggregation/percentiles/','title':"Percentiles aggregation",'section':"Aggregation",'content':"Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents.\nPercentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values.\nPercentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean. Any data which falls outside three standard deviations is often considered an anomaly.\nWhen a range of percentiles are retrieved, they can be used to estimate the data distribution and determine if the data is skewed, bimodal, etc.\nExamples # Assume your data consists of website load times. The average and median load times are not overly useful to an administrator. The max may be interesting, but it can be easily skewed by a single slow response.\nLet\u0026rsquo;s look at a range of percentiles representing load time:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34; } } } } By default, the percentile metric will generate a range of percentiles: [1, 5, 25, 50, 75, 95, 99]. The response will look like this:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: { \u0026#34;1.0\u0026#34;: 10.0, \u0026#34;5.0\u0026#34;: 30.0, \u0026#34;25.0\u0026#34;: 170.0, \u0026#34;50.0\u0026#34;: 445.0, \u0026#34;75.0\u0026#34;: 720.0, \u0026#34;95.0\u0026#34;: 940.0, \u0026#34;99.0\u0026#34;: 980.0 } } } } As you can see, the aggregation will return a calculated value for each percentile in the default range. If we assume response times are in milliseconds, it is immediately obvious that the webpage normally loads in 10-725ms, but occasionally spikes to 945-985ms.\nOften, administrators are only interested in outliers — the extreme percentiles. We can specify just the percents we are interested in (requested percentiles must be a value between 0-100 inclusive):\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;percents\u0026#34;: [95, 99, 99.9] } } } } Parameters for avg # field\n(Required, string) Field you wish to aggregate. percents\n(Optional, array) A range of percentiles that are calculated. Default is [1, 5, 25, 50, 75, 95, 99]. keyed # By default the keyed flag is set to true which associates a unique string key with each bucket and returns the ranges as a hash rather than an array. Setting the keyed flag to false will disable this behavior:\nPOST latency/_search { \u0026#34;aggs\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;percentiles\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;load_time\u0026#34;, \u0026#34;keyed\u0026#34;: false } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;load_time_outlier\u0026#34;: { \u0026#34;values\u0026#34;: [ { \u0026#34;key\u0026#34;: 1.0, \u0026#34;value\u0026#34;: 10.0 }, { \u0026#34;key\u0026#34;: 5.0, \u0026#34;value\u0026#34;: 30.0 }, { \u0026#34;key\u0026#34;: 25.0, \u0026#34;value\u0026#34;: 170.0 }, { \u0026#34;key\u0026#34;: 50.0, \u0026#34;value\u0026#34;: 445.0 }, { \u0026#34;key\u0026#34;: 75.0, \u0026#34;value\u0026#34;: 720.0 }, { \u0026#34;key\u0026#34;: 95.0, \u0026#34;value\u0026#34;: 940.0 }, { \u0026#34;key\u0026#34;: 99.0, \u0026#34;value\u0026#34;: 980.0 } ] } } } "});index.add({'id':11,'href':'/docs/references/search/prefix/','title':"Prefix query",'section':"Search",'content':"Prefix query # Returns documents that contain a specific prefix in a provided field.\nExamples # The following search returns documents where the org.id field contains a term that begins with inf.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;prefix\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;inf\u0026#34; } } } } Top-level parameters for prefix # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Beginning characters of terms you wish to find in the provided \u0026lt;field\u0026gt;. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':12,'href':'/docs/references/search/range/','title':"Range query",'section':"Search",'content':"Range query # Returns documents that contain terms within a provided range.\nExamples # The following search returns documents where the age field contains a term between 10 and 20.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;range\u0026#34;: { \u0026#34;age\u0026#34;: { \u0026#34;gte\u0026#34;: 10, \u0026#34;lte\u0026#34;: 20 } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # gt\n(Optional) Greater than. gte\n(Optional) Greater than or equal to. lt\n(Optional) Less than. lte\n(Optional) Less than or equal to. "});index.add({'id':13,'href':'/docs/references/search/regexp/','title':"Regexp query",'section':"Search",'content':"Regexp query # Returns documents that contain terms matching a regular expression.\nA regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax.\nExamples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters. Matching terms can include ini, inni, and infini.\nGET /_search { \u0026#34;query\u0026#34;: { \u0026#34;regexp\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;in.*i\u0026#34;, \u0026#34;case_insensitive\u0026#34;: true } } } } Top-level parameters for range # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Regular expression for terms you wish to find in the provided \u0026lt;field\u0026gt;. For a list of supported operators, see Regular expression syntax. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':14,'href':'/docs/references/aggregation/sum/','title':"Sum aggregation",'section':"Aggregation",'content':"Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;query\u0026#34;: { \u0026#34;constant_score\u0026#34;: { \u0026#34;filter\u0026#34;: { \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;hat\u0026#34; } } } }, \u0026#34;aggs\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;sum\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;price\u0026#34; } } } } Resulting in:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;hat_prices\u0026#34;: { \u0026#34;value\u0026#34;: 450.0 } } } The name of the aggregation (hat_prices above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':15,'href':'/docs/references/search/term/','title':"Term query",'section':"Search",'content':"Term query # Returns documents that contain an exact term in a provided field.\nYou can use the term query to find documents based on a precise value such as a price, a product ID, or a username.\nExamples # GET /_search { \u0026#34;query\u0026#34;: { \u0026#34;term\u0026#34;: { \u0026#34;org.id\u0026#34;: { \u0026#34;value\u0026#34;: \u0026#34;infini\u0026#34; } } } } Top-level parameters for term # \u0026lt;field\u0026gt;\n(Required, object) Field you wish to search. Parameters for \u0026lt;field\u0026gt; # value\n(Required, string) Term you wish to find in the provided \u0026lt;field\u0026gt;. To return a document, the term must exactly match the field value, including whitespace and capitalization. case_insensitive\n(Optional, Boolean) Allows ASCII case insensitive matching of the value with the indexed field values when set to true. Default is false. "});index.add({'id':16,'href':'/docs/references/aggregation/terms/','title':"Terms aggregation",'section':"Aggregation",'content':"Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value.\nExamples # POST /_search { \u0026#34;aggs\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;terms\u0026#34;: { \u0026#34;field\u0026#34;: \u0026#34;genre\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;genres\u0026#34;: { \u0026#34;doc_count_error_upper_bound\u0026#34;: 0, \u0026#34;sum_other_doc_count\u0026#34;: 0, \u0026#34;buckets\u0026#34;: [ { \u0026#34;key\u0026#34;: \u0026#34;electronic\u0026#34;, \u0026#34;doc_count\u0026#34;: 6 }, { \u0026#34;key\u0026#34;: \u0026#34;rock\u0026#34;, \u0026#34;doc_count\u0026#34;: 3 }, { \u0026#34;key\u0026#34;: \u0026#34;jazz\u0026#34;, \u0026#34;doc_count\u0026#34;: 2 } ] } } } Parameters for terms # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':17,'href':'/docs/references/aggregation/value-count/','title':"Value count aggregation",'section':"Aggregation",'content':"Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over.\nvalue_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually.\nExamples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with:\nPOST /sales/_search { \u0026#34;aggs\u0026#34; : { \u0026#34;types_count\u0026#34; : { \u0026#34;value_count\u0026#34; : { \u0026#34;field\u0026#34; : \u0026#34;type\u0026#34; } } } } Response:\n{ ... \u0026#34;aggregations\u0026#34;: { \u0026#34;types_count\u0026#34;: { \u0026#34;value\u0026#34;: 7 } } } The name of the aggregation (types_count above) also serves as the key by which the aggregation result can be retrieved from the returned response.\nParameters for avg # field\n(Required, string) Field you wish to aggregate. "});index.add({'id':18,'href':'/docs/references/collection/','title':"Collection",'section':"References",'content':"Collection # A \u0026ldquo;Collection\u0026rdquo; typically refers to a grouping or container for related data items in a database or similar data storage system. It can hold various types of data, such as documents, records, or other structured data elements. In the context of the previous discussion about namespaces and data types, a collection could contain documents, each representing a specific piece of information or record.\nCollection management # Collection APIs are used to manage individual collections and settings.\n Create a collection Delete a collection "});index.add({'id':19,'href':'/docs/getting-started/configuration/','title':"Configuration",'section':"Getting started",'content':"Configuration # Pizza supports several methods to overwrite the default configuration.\nCommand lines # ➜ ./bin/pizza --help A Distributed Real-Time Search \u0026amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log \u0026lt;LEVEL\u0026gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config \u0026lt;FILE\u0026gt; -p, --pid \u0026lt;FILE\u0026gt; Place pid to this file -E, --override \u0026lt;KEY=VALUE\u0026gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza.yaml configuration file:\n# ======================== INFINI Pizza Configuration ========================== # -------------------------------- Log ----------------------------------------- log: level: info # -------------------------------- API ----------------------------------------- api: logging: true network: binding: 127.0.0.1:9100 skip_occupied_port: true # -------------------------------- Cluster ------------------------------------- cluster: name: pizza node: name: my_node_1 network: binding: 127.0.0.1:8100 skip_occupied_port: true # -------------------------------- Storage ------------------------------------- storage: compression: ZSTD # -------------------------------- MemTable ------------------------------------ memtable: threshold: 1k max_num_of_instance: 2 allow_multi_instance: true Override configuration # You can tweak the configuration by passing the command line option -E with KEY=VALUE style during Pizza start:\n./bin/pizza -E log.level=trace -E api.network.binding=127.0.0.1:12200 "});index.add({'id':20,'href':'/docs/references/collection/delete/','title':"Delete a collection",'section':"Collection",'content':"Delete a collection # Delete a exists collection.\nExamples # The following request delete the collection called my-collection:\nDELETE my-collection Request # PUT /[\u0026lt;namespace\u0026gt;:]\u0026lt;name\u0026gt; Path Parameters # \u0026lt;namespace\u0026gt;\n(Optional, string) The namespace which the collection belongs to. \u0026lt;name\u0026gt;\n(Required, string) Name of the collection you wish to create. "});index.add({'id':21,'href':'/docs/references/namespace/delete/','title':"Delete a namespace",'section':"Namespace",'content':"Delete a namespace # Delete a exists namespace.\nExamples # The following request delete the namespace called website:\nDELETE /_namespace/website Request # DELETE /_namespace/\u0026lt;name\u0026gt; Path parameters # \u0026lt;name\u0026gt;\n(Optional, string) The name of the namespace that you want to delete. "});index.add({'id':22,'href':'/docs/references/document/','title':"Document",'section':"References",'content':"Document # In Pizza, a document is a data structure composed of field-and-value pairs. It\u0026rsquo;s roughly equivalent to a row in a relational database table, but with a dynamic schema. Documents are the basic unit of data storage in Pizza, and collections are groupings of documents.\nEach document in Pizza is represented in JSON format, which is a lightweight data interchange format that is easy for humans to read and write and easy for machines to parse and generate.\nDocument management # Document APIs are used to manage documents.\n Create a document Fetch a document Replace a document Partial update a document Delete a document Batch document operation "});index.add({'id':23,'href':'/docs/references/','title':"References",'section':"Documentation",'content':"References # Data management # Namespace APIs Collection APIs Document APIs Search and analyze # Search you data Aggregations "});index.add({'id':24,'href':'/docs/administration/','title':"Administration",'section':"Documentation",'content':"Administration # Cluster management # Search and analyze # "});index.add({'id':25,'href':'/docs/release-notes/','title':"Release notes",'section':"Documentation",'content':"Release notes # Information about release notes of INFINI Pizza is provided here.\n0.1.0 # Breaking changes # Features # Bug fix # Improvements # "});index.add({'id':26,'href':'/docs/references/document/fetch/','title':"Fetch a document",'section':"Document",'content':"Fetch a document # Retrieve an existing document by specifying its unique identifier.\nExamples # Fetch a document from the my-collection collection with customized uuid news_001:\nGET /my-collection/_doc/news_001 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 1, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infini\u0026#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:\nGET /my-collection/_doc/0,0 Request # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. "});index.add({'id':27,'href':'/docs/references/document/replace/','title':"Replace a document",'section':"Document",'content':"Replace a document # Replace an existing document by specifying its unique identifier and the new content.\nExamples # Replace a document news_001 of the collection my-collection with new content:\nPUT /my-collection/_doc/news_001 { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} After the document modification, If you perform the fetch request:\nGET /my-collection/_doc/news_001 It returns an updated document like:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;my-collection\u0026#34;, \u0026#34;_key\u0026#34; : \u0026#34;news_001\u0026#34;, \u0026#34;found\u0026#34;: true, \u0026#34;_source\u0026#34; : { \u0026#34;message\u0026#34;: \u0026#34;GET /search HTTP/1.1 200 1070000\u0026#34;, \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } Note that the document _version was increased to 2.\nPizza works by marking the old document as deleted and insert a new document under the hood.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; {\u0026lt;fields\u0026gt;} Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;fields\u0026gt;\n(Required, string) Request body contains the JSON source for the document data. "});index.add({'id':28,'href':'/docs/references/document/partial_update/','title':"Partial update a document",'section':"Document",'content':"Partial update a document # Sometimes we may only need to update a portion fields of the document.\nExamples # Update the org.id field of the document news_001 in the collection my-collection:\nPUT /my-collection/_doc/news_001/_update { \u0026#34;sync\u0026#34;:{ \u0026#34;replace\u0026#34;:{ \u0026#34;org\u0026#34;: { \u0026#34;id\u0026#34;: \u0026#34;infinilabs\u0026#34; } } } } The API returns as following result:\n{\u0026#34;_id\u0026#34;:\u0026#34;0,0\u0026#34;, \u0026#34;_key\u0026#34;:\u0026#34;news_001\u0026#34;, \u0026#34;result\u0026#34;:\u0026#34;updated\u0026#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.\nRequest # POST /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt;/_update { \u0026#34;sync\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } \u0026#34;async\u0026#34;:{ \u0026lt;operation\u0026gt;: {\u0026lt;fields\u0026gt;} } } Pizza support both sync and async way to perform the updates, in order to update in realtime, you need to use sync here.\nIn asynchronous mode, the update process is considered complete once the request is committed to the WAL. Background tasks independently consume and process updates asynchronously, making it suitable for scenarios prioritizing update efficiency.\nPath parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) The unique identify of this document, support both _key or _id. Request body # \u0026lt;operation\u0026gt; The operation supported by partial updates: add, replace, remove, array_append. \u0026lt;fields\u0026gt;\n(Required, string) The JSON format of the fields operation by partial updates. "});index.add({'id':29,'href':'/docs/references/document/delete/','title':"Delete a document",'section':"Document",'content':"Delete a document # Delete a specific document from the specified collection by specifying its unique identifier.\nExamples # Delete the document 1 from collection my-collection:\nDELETE /my-collection/_doc/0,0 The API returns the following result:\n{ \u0026#34;_id\u0026#34;: \u0026#34;0,0\u0026#34;, \u0026#34;_version\u0026#34;: 2, \u0026#34;result\u0026#34;: \u0026#34;deleted\u0026#34;, ... } Request # DELETE /\u0026lt;target\u0026gt;/_doc/\u0026lt;doc_id\u0026gt; Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. \u0026lt;doc_id\u0026gt;\n(Required, string) Unique identifier for the document, support both _key or _id. "});index.add({'id':30,'href':'/docs/references/document/bulk/','title':"Batch document operation",'section':"Document",'content':"Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request.\nExamples # POST /_bulk { \u0026#34;index\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value1\u0026#34; } { \u0026#34;delete\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;2\u0026#34; } } { \u0026#34;create\u0026#34; : { \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;, \u0026#34;_id\u0026#34; : \u0026#34;3\u0026#34; } } { \u0026#34;field1\u0026#34; : \u0026#34;value3\u0026#34; } { \u0026#34;update\u0026#34; : {\u0026#34;_id\u0026#34; : \u0026#34;1\u0026#34;, \u0026#34;_index\u0026#34; : \u0026#34;test\u0026#34;} } { \u0026#34;doc\u0026#34; : {\u0026#34;field2\u0026#34; : \u0026#34;value2\u0026#34;} } The API returns the following result:\n{ \u0026#34;took\u0026#34;: 30, \u0026#34;errors\u0026#34;: false, \u0026#34;items\u0026#34;: [ { \u0026#34;index\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;delete\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;not_found\u0026#34;, ... } }, { \u0026#34;create\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;created\u0026#34;, ... } }, { \u0026#34;update\u0026#34;: { \u0026#34;_namespace\u0026#34;: \u0026#34;default\u0026#34;, \u0026#34;_collection\u0026#34;: \u0026#34;test\u0026#34;, \u0026#34;result\u0026#34;: \u0026#34;updated\u0026#34;, ... } } ] } Request # POST /_bulk POST /\u0026lt;target\u0026gt;/_bulk Path parameters # \u0026lt;target\u0026gt;\n(Required, string) Name of the collection to target. Request body # The actions are specified in the request body using a newline delimited JSON (NDJSON) structure:\naction_and_meta_data\\n optional_source\\n action_and_meta_data\\n optional_source\\n .... action_and_meta_data\\n optional_source\\n The index and create actions expect a source on the next line, and have the same semantics as the standard API: create fails if a document with the same ID already exists in the target, index adds or replaces a document as necessary.\nupdate expects that the partial doc, upsert, and script and its options are specified on the next line.\ndelete does not expect a source on the next line and has the same semantics as the standard delete API.\nBecause this format uses literal \\n\u0026rsquo;s as delimiters, make sure that the JSON actions and sources are not pretty printed.\nIf you provide a \u0026lt;target\u0026gt; in the request path, it is used for any actions that don’t explicitly specify an _index argument.\ncreate # Indexes the specified document if it does not already exist. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. index # Indexes the specified document. If the document exists, replaces the document and increments the version. The following line must contain the source data to be indexed.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Optional, string) The document ID. If no ID is specified, a document ID is automatically generated. delete # Removes the specified document from the index.\n _namespace\n(Optional, string) Name of the namespace to perform the action on. _collection\n(Optional, string) Name of the collection to perform the action on. This parameter is required if a \u0026lt;target\u0026gt; is not specified in the request path. _index\n(Optional, string) A shortcut to specify the namespace and collection in [\u0026lt;namespace\u0026gt;:]\u0026lt;collection\u0026gt; syntax. This parameter conflicts with \u0026lt;_namespace\u0026gt; and \u0026lt;_collection\u0026gt;. _id\n(Required, string) The document ID. If no ID is specified, a document ID is automatically generated. doc # The partial document to index. Required for update operations.\n\u0026lt;fields\u0026gt; # The document source to index. Required for create and index operations.\n"});index.add({'id':31,'href':'/docs/references/search/','title':"Search",'section':"References",'content':"Search # A search query, or query, is a request for information about documents in Pizza collections.\nA search consists of one or more queries that are combined and sent to Pizza. Documents that match a search\u0026rsquo;s queries are returned in the hits, or search results, of the response.\nA search may also contain additional information used to better process its queries. For example, a search may be limited to a specific collection or only return a specific number of results.\nExamples # Search all the collections under the default namespace whose names are ended with -logs, fetch the documents whose field year has value 2024:\nPOST /default.*-logs/_search { \u0026quot;query\u0026quot;: { \u0026quot;term\u0026quot;: { \u0026quot;year\u0026quot;: \u0026quot;2024\u0026quot; } } } Requests # POST /\u0026lt;targets\u0026gt;/_search Path parameters # targets\n(Optional, String) Comma-separated, names of the collection to search (wildcard supported) Query parameters # from\n(Optional, integer) How many documents to skip, should be non-negative and defaults to 0.\n size\n(Optional, integer) The maximun number of documents to be returned in hits, defaults to 20.\n Term-level queries # prefix query\nReturns documents that contain a specific prefix in a provided field. range query\nReturns documents that contain terms within a provided range. regexp query\nReturns documents that contain terms matching a regular expression. term query\nReturns documents that contain an exact term in a provided field. "});index.add({'id':32,'href':'/docs/references/aggregation/','title':"Aggregation",'section':"References",'content':"Aggregation # An aggregation summarizes your data as metrics, statistics, or other analytics.\nPizza organizes aggregations into the following categories:\n Metric aggregations that calculate metrics, such as a sum or average, from field values. Bucket aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. Metric aggregations # avg aggregation\nA single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. max aggregation\nA single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. min aggregation\nA single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. percentiles aggregation\nA multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. sum aggregation\nA single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. value_count aggregation\nA single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Bucket aggregations # date_histogram aggregation\nA histogram aggregation that can only be used with date or date range values. terms aggregation\nA multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. "});index.add({'id':33,'href':'/docs/community/','title':"Community",'section':"Documentation",'content':"Community hall of fame # The following acknowledges the Maintainers for the Pizza project, credits to those who have Contributed to this repository (via bug reports, code, design, ideas, project management, translation, testing, etc.), proactive advocates of pizza as Evangelists, and any other References utilized.\nMaintainers # Medcl(@medcl), SteveLauC, Loi Chyan(@loichyan)\nContributors # Evangelists # Adopters # Pizza community of adopters is growing! Innovative organizations of all sizes and across industry sectors are committed to accelerating the adoption of commercial-grade, production-ready open source technologies developed by the Pizza community.\nDo you use INFINI Pizza? Show your support for open source by adding your logo to this page.\nPlease create an issue to add your logo below.\nReferences # "});})(); \ No newline at end of file diff --git a/en.search.min.49fefc13bee8854d7b11e10010641c84b1a7a4e5bbfa1a684e83a35f88290c30.js b/en.search.min.49fefc13bee8854d7b11e10010641c84b1a7a4e5bbfa1a684e83a35f88290c30.js new file mode 100644 index 0000000..b909188 --- /dev/null +++ b/en.search.min.49fefc13bee8854d7b11e10010641c84b1a7a4e5bbfa1a684e83a35f88290c30.js @@ -0,0 +1,11 @@ +'use strict';(function(){const input=document.querySelector('#book-search-input');const results=document.querySelector('#book-search-results');if(!input){return} +input.addEventListener('focus',init);input.addEventListener('keyup',search);document.addEventListener('keypress',focusSearchFieldOnKeyPress);function focusSearchFieldOnKeyPress(event){if(input===document.activeElement){return;} +const characterPressed=String.fromCharCode(event.charCode);if(!isHotkey(characterPressed)){return;} +input.focus();event.preventDefault();} +function isHotkey(character){const dataHotkeys=input.getAttribute('data-hotkeys')||'';return dataHotkeys.indexOf(character)>=0;} +function init(){input.removeEventListener('focus',init);input.required=true;loadScript('/flexsearch.min.js');loadScript('/en.search-data.min.f01426de8634b9937aea3fe4b06b06c2d75630261202095a1ab9685fc15ab524.js',function(){input.required=false;search();});} +function search(){while(results.firstChild){results.removeChild(results.firstChild);} +if(!input.value){return;} +const searchHits=window.bookSearchIndex.search(input.value,10);searchHits.forEach(function(page){const li=element('
  • ');const a=li.querySelector('a'),small=li.querySelector('small');a.href=page.href;a.textContent=page.title;small.textContent=page.section;results.appendChild(li);});} +function loadScript(src,callback){const script=document.createElement('script');script.defer=true;script.async=false;script.src=src;script.onload=callback;document.head.appendChild(script);} +function element(content){const div=document.createElement('div');div.innerHTML=content;return div.firstChild;}})(); \ No newline at end of file diff --git a/en.search.min.59e477a4e30cc415c12e18a0e4fcd3ce8cd0b893ce7d0644ec22038d89c280c1.js b/en.search.min.59e477a4e30cc415c12e18a0e4fcd3ce8cd0b893ce7d0644ec22038d89c280c1.js new file mode 100644 index 0000000..bc907fa --- /dev/null +++ b/en.search.min.59e477a4e30cc415c12e18a0e4fcd3ce8cd0b893ce7d0644ec22038d89c280c1.js @@ -0,0 +1,11 @@ +'use strict';(function(){const input=document.querySelector('#book-search-input');const results=document.querySelector('#book-search-results');if(!input){return} +input.addEventListener('focus',init);input.addEventListener('keyup',search);document.addEventListener('keypress',focusSearchFieldOnKeyPress);function focusSearchFieldOnKeyPress(event){if(input===document.activeElement){return;} +const characterPressed=String.fromCharCode(event.charCode);if(!isHotkey(characterPressed)){return;} +input.focus();event.preventDefault();} +function isHotkey(character){const dataHotkeys=input.getAttribute('data-hotkeys')||'';return dataHotkeys.indexOf(character)>=0;} +function init(){input.removeEventListener('focus',init);input.required=true;loadScript('/flexsearch.min.js');loadScript('/en.search-data.min.49e90322b03f690d765bf7acfa146e27640860875fd991bd0a5455b816c35d90.js',function(){input.required=false;search();});} +function search(){while(results.firstChild){results.removeChild(results.firstChild);} +if(!input.value){return;} +const searchHits=window.bookSearchIndex.search(input.value,10);searchHits.forEach(function(page){const li=element('
  • ');const a=li.querySelector('a'),small=li.querySelector('small');a.href=page.href;a.textContent=page.title;small.textContent=page.section;results.appendChild(li);});} +function loadScript(src,callback){const script=document.createElement('script');script.defer=true;script.async=false;script.src=src;script.onload=callback;document.head.appendChild(script);} +function element(content){const div=document.createElement('div');div.innerHTML=content;return div.firstChild;}})(); \ No newline at end of file diff --git a/en.search.min.e8d7b99b100ab317a75f33775cfdf858b7780251737256cf1ff8644d6419f927.js b/en.search.min.e8d7b99b100ab317a75f33775cfdf858b7780251737256cf1ff8644d6419f927.js new file mode 100644 index 0000000..b7bcbfb --- /dev/null +++ b/en.search.min.e8d7b99b100ab317a75f33775cfdf858b7780251737256cf1ff8644d6419f927.js @@ -0,0 +1,11 @@ +'use strict';(function(){const input=document.querySelector('#book-search-input');const results=document.querySelector('#book-search-results');if(!input){return} +input.addEventListener('focus',init);input.addEventListener('keyup',search);document.addEventListener('keypress',focusSearchFieldOnKeyPress);function focusSearchFieldOnKeyPress(event){if(input===document.activeElement){return;} +const characterPressed=String.fromCharCode(event.charCode);if(!isHotkey(characterPressed)){return;} +input.focus();event.preventDefault();} +function isHotkey(character){const dataHotkeys=input.getAttribute('data-hotkeys')||'';return dataHotkeys.indexOf(character)>=0;} +function init(){input.removeEventListener('focus',init);input.required=true;loadScript('/flexsearch.min.js');loadScript('/en.search-data.min.fad7ab67520a5317f59227a6ce5b1a29cbc03aca32b2fb95a6dd703f1f8ed478.js',function(){input.required=false;search();});} +function search(){while(results.firstChild){results.removeChild(results.firstChild);} +if(!input.value){return;} +const searchHits=window.bookSearchIndex.search(input.value,10);searchHits.forEach(function(page){const li=element('
  • ');const a=li.querySelector('a'),small=li.querySelector('small');a.href=page.href;a.textContent=page.title;small.textContent=page.section;results.appendChild(li);});} +function loadScript(src,callback){const script=document.createElement('script');script.defer=true;script.async=false;script.src=src;script.onload=callback;document.head.appendChild(script);} +function element(content){const div=document.createElement('div');div.innerHTML=content;return div.firstChild;}})(); \ No newline at end of file diff --git a/en.search.min.f51a934f217002973e6e1e5d7364371fe2d6da2b245e000e762945850c1a4495.js b/en.search.min.f51a934f217002973e6e1e5d7364371fe2d6da2b245e000e762945850c1a4495.js new file mode 100644 index 0000000..0df5fcc --- /dev/null +++ b/en.search.min.f51a934f217002973e6e1e5d7364371fe2d6da2b245e000e762945850c1a4495.js @@ -0,0 +1,11 @@ +'use strict';(function(){const input=document.querySelector('#book-search-input');const results=document.querySelector('#book-search-results');if(!input){return} +input.addEventListener('focus',init);input.addEventListener('keyup',search);document.addEventListener('keypress',focusSearchFieldOnKeyPress);function focusSearchFieldOnKeyPress(event){if(input===document.activeElement){return;} +const characterPressed=String.fromCharCode(event.charCode);if(!isHotkey(characterPressed)){return;} +input.focus();event.preventDefault();} +function isHotkey(character){const dataHotkeys=input.getAttribute('data-hotkeys')||'';return dataHotkeys.indexOf(character)>=0;} +function init(){input.removeEventListener('focus',init);input.required=true;loadScript('/flexsearch.min.js');loadScript('/en.search-data.min.037d8229575f923dafe199da92051e91b8d6debf6f269a0d7788069e7bb39059.js',function(){input.required=false;search();});} +function search(){while(results.firstChild){results.removeChild(results.firstChild);} +if(!input.value){return;} +const searchHits=window.bookSearchIndex.search(input.value,10);searchHits.forEach(function(page){const li=element('
  • ');const a=li.querySelector('a'),small=li.querySelector('small');a.href=page.href;a.textContent=page.title;small.textContent=page.section;results.appendChild(li);});} +function loadScript(src,callback){const script=document.createElement('script');script.defer=true;script.async=false;script.src=src;script.onload=callback;document.head.appendChild(script);} +function element(content){const div=document.createElement('div');div.innerHTML=content;return div.firstChild;}})(); \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1578badd63689791c177e08d1aea90f985e924f5 GIT binary patch literal 1150 zcma*m%PT}-7{~EvTp|idLWyiBq@-AwSh zCr=uZkmDRjj7C3n=MwW!iF>pl4$&7nBbwuwC3fN($5=uJg5%K&x#Pq>j9?dq&iNU! z0{^MuXWk-~(THI*;S~Ky#Gh>_j{@vq41>6Z_M#fv%NBC+s~0DiLOeh>0$9TYlpBTe z7pO%H!oBF&$!!uluz?voq8W48hW6#wi|064L(wr!?1k=O56-cNap>9Tekyh$9o`;V z$xTAnZ^t@H@dQ272B_W?lHpxnPHq(eXwCyJq3fMNeU;%3`S7mKCbtjGzk&L$hx*WS zt%LTYTyW2B0p~oCc!X-`9bSRzwP65STZJEMRm05@^&Veg0lFXR}yFz<8C F>>EM6Mgsr< literal 0 HcmV?d00001 diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8831711deeb9e72ef3c80a5bb8dd9ecc7170aa75 GIT binary patch literal 12801 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 literal 0 HcmV?d00001 diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000..dd0763c --- /dev/null +++ b/favicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/flexsearch.min.js b/flexsearch.min.js new file mode 100644 index 0000000..984d8c6 --- /dev/null +++ b/flexsearch.min.js @@ -0,0 +1,42 @@ +/* + FlexSearch v0.6.30 + Copyright 2019 Nextapps GmbH + Author: Thomas Wilkerling + Released under the Apache 2.0 Licence + https://github.com/nextapps-de/flexsearch +*/ +'use strict';(function(K,R,w){let L;(L=w.define)&&L.amd?L([],function(){return R}):(L=w.modules)?L[K.toLowerCase()]=R:"object"===typeof exports?module.exports=R:w[K]=R})("FlexSearch",function ma(K){function w(a,c){const b=c?c.id:a&&a.id;this.id=b||0===b?b:na++;this.init(a,c);fa(this,"index",function(){return this.a?Object.keys(this.a.index[this.a.keys[0]].c):Object.keys(this.c)});fa(this,"length",function(){return this.index.length})}function L(a,c,b,d){this.u!==this.g&&(this.o=this.o.concat(b),this.u++, +d&&this.o.length>=d&&(this.u=this.g),this.u===this.g&&(this.cache&&this.j.set(c,this.o),this.F&&this.F(this.o)));return this}function S(a){const c=B();for(const b in a)if(a.hasOwnProperty(b)){const d=a[b];F(d)?c[b]=d.slice(0):G(d)?c[b]=S(d):c[b]=d}return c}function W(a,c){const b=a.length,d=O(c),e=[];for(let f=0,h=0;f=h&&(a=a[g-(e+.5>>0)],a=a[b]||(a[b]=[]), +a[a.length]=d);return e}function ba(a,c){if(a){const b=Object.keys(a);for(let d=0,e=b.length;da?1:a?-1:0}function pa(a,c){a=a[M];c=c[M];return ac?1:0}function oa(a,c){const b=M.length;for(let d=0;dc?1:0}function T(a,c,b){return a?{page:a,next:c?""+c:null,result:b}:b}function ha(a,c,b,d,e,f,h){let g,k=[];if(!0===b){b="0";var l=""}else l=b&&b.split(":");const p=a.length;if(1h&&(l=0),l=l||0,g=l+c,g=this.m.length&&(this.C=0),this.m[this.C].postMessage({add:!0,id:a, +content:c}),this.c[f]=""+this.C,b&&b(),this;if(!e){if(this.async&&"function"!==typeof importScripts){let t=this;f=new Promise(function(v){setTimeout(function(){t.add(a,c,null,d,!0);t=null;v()})});if(b)f.then(b);else return f;return this}if(b)return this.add(a,c,null,d,!0),b(),this}c=this.encode(c);if(!c.length)return this;b=this.f;e=O(b)?b(c):c.split(this.split);this.filter&&(e=W(e,this.filter));const n=B();n._ctx=B();const m=e.length,u=this.threshold,q=this.depth,A=this.b,z=this.i,y=this.D;for(let t= +0;tp;x--)l=h.substring(p,x),V(z,n,l,a,v,k,u,A-1)}break;default:if(g=V(z,n,h,a,1,k,u,A-1),q&&1=u)for(g=n._ctx[h]||(n._ctx[h]=B()),h=this.h[h]||(this.h[h]=ia(A-(u||0))),k=t-q,l=t+q+1,0>k&&(k=0),l> +m&&(l=m);kh;d--)e=g[d-1],g[d]=e,f[e]=d;g[h]=c;f[c]=h}}}return b};return a}();return w}(function(){const K={},R="undefined"!==typeof Blob&& +"undefined"!==typeof URL&&URL.createObjectURL;return function(w,L,S,W,P){S=R?URL.createObjectURL(new Blob(["("+S.toString()+")()"],{type:"text/javascript"})):w+".min.js";w+="-"+L;K[w]||(K[w]=[]);K[w][P]=new Worker(S);K[w][P].onmessage=W;return K[w][P]}}()),this); diff --git a/fonts/5aUz9_-1phKLFgshYDvh6Vwt7VRtvWdUhm97sg.woff2 b/fonts/5aUz9_-1phKLFgshYDvh6Vwt7VRtvWdUhm97sg.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..30a5c68f76b86faf5fdb333105e7431e037cf1ac GIT binary patch literal 12284 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 WMwvmQC_ANc{<$5vSj*5`K7Rm_lziC$ literal 0 HcmV?d00001 diff --git a/fonts/5aUz9_-1phKLFgshYDvh6Vwt7VptvWdUhm8.woff2 b/fonts/5aUz9_-1phKLFgshYDvh6Vwt7VptvWdUhm8.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1238a55c4f0de07441f409737b078ddb69f1bd1d GIT binary patch literal 15336 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 E0z)B^-v9sr literal 0 HcmV?d00001 diff --git a/fonts/roboto-mono-v6-latin-regular.woff b/fonts/roboto-mono-v6-latin-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..c41382c272b5cd1377e9c389e057432b4be7ecb8 GIT binary patch literal 19972 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 literal 0 HcmV?d00001 diff --git a/fonts/roboto-mono-v6-latin-regular.woff2 b/fonts/roboto-mono-v6-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53d4b505c2eb685b2b57d30efebb71a40b096276 GIT binary patch literal 16328 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 literal 0 HcmV?d00001 diff --git a/fonts/roboto-v19-latin-700.woff b/fonts/roboto-v19-latin-700.woff new file mode 100644 index 0000000000000000000000000000000000000000..0f14effba09e91884ebca24e1c6e565ef8d0977e GIT binary patch literal 20356 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 KT;dDhGEvAB`YM+I literal 0 HcmV?d00001 diff --git a/fonts/roboto-v19-latin-700.woff2 b/fonts/roboto-v19-latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..32b25eee7c5c3309ea53facaaf016256887ec0b2 GIT binary patch literal 15816 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%0ADEE3-5n949 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

    Fm*l|0qgnMVVk{u0=EDX%!k_^oa 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�~wcG#NAzP0SuR=_HobN%! zKbmR39|}@eW|$a-?{_wehq&YjBWcbQcQB~|)YAm@(aO%F@i)Q4&hb&p+b7`>+0ZO! z525_37k{>_!VqodtoR31s2o$pQdy88b65{tSFUkYxx%)*ZN(n!#f8J(+g=KYup;h< z=@=Q-%8JwYDHK-@Y4P#O>@|>O_mIe?rgWmqq?3w+7bdt`NP4Kru1OYhEp_P z`rZ|~1j8zGqf1(HX|3dSaWq!sl-j%+IwM{RMT7>WD#rC!1?#3slf=p1xK5ykjxf(U zV7FP1BSh=)2gPNRGb2qe$u%joXxmBJ!JmBhnEV6x;c3o}%1%+K0oi2C9#rG*Qo60< zjms2wO9#^UZsTsN87+lZGjnRtmm_S&8dOVKN~RS=_5gZ9wD;}%=}2{_);4(~ncTbZ zqlcfqK=R+kTmS#IL=v_a+p~uVRdW|d(^uE+r*u1*D?8n?Q<*kWA!S-aYOgmIc{J_k z9z|07{umEw2?fdXQ05jSiy?c(@9-#oP0)p|MNvZwi8tj!i}hNNhA}xUte%Kg)(+p3 zKiGnY2K~-;PM@X70|j&9MqhwS@qoaW+Lqsg;CZFsGUc-bKa00fiuSE5PrJNFBj1p1 zL7Cc}pC$Ty1}i}oTEoWyQ&>$xj(i`a$0=$1tuWhc;S`6pBBCCm_$Apa+YjndZc3u@ zixQcV)s*DO_o4PU`PP2h9Gtcpr~LEjA^5rqQE#H?Xt(U~5PXtLV)kf0Ln^XnF6e}) zOBBs6_r|>&l+;3{q!ubA?Scj~Hp<5tztlhl_hGCk>J&vso7uMaZhz}K7-!XuLxjAd zd>={;*6fYd4VA`5P=Z^(QI>m1#6Es|+$1h-uQ6B&6HODL9|Cq|udOU{FZ=A`?tCme+9MwTwBaU0RRA)`a9R40syQw>wkaI?<%wO z2GIau1_J;95Ww`vx&h5w;H<4PI?bNe|8`N}~5-8`nS%|T12Ak{nZl_q>{394WG znxBAvTW-Hca1flXeCDmpnXW*fpHebRVf)-@pbKtrhXU%512aV4*S_r|V!J`4xEPkN znvz5uvrJY}f~S(x^+)Ga5I;3_R$*{M^%!IC-63ouEDuK)L2|)*SnOPT4Rd9PS(D;Ye#VK=ee);>L2Lz4>Wp~7IwsNpVrz=9F zLP5}rp4>$BwrCK2U+shZdMIIzN3g_snkb&>V$Jq7mq)N|^cVQ3MX+;Y*qBif9BQ&cr@10H zwd6(4aIcNA)Hb&@(2r$h5~G4Y1y$Owc@m25_qd~^GpUJU`Yn_Qg`)H+40dj!*nUmL qLrKqao`t?aP(HA86UFp + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..756115d --- /dev/null +++ b/index.html @@ -0,0 +1,46 @@ +INFINI Pizza | INFINI Pizza +

    \ No newline at end of file diff --git a/index.xml b/index.xml new file mode 100644 index 0000000..81c8e22 --- /dev/null +++ b/index.xml @@ -0,0 +1,65 @@ +INFINI Pizza/Recent content on INFINI PizzaHugo -- gohugo.ioAvg aggregation/docs/references/aggregation/avg/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/avg/Avg aggregation # A single-value metrics aggregation that computes the average of numeric values that are extracted from the aggregated documents. +Examples # Assuming the data consists of documents representing exams grades (between 0 and 100) of students we can average their scores with: +POST /exams/_search { &#34;aggs&#34;: { &#34;avg_grade&#34;: { &#34;avg&#34;: { &#34;field&#34;: &#34;grade&#34; } } } } The above aggregation computes the average grade over all documents.Create a collection/docs/references/collection/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/collection/create/Create a collection # Creates a new collection. +Examples # The following request creates a new collection called my-collection in the namespace my-namespace: +PUT /my-namespace:my-collection If creating a collection within the default namespace, it can be simplified as: +PUT /my-collection Request # PUT /[&lt;namespace&gt;:]&lt;name&gt; Path parameters # &lt;namespace&gt; +(Optional, string) The namespace which the collection belongs to. Namespace names must meet the following criteria: Lowercase only Cannot include \ /, *, ?Create a document/docs/references/document/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/create/Create a document # Creates a new document. +Examples # Insert a JSON document into the my-collection collection: +POST /my-collection/_doc { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infini&#34; } } The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;_version&#34;: 1, &#34;_namespace&#34;: &#34;default&#34;, &#34;_collection&#34;: &#34;my-collection&#34;, &#34;result&#34;: &#34;created&#34;, ... } The API supports passing a customized UUID as the document identify, eg: +POST /my-collection/_doc/news_001 { &#34;message&#34;: &#34;GET /search HTTP/1.Create a namespace/docs/references/namespace/create/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/namespace/create/Create a namespace # Creates a new namespace. +Examples # If creating a website namespace, the following request creates a new namespace called website: +PUT /_namespace/website Request # PUT /_namespace/&lt;name&gt; Path parameters # &lt;name&gt; +(Required, string) The name of the namespace. Namespace names must meet the following criteria: Lowercase only Cannot include \ /, *, ?, &quot;, &lt;, &gt;, |, , ,, # Cannot start with -, _, + Cannot be .Date histogram aggregation/docs/references/aggregation/date-histogram/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/date-histogram/Date histogram aggregation # This multi-bucket aggregation is similar to the normal histogram, but it can only be used with date or date range values. Because dates are represented internally in Elasticsearch as long values, it is possible, but not as accurate, to use the normal histogram on dates as well. The main difference in the two APIs is that here the interval can be specified using date/time expressions. Time-based data requires special support because time-based intervals are not always a fixed length.Installation/docs/getting-started/installation/Mon, 01 Jan 0001 00:00:00 +0000/docs/getting-started/installation/Installation # Pizza is compatible with all major operating systems. The package is compiled statically, and it does not require any external dependencies. +Automatic installation # Use the following command to automatically download the latest version of INFINI Pizza for your platform and extract it into /opt/pizza: +curl -sSL http://get.infini.cloud | bash -s -- -p pizza The optional parameters for the script are as follows: +-v &lt;version number&gt; (default is the latest version) -d &lt;installation directory&gt; (default is /opt/pizza) Manual installation # Visit the URL below to download the package for your operating system:Max aggregation/docs/references/aggregation/max/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/max/Max aggregation # A single-value metrics aggregation that keeps track and returns the maximum value among the numeric values extracted from the aggregated documents. +Examples # Computing the max price value across all documents: +POST /sales/_search { &#34;aggs&#34;: { &#34;max_price&#34;: { &#34;max&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;max_price&#34;: { &#34;value&#34;: 200.0 } } } As can be seen, the name of the aggregation (max_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.Min aggregation/docs/references/aggregation/min/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/min/Min aggregation # A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents. +Examples # Computing the min price value across all documents: +POST /sales/_search { &#34;aggs&#34;: { &#34;min_price&#34;: { &#34;min&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;min_price&#34;: { &#34;value&#34;: 10.0 } } } As can be seen, the name of the aggregation (min_price above) also serves as the key by which the aggregation result can be retrieved from the returned response.Percentiles aggregation/docs/references/aggregation/percentiles/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/percentiles/Percentiles aggregation # A multi-value metrics aggregation that calculates one or more percentiles over numeric values extracted from the aggregated documents. +Percentiles show the point at which a certain percentage of observed values occur. For example, the 95th percentile is the value which is greater than 95% of the observed values. +Percentiles are often used to find outliers. In normal distributions, the 0.13th and 99.87th percentiles represents three standard deviations from the mean.Prefix query/docs/references/search/prefix/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/prefix/Prefix query # Returns documents that contain a specific prefix in a provided field. +Examples # The following search returns documents where the org.id field contains a term that begins with inf. +GET /_search { &#34;query&#34;: { &#34;prefix&#34;: { &#34;org.id&#34;: { &#34;value&#34;: &#34;inf&#34; } } } } Top-level parameters for prefix # &lt;field&gt; +(Required, object) Field you wish to search. Parameters for &lt;field&gt; # valueRange query/docs/references/search/range/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/range/Range query # Returns documents that contain terms within a provided range. +Examples # The following search returns documents where the age field contains a term between 10 and 20. +GET /_search { &#34;query&#34;: { &#34;range&#34;: { &#34;age&#34;: { &#34;gte&#34;: 10, &#34;lte&#34;: 20 } } } } Top-level parameters for range # &lt;field&gt; +(Required, object) Field you wish to search. Parameters for &lt;field&gt; # gtRegexp query/docs/references/search/regexp/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/regexp/Regexp query # Returns documents that contain terms matching a regular expression. +A regular expression is a way to match patterns in data using placeholder characters, called operators. For a list of operators supported by the regexp query, see Regular expression syntax. +Examples # The following search returns documents where the org.id field contains any term that begins with in and ends with y. The .* operators match any characters of any length, including no characters.Sum aggregation/docs/references/aggregation/sum/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/sum/Sum aggregation # A single-value metrics aggregation that sums up numeric values that are extracted from the aggregated documents. +Examples # Assuming the data consists of documents representing sales records we can sum the sale price of all hats with: +POST /sales/_search { &#34;query&#34;: { &#34;constant_score&#34;: { &#34;filter&#34;: { &#34;match&#34;: { &#34;type&#34;: &#34;hat&#34; } } } }, &#34;aggs&#34;: { &#34;hat_prices&#34;: { &#34;sum&#34;: { &#34;field&#34;: &#34;price&#34; } } } } Resulting in:Term query/docs/references/search/term/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/search/term/Term query # Returns documents that contain an exact term in a provided field. +You can use the term query to find documents based on a precise value such as a price, a product ID, or a username. +Examples # GET /_search { &#34;query&#34;: { &#34;term&#34;: { &#34;org.id&#34;: { &#34;value&#34;: &#34;infini&#34; } } } } Top-level parameters for term # &lt;field&gt; +(Required, object) Field you wish to search.Terms aggregation/docs/references/aggregation/terms/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/terms/Terms aggregation # A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value. +Examples # POST /_search { &#34;aggs&#34;: { &#34;genres&#34;: { &#34;terms&#34;: { &#34;field&#34;: &#34;genre&#34; } } } } Response: +{ ... &#34;aggregations&#34;: { &#34;genres&#34;: { &#34;doc_count_error_upper_bound&#34;: 0, &#34;sum_other_doc_count&#34;: 0, &#34;buckets&#34;: [ { &#34;key&#34;: &#34;electronic&#34;, &#34;doc_count&#34;: 6 }, { &#34;key&#34;: &#34;rock&#34;, &#34;doc_count&#34;: 3 }, { &#34;key&#34;: &#34;jazz&#34;, &#34;doc_count&#34;: 2 } ] } } } Parameters for terms # fieldValue count aggregation/docs/references/aggregation/value-count/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/aggregation/value-count/Value count aggregation # A single-value metrics aggregation that counts the number of values that are extracted from the aggregated documents. Typically, this aggregator will be used in conjunction with other single-value aggregations. For example, when computing the avg one might be interested in the number of values the average is computed over. +value_count does not de-duplicate values, so even if a field has duplicates each value will be counted individually.Configuration/docs/getting-started/configuration/Mon, 01 Jan 0001 00:00:00 +0000/docs/getting-started/configuration/Configuration # Pizza supports several methods to overwrite the default configuration. +Command lines # ➜ ./bin/pizza --help A Distributed Real-Time Search &amp; AI-Native Innovation Engine. Usage: pizza [OPTIONS] [COMMAND] Commands: service Builtin service management (install, uninstall, start, stop) help Print this message or the help of the given subcommand(s) Options: -l, --log &lt;LEVEL&gt; Set the logging level, options: trace,debug,info,warn,error --debug Run in debug mode, panic immediately with full stack trace -c, --config &lt;FILE&gt; -p, --pid &lt;FILE&gt; Place pid to this file -E, --override &lt;KEY=VALUE&gt; -h, --help Print help -V, --version Print version Configuration file # You can fully customize Pizza by utilizing the pizza.Delete a collection/docs/references/collection/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/collection/delete/Delete a collection # Delete a exists collection. +Examples # The following request delete the collection called my-collection: +DELETE my-collection Request # PUT /[&lt;namespace&gt;:]&lt;name&gt; Path Parameters # &lt;namespace&gt; +(Optional, string) The namespace which the collection belongs to. &lt;name&gt; +(Required, string) Name of the collection you wish to create.Delete a namespace/docs/references/namespace/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/namespace/delete/Delete a namespace # Delete a exists namespace. +Examples # The following request delete the namespace called website: +DELETE /_namespace/website Request # DELETE /_namespace/&lt;name&gt; Path parameters # &lt;name&gt; +(Optional, string) The name of the namespace that you want to delete.Architecture/docs/overview/architecture/Mon, 01 Jan 0001 00:00:00 +0000/docs/overview/architecture/Fetch a document/docs/references/document/fetch/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/fetch/Fetch a document # Retrieve an existing document by specifying its unique identifier. +Examples # Fetch a document from the my-collection collection with customized uuid news_001: +GET /my-collection/_doc/news_001 The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;_version&#34;: 1, &#34;_namespace&#34;: &#34;default&#34;, &#34;_collection&#34;: &#34;my-collection&#34;, &#34;_key&#34; : &#34;news_001&#34;, &#34;found&#34;: true, &#34;_source&#34; : { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infini&#34; } } } As you can see, the customized uuid are represented as _key within the document, and there is also a _id returned with value 0,0, this is the internal id generated by Pizza, and it is guaranteed to be unique, so you can also fetch this document by this value like this:Replace a document/docs/references/document/replace/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/replace/Replace a document # Replace an existing document by specifying its unique identifier and the new content. +Examples # Replace a document news_001 of the collection my-collection with new content: +PUT /my-collection/_doc/news_001 { &#34;message&#34;: &#34;GET /search HTTP/1.1 200 1070000&#34;, &#34;org&#34;: { &#34;id&#34;: &#34;infinilabs&#34; } } The API returns as following result: +{&#34;_id&#34;:&#34;0,0&#34;, &#34;_key&#34;:&#34;news_001&#34;, &#34;result&#34;:&#34;updated&#34;} After the document modification, If you perform the fetch request: +GET /my-collection/_doc/news_001 It returns an updated document like:Partial update a document/docs/references/document/partial_update/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/partial_update/Partial update a document # Sometimes we may only need to update a portion fields of the document. +Examples # Update the org.id field of the document news_001 in the collection my-collection: +PUT /my-collection/_doc/news_001/_update { &#34;sync&#34;:{ &#34;replace&#34;:{ &#34;org&#34;: { &#34;id&#34;: &#34;infinilabs&#34; } } } } The API returns as following result: +{&#34;_id&#34;:&#34;0,0&#34;, &#34;_key&#34;:&#34;news_001&#34;, &#34;result&#34;:&#34;updated&#34;} Pizza using the method of fetching a document, then merging partial updates and replacing it.Delete a document/docs/references/document/delete/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/delete/Delete a document # Delete a specific document from the specified collection by specifying its unique identifier. +Examples # Delete the document 0,0 from collection my-collection: +DELETE /my-collection/_doc/0,0 The API returns the following result: +{ &#34;_id&#34;: &#34;0,0&#34;, &#34;result&#34;: &#34;deleted&#34;, ... } Request # DELETE /&lt;target&gt;/_doc/&lt;doc_id&gt; Path parameters # &lt;target&gt; +(Required, string) Name of the collection to target. &lt;doc_id&gt; +(Required, string) Unique identifier for the document, support both _key or _id.Batch document operation/docs/references/document/bulk/Mon, 01 Jan 0001 00:00:00 +0000/docs/references/document/bulk/Batch document operation # Provides a efficient way to perform multiple index, create, delete, and update operations in a single request. +Examples # POST /_bulk { &#34;index&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;1&#34; } } { &#34;field1&#34; : &#34;value1&#34; } { &#34;delete&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;2&#34; } } { &#34;create&#34; : { &#34;_index&#34; : &#34;test&#34;, &#34;_id&#34; : &#34;3&#34; } } { &#34;field1&#34; : &#34;value3&#34; } { &#34;update&#34; : {&#34;_id&#34; : &#34;1&#34;, &#34;_index&#34; : &#34;test&#34;} } { &#34;doc&#34; : {&#34;field2&#34; : &#34;value2&#34;} } The API returns the following result: \ No newline at end of file diff --git a/js/asciinema-player.js b/js/asciinema-player.js new file mode 100644 index 0000000..5ad47e0 --- /dev/null +++ b/js/asciinema-player.js @@ -0,0 +1,1213 @@ +/** + * asciinema-player v2.6.1 + * + * Copyright 2011-2018, Marcin Kulik + * + */ + +// CustomEvent polyfill from MDN (https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent) + +(function () { + if (typeof window.CustomEvent === "function") return false; + + function CustomEvent ( event, params ) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent'); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + + window.CustomEvent = CustomEvent; +})(); + +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.22 +"undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var o=t[this.name];return o&&o[0]===t?o[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){E.push(e),b||(b=!0,w(o))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function o(){b=!1;var e=E;E=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();r(e),n.length&&(e.callback_(n,e),t=!0)}),t&&o()}function r(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var o=v.get(n);if(o)for(var r=0;r0){var r=n[o-1],i=p(r,e);if(i)return void(n[o-1]=i)}else t(this.observer);n[o]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;n=0)){n.push(e);for(var o,r=e.querySelectorAll("link[rel="+a+"]"),d=0,s=r.length;s>d&&(o=r[d]);d++)o["import"]&&i(o["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=r,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e,t){return n(e,t)||o(e,t)}function n(t,n){return e.upgrade(t,n)?!0:void(n&&a(t))}function o(e,t){b(e,function(e){return n(e,t)?!0:void 0})}function r(e){N.push(e),y||(y=!0,setTimeout(i))}function i(){y=!1;for(var e,t=N,n=0,o=t.length;o>n&&(e=t[n]);n++)e();N=[]}function a(e){_?r(function(){d(e)}):d(e)}function d(e){e.__upgraded__&&!e.__attached&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function s(e){u(e),b(e,function(e){u(e)})}function u(e){_?r(function(){c(e)}):c(e)}function c(e){e.__upgraded__&&e.__attached&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function l(e){for(var t=e,n=window.wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function f(e){if(e.shadowRoot&&!e.shadowRoot.__watched){g.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)w(t),t=t.olderShadowRoot}}function p(e,n){if(g.dom){var o=n[0];if(o&&"childList"===o.type&&o.addedNodes&&o.addedNodes){for(var r=o.addedNodes[0];r&&r!==document&&!r.host;)r=r.parentNode;var i=r&&(r.URL||r._URL||r.host&&r.host.localName)||"";i=i.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",n.length,i||"")}var a=l(e);n.forEach(function(e){"childList"===e.type&&(M(e.addedNodes,function(e){e.localName&&t(e,a)}),M(e.removedNodes,function(e){e.localName&&s(e)}))}),g.dom&&console.groupEnd()}function m(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(p(e,t.takeRecords()),i())}function w(e){if(!e.__observer){var t=new MutationObserver(p.bind(this,e));t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function v(e){e=window.wrap(e),g.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop());var n=e===window.wrap(document);t(e,n),w(e),g.dom&&console.groupEnd()}function h(e){E(e,v)}var g=e.flags,b=e.forSubtree,E=e.forDocumentTree,_=window.MutationObserver._isPolyfilled&&g["throttle-attached"];e.hasPolyfillMutations=_,e.hasThrottledAttached=_;var y=!1,N=[],M=Array.prototype.forEach.call.bind(Array.prototype.forEach),O=Element.prototype.createShadowRoot;O&&(Element.prototype.createShadowRoot=function(){var e=O.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=f,e.upgradeDocumentTree=h,e.upgradeDocument=v,e.upgradeSubtree=o,e.upgradeAll=t,e.attached=a,e.takeRecords=m}),window.CustomElements.addModule(function(e){function t(t,o){if("template"===t.localName&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(t),!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var r=t.getAttribute("is"),i=e.getRegisteredDefinition(t.localName)||e.getRegisteredDefinition(r);if(i&&(r&&i.tag==t.localName||!r&&!i["extends"]))return n(t,i,o)}}function n(t,n,r){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),o(t,n),t.__upgraded__=!0,i(t),r&&e.attached(t),e.upgradeSubtree(t,r),a.upgrade&&console.groupEnd(),t}function o(e,t){Object.__proto__?e.__proto__=t.prototype:(r(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function r(e,t,n){for(var o={},r=t;r!==n&&r!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(r),d=0;i=a[d];d++)o[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i)),o[i]=1);r=Object.getPrototypeOf(r)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=o}),window.CustomElements.addModule(function(e){function t(t,o){var s=o||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(r(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(u(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return s.prototype||(s.prototype=Object.create(HTMLElement.prototype)),s.__name=t.toLowerCase(),s["extends"]&&(s["extends"]=s["extends"].toLowerCase()),s.lifecycle=s.lifecycle||{},s.ancestry=i(s["extends"]),a(s),d(s),n(s.prototype),c(s.__name,s),s.ctor=l(s),s.ctor.prototype=s.prototype,s.prototype.constructor=s.ctor,e.ready&&v(document),s.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){o.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){o.call(this,e,null,n)},e.setAttribute._polyfilled=!0}}function o(e,t,n){e=e.toLowerCase();var o=this.getAttribute(e);n.apply(this,arguments);var r=this.getAttribute(e);this.attributeChangedCallback&&r!==o&&this.attributeChangedCallback(e,o,r)}function r(e){for(var t=0;t<_.length;t++)if(e===_[t])return!0}function i(e){var t=u(e);return t?i(t["extends"]).concat([t]):[]}function a(e){for(var t,n=e["extends"],o=0;t=e.ancestry[o];o++)n=t.is&&t.tag;e.tag=n||e.__name,n&&(e.is=e.__name)}function d(e){if(!Object.__proto__){var t=HTMLElement.prototype;if(e.is){var n=document.createElement(e.tag);t=Object.getPrototypeOf(n)}for(var o,r=e.prototype,i=!1;r;)r==t&&(i=!0),o=Object.getPrototypeOf(r),o&&(r.__proto__=o),r=o;i||console.warn(e.tag+" prototype not found in prototype chain for "+e.is),e["native"]=t}}function s(e){return g(M(e.tag),e)}function u(e){return e?y[e.toLowerCase()]:void 0}function c(e,t){y[e]=t}function l(e){return function(){return s(e)}}function f(e,t,n){return e===N?p(t,n):O(e,t)}function p(e,t){e&&(e=e.toLowerCase()),t&&(t=t.toLowerCase());var n=u(t||e);if(n){if(e==n.tag&&t==n.is)return new n.ctor;if(!t&&!n.is)return new n.ctor}var o;return t?(o=p(e),o.setAttribute("is",t),o):(o=M(e),e.indexOf("-")>=0&&b(o,HTMLElement),o)}function m(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return h(e),e}}var w,v=(e.isIE,e.upgradeDocumentTree),h=e.upgradeAll,g=e.upgradeWithDefinition,b=e.implementPrototype,E=e.useNative,_=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],y={},N="http://www.w3.org/1999/xhtml",M=document.createElement.bind(document),O=document.createElementNS.bind(document);w=Object.__proto__||E?function(e,t){return e instanceof t}:function(e,t){if(e instanceof t)return!0;for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},m(Node.prototype,"cloneNode"),m(document,"importNode"),document.registerElement=t,document.createElement=p,document.createElementNS=f,e.registry=y,e["instanceof"]=w,e.reservedTagList=_,e.getRegisteredDefinition=u,document.register=document.registerElement}),function(e){function t(){i(window.wrap(document)),window.CustomElements.ready=!0;var e=window.requestAnimationFrame||function(e){setTimeout(e,16)};e(function(){setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})})}var n=e.useNative,o=e.initializeModules;e.isIE;if(n){var r=function(){};e.watchShadow=r,e.upgrade=r,e.upgradeAll=r,e.upgradeDocumentTree=r,e.upgradeSubtree=r,e.takeRecords=r,e["instanceof"]=function(e,t){return e instanceof t}}else o();var i=e.upgradeDocumentTree,a=e.upgradeDocument;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){e["import"]&&a(wrap(e["import"]))}),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var d=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(d,t)}else t()}(window.CustomElements); +if(typeof Math.imul == "undefined" || (Math.imul(0xffffffff,5) == 0)) { + Math.imul = function (a, b) { + var ah = (a >>> 16) & 0xffff; + var al = a & 0xffff; + var bh = (b >>> 16) & 0xffff; + var bl = b & 0xffff; + // the shift by 0 fixes the sign on the high part + // the final |0 converts the unsigned value into a signed value + return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0); + } +} + +/** + * React v15.5.4 + * + * Copyright 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.React=t()}}(function(){return function t(e,n,r){function o(u,a){if(!n[u]){if(!e[u]){var s="function"==typeof require&&require;if(!a&&s)return s(u,!0);if(i)return i(u,!0);var c=new Error("Cannot find module '"+u+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[u]={exports:{}};e[u][0].call(l.exports,function(t){var n=e[u][1][t];return o(n||t)},l,l.exports,t,e,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u1){for(var y=Array(d),h=0;h1){for(var m=Array(v),b=0;b8&&C<=11),x=32,w=String.fromCharCode(x),T={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},k=!1,P=null,S={eventTypes:T,extractEvents:function(e,t,n,r){return[u(e,t,n,r),p(e,t,n,r)]}};t.exports=S},{123:123,19:19,20:20,78:78,82:82}],4:[function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},i=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){i.forEach(function(t){o[r(t,e)]=o[e]})});var a={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},s={isUnitlessNumber:o,shorthandPropertyExpansions:a};t.exports=s},{}],5:[function(e,t,n){"use strict";var r=e(4),o=e(123),i=(e(58),e(125),e(94)),a=e(136),s=e(140),u=(e(142),s(function(e){return a(e)})),l=!1,c="cssFloat";if(o.canUseDOM){var p=document.createElement("div").style;try{p.font=""}catch(e){l=!0}void 0===document.documentElement.style.cssFloat&&(c="styleFloat")}var d={createMarkupForStyles:function(e,t){var n="";for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];null!=o&&(n+=u(r)+":",n+=i(r,o,t)+";")}return n||null},setValueForStyles:function(e,t,n){var o=e.style;for(var a in t)if(t.hasOwnProperty(a)){var s=i(a,t[a],n);if("float"!==a&&"cssFloat"!==a||(a=c),s)o[a]=s;else{var u=l&&r.shorthandPropertyExpansions[a];if(u)for(var p in u)o[p]="";else o[a]=""}}}};t.exports=d},{123:123,125:125,136:136,140:140,142:142,4:4,58:58,94:94}],6:[function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=e(112),i=e(24),a=(e(137),function(){function e(t){r(this,e),this._callbacks=null,this._contexts=null,this._arg=t}return e.prototype.enqueue=function(e,t){this._callbacks=this._callbacks||[],this._callbacks.push(e),this._contexts=this._contexts||[],this._contexts.push(t)},e.prototype.notifyAll=function(){var e=this._callbacks,t=this._contexts,n=this._arg;if(e&&t){e.length!==t.length&&o("24"),this._callbacks=null,this._contexts=null;for(var r=0;r8));var A=!1;b.canUseDOM&&(A=k("input")&&(!document.documentMode||document.documentMode>11));var D={get:function(){return O.get.call(this)},set:function(e){I=""+e,O.set.call(this,e)}},L={eventTypes:S,extractEvents:function(e,t,n,o){var i,a,s=t?E.getNodeFromInstance(t):window;if(r(s)?R?i=u:a=l:P(s)?A?i=f:(i=m,a=h):v(s)&&(i=g),i){var c=i(e,t);if(c){var p=w.getPooled(S.change,c,n,o);return p.type="change",C.accumulateTwoPhaseDispatches(p),p}}a&&a(e,s,t),"topBlur"===e&&y(t,s)}};t.exports=L},{102:102,109:109,110:110,123:123,16:16,19:19,33:33,71:71,80:80}],8:[function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){c.insertTreeBefore(e,t,n)}function i(e,t,n){Array.isArray(t)?s(e,t[0],t[1],n):m(e,t,n)}function a(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],u(e,t,n),e.removeChild(n)}e.removeChild(t)}function s(e,t,n,r){for(var o=t;;){var i=o.nextSibling;if(m(e,o,r),o===n)break;o=i}}function u(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function l(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&m(r,document.createTextNode(n),o):n?(h(o,n),u(r,o,t)):u(r,e,t)}var c=e(9),p=e(13),d=(e(33),e(58),e(93)),f=e(114),h=e(115),m=d(function(e,t,n){e.insertBefore(t,n)}),v=p.dangerouslyReplaceNodeWithMarkup,g={dangerouslyReplaceNodeWithMarkup:v,replaceDelimitedText:l,processUpdates:function(e,t){for(var n=0;n-1||a("96",e),!l.plugins[n]){t.extractEvents||a("97",e),l.plugins[n]=t;var r=t.eventTypes;for(var i in r)o(r[i],t,i)||a("98",i,e)}}}function o(e,t,n){l.eventNameDispatchConfigs.hasOwnProperty(n)&&a("99",n),l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var s=r[o];i(s,t,n)}return!0}return!!e.registrationName&&(i(e.registrationName,t,n),!0)}function i(e,t,n){l.registrationNameModules[e]&&a("100",e),l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=e(112),s=(e(137),null),u={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){s&&a("101"),s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];u.hasOwnProperty(n)&&u[n]===o||(u[n]&&a("102",n),u[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var o=l.registrationNameModules[n[r]];if(o)return o}}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},{112:112,137:137}],18:[function(e,t,n){"use strict";function r(e){return"topMouseUp"===e||"topTouchEnd"===e||"topTouchCancel"===e}function o(e){return"topMouseMove"===e||"topTouchMove"===e}function i(e){return"topMouseDown"===e||"topTouchStart"===e}function a(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=g.getNodeFromInstance(r),t?m.invokeGuardedCallbackWithCatch(o,n,e):m.invokeGuardedCallback(o,n,e),e.currentTarget=null}function s(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o1?1-t:void 0;return this._fallbackText=o.slice(e,s),this._fallbackText}}),i.addPoolingTo(r),t.exports=r},{106:106,143:143,24:24}],21:[function(e,t,n){"use strict";var r=e(11),o=r.injection.MUST_USE_PROPERTY,i=r.injection.HAS_BOOLEAN_VALUE,a=r.injection.HAS_NUMERIC_VALUE,s=r.injection.HAS_POSITIVE_NUMERIC_VALUE,u=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,l={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:i,allowTransparency:0,alt:0,as:0,async:i,autoComplete:0,autoPlay:i,capture:i,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|i,cite:0,classID:0,className:0,cols:s,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:i,coords:0,crossOrigin:0,data:0,dateTime:0,default:i,defer:i,dir:0,disabled:i,download:u,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:i,formTarget:0,frameBorder:0,headers:0,height:0,hidden:i,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:i,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|i,muted:o|i,name:0,nonce:0,noValidate:i,open:i,optimum:0,pattern:0,placeholder:0,playsInline:i,poster:0,preload:0,profile:0,radioGroup:0,readOnly:i,referrerPolicy:0,rel:0,required:i,reversed:i,role:0,rows:s,rowSpan:a,sandbox:0,scope:0,scoped:i,scrolling:0,seamless:i,selected:o|i,shape:0,size:s,sizes:0,span:s,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:a,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:i,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{},DOMMutationMethods:{value:function(e,t){if(null==t)return e.removeAttribute("value");"number"!==e.type||!1===e.hasAttribute("value")?e.setAttribute("value",""+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute("value",""+t)}}};t.exports=l},{11:11}],22:[function(e,t,n){"use strict";function r(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function o(e){var t={"=0":"=","=2":":"};return(""+("."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1))).replace(/(=0|=2)/g,function(e){return t[e]})}var i={escape:r,unescape:o};t.exports=i},{}],23:[function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink&&s("87")}function o(e){r(e),(null!=e.value||null!=e.onChange)&&s("88")}function i(e){r(e),(null!=e.checked||null!=e.onChange)&&s("89")}function a(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var s=e(112),u=e(64),l=e(145),c=e(120),p=l(c.isValidElement),d=(e(137),e(142),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),f={value:function(e,t,n){return!e[t]||d[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:p.func},h={},m={checkPropTypes:function(e,t,n){for(var r in f){if(f.hasOwnProperty(r))var o=f[r](t,r,e,"prop",null,u);o instanceof Error&&!(o.message in h)&&(h[o.message]=!0,a(n))}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(i(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(i(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};t.exports=m},{112:112,120:120,137:137,142:142,145:145,64:64}],24:[function(e,t,n){"use strict";var r=e(112),o=(e(137),function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)}),i=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},a=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},s=function(e,t,n,r){var o=this;if(o.instancePool.length){var i=o.instancePool.pop();return o.call(i,e,t,n,r),i}return new o(e,t,n,r)},u=function(e){var t=this;e instanceof t||r("25"),e.destructor(),t.instancePool.length=0||null!=t.is}function h(e){var t=e.type;d(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var m=e(112),v=e(143),g=e(2),y=e(5),_=e(9),C=e(10),b=e(11),E=e(12),x=e(16),w=e(17),T=e(25),k=e(32),P=e(33),S=e(38),N=e(39),M=e(40),I=e(43),O=(e(58),e(61)),R=e(68),A=(e(129),e(95)),D=(e(137),e(109),e(141),e(118),e(142),k),L=x.deleteListener,U=P.getNodeFromInstance,F=T.listenTo,j=w.registrationNameModules,V={string:!0,number:!0},B="__html",W={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},H=11,q={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},K={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},z={listing:!0,pre:!0,textarea:!0},Y=v({menuitem:!0},K),X=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Q={},G={}.hasOwnProperty,$=1;h.displayName="ReactDOMComponent",h.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=$++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var i=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(c,this);break;case"input":S.mountWrapper(this,i,t),i=S.getHostProps(this,i),e.getReactMountReady().enqueue(c,this);break;case"option":N.mountWrapper(this,i,t),i=N.getHostProps(this,i);break;case"select":M.mountWrapper(this,i,t),i=M.getHostProps(this,i),e.getReactMountReady().enqueue(c,this);break;case"textarea":I.mountWrapper(this,i,t),i=I.getHostProps(this,i),e.getReactMountReady().enqueue(c,this)}o(this,i);var a,p;null!=t?(a=t._namespaceURI,p=t._tag):n._tag&&(a=n._namespaceURI,p=n._tag),(null==a||a===C.svg&&"foreignobject"===p)&&(a=C.html),a===C.html&&("svg"===this._tag?a=C.svg:"math"===this._tag&&(a=C.mathml)),this._namespaceURI=a;var d;if(e.useCreateElement){var f,h=n._ownerDocument;if(a===C.html)if("script"===this._tag){var m=h.createElement("div"),v=this._currentElement.type;m.innerHTML="<"+v+">",f=m.removeChild(m.firstChild)}else f=i.is?h.createElement(this._currentElement.type,i.is):h.createElement(this._currentElement.type);else f=h.createElementNS(a,this._currentElement.type);P.precacheNode(this,f),this._flags|=D.hasCachedChildNodes,this._hostParent||E.setAttributeForRoot(f),this._updateDOMProperties(null,i,e);var y=_(f);this._createInitialChildren(e,i,r,y),d=y}else{var b=this._createOpenTagMarkupAndPutListeners(e,i),x=this._createContentMarkup(e,i,r);d=!x&&K[this._tag]?b+"/>":b+">"+x+""}switch(this._tag){case"input":e.getReactMountReady().enqueue(s,this),i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"textarea":e.getReactMountReady().enqueue(u,this),i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"select":case"button":i.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(l,this)}return d},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var o=t[r];if(null!=o)if(j.hasOwnProperty(r))o&&i(this,r,o,e);else{"style"===r&&(o&&(o=this._previousStyleCopy=v({},t.style)),o=y.createMarkupForStyles(o,this));var a=null;null!=this._tag&&f(this._tag,t)?W.hasOwnProperty(r)||(a=E.createMarkupForCustomAttribute(r,o)):a=E.createMarkupForProperty(r,o),a&&(n+=" "+a)}}return e.renderToStaticMarkup?n:(this._hostParent||(n+=" "+E.createMarkupForRoot()),n+=" "+E.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r="",o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&(r=o.__html);else{var i=V[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)r=A(i);else if(null!=a){var s=this.mountChildren(a,e,n);r=s.join("")}}return z[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var o=t.dangerouslySetInnerHTML;if(null!=o)null!=o.__html&&_.queueHTML(r,o.__html);else{var i=V[typeof t.children]?t.children:null,a=null!=i?null:t.children;if(null!=i)""!==i&&_.queueText(r,i);else if(null!=a)for(var s=this.mountChildren(a,e,n),u=0;u"},receiveComponent:function(){},getHostNode:function(){return i.getNodeFromInstance(this)},unmountComponent:function(){i.uncacheNode(this)}}),t.exports=a},{143:143,33:33,9:9}],36:[function(e,t,n){"use strict";var r={useCreateElement:!0,useFiber:!1};t.exports=r},{}],37:[function(e,t,n){"use strict";var r=e(8),o=e(33),i={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};t.exports=i},{33:33,8:8}],38:[function(e,t,n){"use strict";function r(){this._rootNodeID&&d.updateWrapper(this)}function o(e){return"checkbox"===e.type||"radio"===e.type?null!=e.checked:null!=e.value}function i(e){var t=this._currentElement.props,n=l.executeOnChange(t,e);p.asap(r,this);var o=t.name;if("radio"===t.type&&null!=o){for(var i=c.getNodeFromInstance(this),s=i;s.parentNode;)s=s.parentNode;for(var u=s.querySelectorAll("input[name="+JSON.stringify(""+o)+'][type="radio"]'),d=0;dt.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i=void 0===t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var s=l(e,o),u=l(e,i);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=e(123),l=e(105),c=e(106),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:i,setOffsets:p?a:s};t.exports=d},{105:105,106:106,123:123}],42:[function(e,t,n){"use strict";var r=e(112),o=e(143),i=e(8),a=e(9),s=e(33),u=e(95),l=(e(137),e(118),function(e){this._currentElement=e,this._stringText=""+e, +this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});o(l.prototype,{mountComponent:function(e,t,n,r){var o=n._idCounter++,i=" react-text: "+o+" ";if(this._domID=o,this._hostParent=t,e.useCreateElement){var l=n._ownerDocument,c=l.createComment(i),p=l.createComment(" /react-text "),d=a(l.createDocumentFragment());return a.queueChild(d,a(c)),this._stringText&&a.queueChild(d,a(l.createTextNode(this._stringText))),a.queueChild(d,a(p)),s.precacheNode(this,c),this._closingComment=p,d}var f=u(this._stringText);return e.renderToStaticMarkup?f:""+f+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();i.replaceDelimitedText(r[0],r[1],n)}}},getHostNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=s.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n&&r("67",this._domID),8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._hostNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),t.exports=l},{112:112,118:118,137:137,143:143,33:33,8:8,9:9,95:95}],43:[function(e,t,n){"use strict";function r(){this._rootNodeID&&c.updateWrapper(this)}function o(e){var t=this._currentElement.props,n=s.executeOnChange(t,e);return l.asap(r,this),n}var i=e(112),a=e(143),s=e(23),u=e(33),l=e(71),c=(e(137),e(142),{getHostProps:function(e,t){return null!=t.dangerouslySetInnerHTML&&i("91"),a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue,onChange:e._wrapperState.onChange})},mountWrapper:function(e,t){var n=s.getValue(t),r=n;if(null==n){var a=t.defaultValue,u=t.children;null!=u&&(null!=a&&i("92"),Array.isArray(u)&&(u.length<=1||i("93"),u=u[0]),a=""+u),null==a&&(a=""),r=a}e._wrapperState={initialValue:""+r,listeners:null,onChange:o.bind(e)}},updateWrapper:function(e){var t=e._currentElement.props,n=u.getNodeFromInstance(e),r=s.getValue(t);if(null!=r){var o=""+r;o!==n.value&&(n.value=o),null==t.defaultValue&&(n.defaultValue=o)}null!=t.defaultValue&&(n.defaultValue=t.defaultValue)},postMountWrapper:function(e){var t=u.getNodeFromInstance(e),n=t.textContent;n===e._wrapperState.initialValue&&(t.value=n)}});t.exports=c},{112:112,137:137,142:142,143:143,23:23,33:33,71:71}],44:[function(e,t,n){"use strict";function r(e,t){"_hostNode"in e||u("33"),"_hostNode"in t||u("33");for(var n=0,r=e;r;r=r._hostParent)n++;for(var o=0,i=t;i;i=i._hostParent)o++;for(;n-o>0;)e=e._hostParent,n--;for(;o-n>0;)t=t._hostParent,o--;for(var a=n;a--;){if(e===t)return e;e=e._hostParent,t=t._hostParent}return null}function o(e,t){"_hostNode"in e||u("35"),"_hostNode"in t||u("35");for(;t;){if(t===e)return!0;t=t._hostParent}return!1}function i(e){return"_hostNode"in e||u("36"),e._hostParent}function a(e,t,n){for(var r=[];e;)r.push(e),e=e._hostParent;var o;for(o=r.length;o-- >0;)t(r[o],"captured",n);for(o=0;o0;)n(u[l],"captured",i)}var u=e(112);e(137);t.exports={isAncestor:o,getLowestCommonAncestor:r,getParentInstance:i,traverseTwoPhase:a,traverseEnterLeave:s}},{112:112,137:137}],45:[function(e,t,n){"use strict";var r=e(120),o=e(30),i=o;r.addons&&(r.__SECRET_INJECTED_REACT_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=i),t.exports=i},{120:120,30:30}],46:[function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var o=e(143),i=e(71),a=e(89),s=e(129),u={initialize:s,close:function(){d.isBatchingUpdates=!1}},l={initialize:s,close:i.flushBatchedUpdates.bind(i)},c=[l,u];o(r.prototype,a,{getTransactionWrappers:function(){return c}});var p=new r,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o,i){var a=d.isBatchingUpdates;return d.isBatchingUpdates=!0,a?e(t,n,r,o,i):p.perform(e,null,t,n,r,o,i)}};t.exports=d},{129:129,143:143,71:71,89:89}],47:[function(e,t,n){"use strict";function r(){x||(x=!0,y.EventEmitter.injectReactEventListener(g),y.EventPluginHub.injectEventPluginOrder(s),y.EventPluginUtils.injectComponentTree(d),y.EventPluginUtils.injectTreeTraversal(h),y.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:E,EnterLeaveEventPlugin:u,ChangeEventPlugin:a,SelectEventPlugin:b,BeforeInputEventPlugin:i}),y.HostComponent.injectGenericComponentClass(p),y.HostComponent.injectTextComponentClass(m),y.DOMProperty.injectDOMPropertyConfig(o),y.DOMProperty.injectDOMPropertyConfig(l),y.DOMProperty.injectDOMPropertyConfig(C),y.EmptyComponent.injectEmptyComponentFactory(function(e){return new f(e)}),y.Updates.injectReconcileTransaction(_),y.Updates.injectBatchingStrategy(v),y.Component.injectEnvironment(c))}var o=e(1),i=e(3),a=e(7),s=e(14),u=e(15),l=e(21),c=e(27),p=e(31),d=e(33),f=e(35),h=e(44),m=e(42),v=e(46),g=e(52),y=e(55),_=e(65),C=e(73),b=e(74),E=e(75),x=!1;t.exports={inject:r}},{1:1,14:14,15:15,21:21,27:27,3:3,31:31,33:33,35:35,42:42,44:44,46:46,52:52,55:55,65:65,7:7,73:73,74:74,75:75}],48:[function(e,t,n){"use strict";var r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103;t.exports=r},{}],49:[function(e,t,n){"use strict";var r,o={injectEmptyComponentFactory:function(e){r=e}},i={create:function(e){return r(e)}};i.injection=o,t.exports=i},{}],50:[function(e,t,n){"use strict";function r(e,t,n){try{t(n)}catch(e){null===o&&(o=e)}}var o=null,i={invokeGuardedCallback:r,invokeGuardedCallbackWithCatch:r,rethrowCaughtError:function(){if(o){var e=o;throw o=null,e}}};t.exports=i},{}],51:[function(e,t,n){"use strict";function r(e){o.enqueueEvents(e),o.processEventQueue(!1)}var o=e(16),i={handleTopLevel:function(e,t,n,i){r(o.extractEvents(e,t,n,i))}};t.exports=i},{16:16}],52:[function(e,t,n){"use strict";function r(e){for(;e._hostParent;)e=e._hostParent;var t=p.getNodeFromInstance(e),n=t.parentNode;return p.getClosestInstanceFromNode(n)}function o(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function i(e){var t=f(e.nativeEvent),n=p.getClosestInstanceFromNode(t),o=n;do{e.ancestors.push(o),o=o&&r(o)}while(o);for(var i=0;i/," "+i.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(i.CHECKSUM_ATTR_NAME);return n=n&&parseInt(n,10),r(e)===n}};t.exports=i},{92:92}],60:[function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;r.":"function"==typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var a,s=v.createElement(F,{child:t});if(e){var u=E.get(e);a=u._processChildContext(u._context)}else a=P;var c=d(n);if(c){var p=c._currentElement,h=p.props.child;if(M(h,t)){var m=c._renderedComponent.getPublicInstance(),g=r&&function(){r.call(m)};return j._updateRootComponent(c,s,a,n,g),m}j.unmountComponentAtNode(n)}var y=o(n),_=y&&!!i(y),C=l(n),b=_&&!c&&!C,x=j._renderNewRootComponent(s,n,b,a)._renderedComponent.getPublicInstance();return r&&r.call(x),x},render:function(e,t,n){return j._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){c(e)||f("40");var t=d(e);return t?(delete L[t._instance.rootID],k.batchedUpdates(u,t,e,!1),!0):(l(e),1===e.nodeType&&e.hasAttribute(O),!1)},_mountImageIntoNode:function(e,t,n,i,a){if(c(t)||f("41"),i){var s=o(t);if(x.canReuseMarkup(e,s))return void y.precacheNode(n,s);var u=s.getAttribute(x.CHECKSUM_ATTR_NAME);s.removeAttribute(x.CHECKSUM_ATTR_NAME);var l=s.outerHTML;s.setAttribute(x.CHECKSUM_ATTR_NAME,u);var p=e,d=r(p,l),m=" (client) "+p.substring(d-20,d+20)+"\n (server) "+l.substring(d-20,d+20);t.nodeType===A&&f("42",m)}if(t.nodeType===A&&f("43"),a.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);h.insertTreeBefore(t,e,null)}else N(t,e),y.precacheNode(n,t.firstChild)}};t.exports=j},{108:108,11:11,112:112,114:114,116:116,119:119,120:120,130:130,137:137,142:142,25:25,33:33,34:34,36:36,53:53,57:57,58:58,59:59,66:66,70:70,71:71,9:9}],61:[function(e,t,n){"use strict";function r(e,t,n){return{type:"INSERT_MARKUP",content:e,fromIndex:null,fromNode:null,toIndex:n,afterNode:t}}function o(e,t,n){return{type:"MOVE_EXISTING",content:null,fromIndex:e._mountIndex,fromNode:d.getHostNode(e),toIndex:n,afterNode:t}}function i(e,t){return{type:"REMOVE_NODE",content:null,fromIndex:e._mountIndex,fromNode:t,toIndex:null,afterNode:null}}function a(e){return{type:"SET_MARKUP",content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function s(e){return{type:"TEXT_CONTENT",content:e,fromIndex:null,fromNode:null,toIndex:null,afterNode:null}}function u(e,t){return t&&(e=e||[],e.push(t)),e}function l(e,t){p.processChildrenUpdates(e,t)}var c=e(112),p=e(28),d=(e(57),e(58),e(119),e(66)),f=e(26),h=(e(129),e(97)),m=(e(137),{Mixin:{_reconcilerInstantiateChildren:function(e,t,n){return f.instantiateChildren(e,t,n)},_reconcilerUpdateChildren:function(e,t,n,r,o,i){var a;return a=h(t,0),f.updateChildren(e,a,n,r,o,this,this._hostContainerInfo,i,0),a},mountChildren:function(e,t,n){var r=this._reconcilerInstantiateChildren(e,t,n);this._renderedChildren=r;var o=[],i=0;for(var a in r)if(r.hasOwnProperty(a)){var s=r[a],u=d.mountComponent(s,t,this,this._hostContainerInfo,n,0);s._mountIndex=i++,o.push(u)}return o},updateTextContent:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");l(this,[s(e)])},updateMarkup:function(e){var t=this._renderedChildren;f.unmountChildren(t,!1);for(var n in t)t.hasOwnProperty(n)&&c("118");l(this,[a(e)])},updateChildren:function(e,t,n){this._updateChildren(e,t,n)},_updateChildren:function(e,t,n){var r=this._renderedChildren,o={},i=[],a=this._reconcilerUpdateChildren(r,e,i,o,t,n);if(a||r){var s,c=null,p=0,f=0,h=0,m=null;for(s in a)if(a.hasOwnProperty(s)){var v=r&&r[s],g=a[s];v===g?(c=u(c,this.moveChild(v,m,p,f)),f=Math.max(v._mountIndex,f),v._mountIndex=p):(v&&(f=Math.max(v._mountIndex,f)),c=u(c,this._mountChildAtIndex(g,i[h],m,p,t,n)),h++),p++,m=d.getHostNode(g)}for(s in o)o.hasOwnProperty(s)&&(c=u(c,this._unmountChild(r[s],o[s])));c&&l(this,c),this._renderedChildren=a}},unmountChildren:function(e){var t=this._renderedChildren;f.unmountChildren(t,e),this._renderedChildren=null},moveChild:function(e,t,n,r){if(e._mountIndex0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function i(e,t){var n=s.get(e);return n||null}var a=e(112),s=(e(119),e(57)),u=(e(58),e(71)),l=(e(137),e(142),{isMounted:function(e){var t=s.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){l.validateCallback(t,n);var o=i(e);if(!o)return null;o._pendingCallbacks?o._pendingCallbacks.push(t):o._pendingCallbacks=[t],r(o)},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=i(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t,n){var o=i(e,"replaceState");o&&(o._pendingStateQueue=[t],o._pendingReplaceState=!0,void 0!==n&&null!==n&&(l.validateCallback(n,"replaceState"),o._pendingCallbacks?o._pendingCallbacks.push(n):o._pendingCallbacks=[n]),r(o))},enqueueSetState:function(e,t){var n=i(e,"setState");n&&((n._pendingStateQueue||(n._pendingStateQueue=[])).push(t),r(n))},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,r(e)},validateCallback:function(e,t){e&&"function"!=typeof e&&a("122",t,o(e))}});t.exports=l},{112:112,119:119,137:137,142:142,57:57,58:58,71:71}],71:[function(e,t,n){"use strict";function r(){P.ReactReconcileTransaction&&b||c("123")}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=d.getPooled(),this.reconcileTransaction=P.ReactReconcileTransaction.getPooled(!0)}function i(e,t,n,o,i,a){return r(),b.batchedUpdates(e,t,n,o,i,a)}function a(e,t){return e._mountOrder-t._mountOrder}function s(e){var t=e.dirtyComponentsLength;t!==g.length&&c("124",t,g.length),g.sort(a),y++;for(var n=0;n]/;t.exports=o},{}],96:[function(e,t,n){"use strict";function r(e){if(null==e)return null;if(1===e.nodeType)return e;var t=a.get(e);if(t)return t=s(t),t?i.getNodeFromInstance(t):null;"function"==typeof e.render?o("44"):o("45",Object.keys(e))}var o=e(112),i=(e(119),e(33)),a=e(57),s=e(103);e(137),e(142);t.exports=r},{103:103,112:112,119:119,137:137,142:142,33:33,57:57}],97:[function(e,t,n){(function(n){"use strict";function r(e,t,n,r){if(e&&"object"==typeof e){var o=e;void 0===o[n]&&null!=t&&(o[n]=t)}}function o(e,t){if(null==e)return e;var n={};return i(e,r,n),n}var i=(e(22),e(117));e(142);void 0!==n&&n.env,t.exports=o}).call(this,void 0)},{117:117,142:142,22:22}],98:[function(e,t,n){"use strict";function r(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}t.exports=r},{}],99:[function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?0===(t=e.charCode)&&13===n&&(t=13):t=n,t>=32||13===t?t:0}t.exports=r},{}],100:[function(e,t,n){"use strict";function r(e){if(e.key){var t=i[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var o=e(99),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},{99:99}],101:[function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=i[e];return!!r&&!!n[r]}function o(e){return r}var i={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=o},{}],102:[function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}t.exports=r},{}],103:[function(e,t,n){"use strict";function r(e){for(var t;(t=e._renderedNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.HOST?e._renderedComponent:t===o.EMPTY?null:void 0}var o=e(62);t.exports=r},{62:62}],104:[function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[i]);if("function"==typeof t)return t}var o="function"==typeof Symbol&&Symbol.iterator,i="@@iterator";t.exports=r},{}],105:[function(e,t,n){"use strict";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function i(e,t){for(var n=r(e),i=0,a=0;n;){if(3===n.nodeType){if(a=i+n.textContent.length,i<=t&&a>=t)return{node:n,offset:t-i};i=a}n=r(o(n))}}t.exports=i},{}],106:[function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=e(123),i=null;t.exports=r},{123:123}],107:[function(e,t,n){"use strict";function r(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function o(e){if(s[e])return s[e];if(!a[e])return e;var t=a[e];for(var n in t)if(t.hasOwnProperty(n)&&n in u)return s[e]=t[n];return""}var i=e(123),a={animationend:r("Animation","AnimationEnd"),animationiteration:r("Animation","AnimationIteration"),animationstart:r("Animation","AnimationStart"),transitionend:r("Transition","TransitionEnd")},s={},u={};i.canUseDOM&&(u=document.createElement("div").style,"AnimationEvent"in window||(delete a.animationend.animation,delete a.animationiteration.animation,delete a.animationstart.animation),"TransitionEvent"in window||delete a.transitionend.transition),t.exports=o},{123:123}],108:[function(e,t,n){"use strict";function r(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}function o(e){return"function"==typeof e&&void 0!==e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function i(e,t){var n;if(null===e||!1===e)n=l.create(i);else if("object"==typeof e){var s=e,u=s.type;if("function"!=typeof u&&"string"!=typeof u){var d="";d+=r(s._owner),a("130",null==u?u:typeof u,d)}"string"==typeof s.type?n=c.createInternalComponent(s):o(s.type)?(n=new s.type(s),n.getHostNode||(n.getHostNode=n.getNativeNode)):n=new p(s)}else"string"==typeof e||"number"==typeof e?n=c.createInstanceForText(e):a("131",typeof e);return n._mountIndex=0,n._mountImage=null,n}var a=e(112),s=e(143),u=e(29),l=e(49),c=e(54),p=(e(121),e(137),e(142),function(e){this.construct(e)});s(p.prototype,u,{_instantiateReactComponent:i}),t.exports=i},{112:112,121:121,137:137,142:142,143:143,29:29,49:49,54:54}],109:[function(e,t,n){"use strict";function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=e(123);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),t.exports=r},{123:123}],110:[function(e,t,n){"use strict";function r(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!o[e.type]:"textarea"===t}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=r},{}],111:[function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=e(95);t.exports=r},{95:95}],112:[function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r]/,u=e(93),l=u(function(e,t){if(e.namespaceURI!==i.svg||"innerHTML"in e)e.innerHTML=t;else{r=r||document.createElement("div"),r.innerHTML=""+t+"";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(o.canUseDOM){var c=document.createElement("div");c.innerHTML=" ",""===c.innerHTML&&(l=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||"<"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),c=null}t.exports=l},{10:10,123:123,93:93}],115:[function(e,t,n){"use strict";var r=e(123),o=e(95),i=e(114),a=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){if(3===e.nodeType)return void(e.nodeValue=t);i(e,o(t))})),t.exports=a},{114:114,123:123,95:95}],116:[function(e,t,n){"use strict";function r(e,t){var n=null===e||!1===e,r=null===t||!1===t;if(n||r)return n===r;var o=typeof e,i=typeof t;return"string"===o||"number"===o?"string"===i||"number"===i:"object"===i&&e.type===t.type&&e.key===t.key}t.exports=r},{}],117:[function(e,t,n){"use strict";function r(e,t){return e&&"object"==typeof e&&null!=e.key?l.escape(e.key):t.toString(36)}function o(e,t,n,i){var d=typeof e;if("undefined"!==d&&"boolean"!==d||(e=null),null===e||"string"===d||"number"===d||"object"===d&&e.$$typeof===s)return n(i,e,""===t?c+r(e,0):t),1;var f,h,m=0,v=""===t?c:t+p;if(Array.isArray(e))for(var g=0;g":"<"+e+">",s[e]=!a.firstChild),s[e]?d[e]:null}var o=e(123),i=e(137),a=o.canUseDOM?document.createElement("div"):null,s={},u=[1,'"],l=[1,"","
    "],c=[3,"","
    "],p=[1,'',""],d={"*":[1,"?
    ","
    "],area:[1,"",""],col:[2,"","
    "],legend:[1,"
    ","
    "],param:[1,"",""],tr:[2,"","
    "],optgroup:u,option:u,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c};["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"].forEach(function(e){d[e]=p,s[e]=!0}),t.exports=r},{123:123,137:137}],134:[function(e,t,n){"use strict";function r(e){return e.Window&&e instanceof e.Window?{x:e.pageXOffset||e.document.documentElement.scrollLeft,y:e.pageYOffset||e.document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=r},{}],135:[function(e,t,n){"use strict";function r(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;t.exports=r},{}],136:[function(e,t,n){"use strict";function r(e){return o(e).replace(i,"-ms-")}var o=e(135),i=/^ms-/;t.exports=r},{135:135}],137:[function(e,t,n){"use strict";function r(e,t,n,r,i,a,s,u){if(o(t),!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,i,a,s,u],p=0;l=new Error(t.replace(/%s/g,function(){return c[p++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}}var o=function(e){};t.exports=r},{}],138:[function(e,t,n){"use strict";function r(e){var t=e?e.ownerDocument||e:document,n=t.defaultView||window;return!(!e||!("function"==typeof n.Node?e instanceof n.Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=r},{}],139:[function(e,t,n){"use strict";function r(e){return o(e)&&3==e.nodeType}var o=e(138);t.exports=r},{138:138}],140:[function(e,t,n){"use strict";function r(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=r},{}],141:[function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var a=0;a 0x10FFFF || // not a valid Unicode code point + floor(codePoint) != codePoint // not an integer + ) { + throw RangeError('Invalid code point: ' + codePoint); + } + if (codePoint <= 0xFFFF) { // BMP code point + codeUnits.push(codePoint); + } else { // Astral code point; split in surrogate halves + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + codePoint -= 0x10000; + highSurrogate = (codePoint >> 10) + 0xD800; + lowSurrogate = (codePoint % 0x400) + 0xDC00; + codeUnits.push(highSurrogate, lowSurrogate); + } + if (index + 1 == length || codeUnits.length > MAX_SIZE) { + result += stringFromCharCode.apply(null, codeUnits); + codeUnits.length = 0; + } + } + return result; + }; + if (defineProperty) { + defineProperty(String, 'fromCodePoint', { + 'value': fromCodePoint, + 'configurable': true, + 'writable': true + }); + } else { + String.fromCodePoint = fromCodePoint; + } + }()); +} + +/*! http://mths.be/codepointat v0.1.0 by @mathias */ +if (!String.prototype.codePointAt) { + (function() { + 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` + var codePointAt = function(position) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size = string.length; + // `ToInteger` + var index = position ? Number(position) : 0; + if (index != index) { // better `isNaN` + index = 0; + } + // Account for out-of-bounds indices: + if (index < 0 || index >= size) { + return undefined; + } + // Get the first code unit + var first = string.charCodeAt(index); + var second; + if ( // check if it’s the start of a surrogate pair + first >= 0xD800 && first <= 0xDBFF && // high surrogate + size > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; + }; + if (Object.defineProperty) { + Object.defineProperty(String.prototype, 'codePointAt', { + 'value': codePointAt, + 'configurable': true, + 'writable': true + }); + } else { + String.prototype.codePointAt = codePointAt; + } + }()); +} + +function registerAsciinemaPlayerElement() { + var AsciinemaPlayerProto = Object.create(HTMLElement.prototype); + + function merge() { + var merged = {}; + for (var i=0; i>>0),ma=0;function na(a,b,c){return a.call.apply(a.bind,arguments)} +function oa(a,b,c){if(!a)throw Error();if(2b?1:0};var ua=Array.prototype.indexOf?function(a,b,c){return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(ca(a))return ca(b)&&1==b.length?a.indexOf(b,c):-1;for(;cb?null:ca(a)?a.charAt(b):a[b]}function ya(a,b){var c=ua(a,b),d;(d=0<=c)&&Array.prototype.splice.call(a,c,1);return d}function za(a,b){a.sort(b||Aa)}function Ca(a,b){for(var c=Array(a.length),d=0;db?1:a2*this.Fc&&Na(this),!0):!1};function Na(a){if(a.Fc!=a.ib.length){for(var b=0,c=0;ba){var b=Ra[a];if(b)return b}b=new Qa([a|0],0>a?-1:0);-128<=a&&128>a&&(Ra[a]=b);return b}function Ta(a){if(isNaN(a)||!isFinite(a))return Ua;if(0>a)return Ta(-a).kb();for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=Va;return new Qa(b,0)}var Va=4294967296,Ua=Sa(0),Wa=Sa(1),Xa=Sa(16777216);g=Qa.prototype; +g.Of=function(){return 0a||36>>0).toString(a);c=e;if(c.hc())return f+d;for(;6>f.length;)f="0"+f;d=""+f+d}};function Ya(a,b){return 0>b?0:bthis.compare(Xa)};g.Ve=function(a){return 0>=this.compare(a)};g.compare=function(a){a=this.ze(a);return a.Eb()?-1:a.hc()?0:1};g.kb=function(){return this.Hf().add(Wa)}; +g.add=function(a){for(var b=Math.max(this.Ma.length,a.Ma.length),c=[],d=0,e=0;e<=b;e++){var f=d+(Ya(this,e)&65535)+(Ya(a,e)&65535),h=(f>>>16)+(Ya(this,e)>>>16)+(Ya(a,e)>>>16);d=h>>>16;f&=65535;h&=65535;c[e]=h<<16|f}return new Qa(c,c[c.length-1]&-2147483648?-1:0)};g.ze=function(a){return this.add(a.kb())}; +g.multiply=function(a){if(this.hc()||a.hc())return Ua;if(this.Eb())return a.Eb()?this.kb().multiply(a.kb()):this.kb().multiply(a).kb();if(a.Eb())return this.multiply(a.kb()).kb();if(this.Ue()&&a.Ue())return Ta(this.vd()*a.vd());for(var b=this.Ma.length+a.Ma.length,c=[],d=0;d<2*b;d++)c[d]=0;for(d=0;d>>16,h=Ya(this,d)&65535,k=Ya(a,e)>>>16,l=Ya(a,e)&65535;c[2*d+2*e]+=h*l;ab(c,2*d+2*e);c[2*d+2*e+1]+=f*l;ab(c,2*d+2*e+1);c[2*d+2*e+1]+= +h*k;ab(c,2*d+2*e+1);c[2*d+2*e+2]+=f*k;ab(c,2*d+2*e+2)}for(d=0;d>>16,a[b]&=65535,b++} +function Za(a,b){if(b.hc())throw Error("division by zero");if(a.hc())return Ua;if(a.Eb())return b.Eb()?Za(a.kb(),b.kb()):Za(a.kb(),b).kb();if(b.Eb())return Za(a,b.kb()).kb();if(30=f?1:Math.pow(2,f-48);h=Ta(e);for(var k=h.multiply(b);k.Eb()||k.xf(d);)e-=f,h=Ta(e),k=h.multiply(b);h.hc()&&(h=Wa);c=c.add(h);d=d.ze(k)}return c}g.Hf=function(){for(var a=this.Ma.length,b=[],c=0;c>5;a%=32;for(var c=this.Ma.length+b+(0>>32-a:Ya(this,e-b);return new Qa(d,this.Lc)}; +g.ad=function(a){var b=a>>5;a%=32;for(var c=this.Ma.length-b,d=[],e=0;e>>a|Ya(this,e+b+1)<<32-a:Ya(this,e+b);return new Qa(d,this.Lc)};function cb(a,b){null!=a&&this.append.apply(this,arguments)}g=cb.prototype;g.xc="";g.set=function(a){this.xc=""+a};g.append=function(a,b,c){this.xc+=String(a);if(null!=b)for(var d=1;d>>16&65535)*d+c*(b>>>16&65535)<<16>>>0)|0};function hd(a){a=gd(a|0,-862048943);return gd(a<<15|a>>>-15,461845907)} +function id(a,b){var c=(a|0)^(b|0);return gd(c<<13|c>>>-13,5)+-430675100|0}function jd(a,b){var c=(a|0)^b;c=gd(c^c>>>16,-2048144789);c=gd(c^c>>>13,-1028477387);return c^c>>>16}function kd(a){a:{var b=1;for(var c=0;;)if(b>2)}function qd(a){return a instanceof rd} +function sd(a,b){if(a.Zb===b.Zb)return 0;var c=wb(a.fb);if(t(c?b.fb:c))return-1;if(t(a.fb)){if(wb(b.fb))return 1;c=Aa(a.fb,b.fb);return 0===c?Aa(a.name,b.name):c}return Aa(a.name,b.name)}function rd(a,b,c,d,e){this.fb=a;this.name=b;this.Zb=c;this.Oc=d;this.hb=e;this.m=2154168321;this.J=4096}g=rd.prototype;g.toString=function(){return this.Zb};g.equiv=function(a){return this.K(null,a)};g.K=function(a,b){return b instanceof rd?this.Zb===b.Zb:!1}; +g.call=function(){var a=null;a=function(a,c,d){switch(arguments.length){case 2:return D.c(c,this);case 3:return D.l(c,this,d)}throw Error("Invalid arity: "+(arguments.length-1));};a.c=function(a,c){return D.c(c,this)};a.l=function(a,c,d){return D.l(c,this,d)};return a}();g.apply=function(a,b){return this.call.apply(this,[this].concat(Gb(b)))};g.h=function(a){return D.c(a,this)};g.c=function(a,b){return D.l(a,this,b)};g.P=function(){return this.hb}; +g.T=function(a,b){return new rd(this.fb,this.name,this.Zb,this.Oc,b)};g.U=function(){var a=this.Oc;return null!=a?a:this.Oc=a=pd(kd(this.name),nd(this.fb))};g.hd=function(){return this.name};g.jd=function(){return this.fb};g.R=function(a,b){return Jc(b,this.Zb)};var td=function td(a){switch(arguments.length){case 1:return td.h(arguments[0]);case 2:return td.c(arguments[0],arguments[1]);default:throw Error(["Invalid arity: ",v.h(arguments.length)].join(""));}}; +td.h=function(a){if(a instanceof rd)return a;var b=a.indexOf("/");return 1>b?td.c(null,a):td.c(a.substring(0,b),a.substring(b+1,a.length))};td.c=function(a,b){var c=null!=a?[v.h(a),"/",v.h(b)].join(""):b;return new rd(a,b,c,null,null)};td.L=2;function ud(a){return null!=a?a.J&131072||q===a.Tf?!0:a.J?!1:Ab(cd,a):Ab(cd,a)} +function E(a){if(null==a)return null;if(null!=a&&(a.m&8388608||q===a.Pe))return a.S(null);if(vb(a)||"string"===typeof a)return 0===a.length?null:new Jb(a,0,null);if(Ab(Bc,a))return Cc(a);throw Error([v.h(a)," is not ISeqable"].join(""));}function y(a){if(null==a)return null;if(null!=a&&(a.m&64||q===a.G))return a.Ia(null);a=E(a);return null==a?null:Wb(a)}function vd(a){return null!=a?null!=a&&(a.m&64||q===a.G)?a.bb(null):(a=E(a))?Yb(a):wd:wd} +function z(a){return null==a?null:null!=a&&(a.m&128||q===a.Id)?a.Ka(null):E(vd(a))}var G=function G(a){switch(arguments.length){case 1:return G.h(arguments[0]);case 2:return G.c(arguments[0],arguments[1]);default:for(var c=[],d=arguments.length,e=0;;)if(e=d)return-1;!(0c&&(c+=d,c=0>c?0:c);for(;;)if(cc?d+c:c;for(;;)if(0<=c){if(G.c(Vd(a,c),b))return c;--c}else return-1}function Yd(a,b){this.o=a;this.i=b} +Yd.prototype.ja=function(){return this.ia?0:a};g.Rc=function(){var a=this.W(null);return 0d)c=1;else if(0===c)c=0;else a:for(d=0;;){var e=Ke(Vd(a,d),Vd(b,d));if(0===e&&d+1>1&1431655765;a=(a&858993459)+(a>>2&858993459);return 16843009*(a+(a>>4)&252645135)>>24} +var v=function v(a){switch(arguments.length){case 0:return v.B();case 1:return v.h(arguments[0]);default:for(var c=[],d=arguments.length,e=0;;)if(ed:e))c[d]=a.next(),d+=1;else return qf(new nf(c,0,d),Rf.h?Rf.h(a):Rf.call(null,a))}else return null},null,null)};function Sf(a,b,c,d,e,f){this.buffer=a;this.ub=b;this.pe=c;this.Rb=d;this.ye=e;this.Gf=f} +Sf.prototype.step=function(){if(this.ub!==Nf)return!0;for(;;)if(this.ub===Nf)if(this.buffer.Td()){if(this.pe)return!1;if(this.ye.ja()){if(this.Gf)var a=P(this.Rb,ae(null,this.ye.next()));else a=this.ye.next(),a=this.Rb.c?this.Rb.c(null,a):this.Rb.call(null,null,a);Hd(a)&&(this.Rb.h?this.Rb.h(null):this.Rb.call(null,null),this.pe=!0)}else this.Rb.h?this.Rb.h(null):this.Rb.call(null,null),this.pe=!0}else this.ub=this.buffer.remove();else return!0};Sf.prototype.ja=function(){return this.step()}; +Sf.prototype.next=function(){if(this.ja()){var a=this.ub;this.ub=Nf;return a}throw Error("No such element");};Sf.prototype.remove=function(){return Error("Unsupported operation")};Sf.prototype[Fb]=function(){return yd(this)}; +function Tf(a,b){var c=new Sf(Qf,Nf,!1,null,b,!1);c.Rb=function(){var b=function(a){return function(){function b(b,c){a.buffer=a.buffer.add(c);return b}var c=null;c=function(a,c){switch(arguments.length){case 0:return null;case 1:return a;case 2:return b.call(this,a,c)}throw Error("Invalid arity: "+(arguments.length-1));};c.B=function(){return null};c.h=function(a){return a};c.c=b;return c}()}(c);return a.h?a.h(b):a.call(null,b)}();return c} +function Uf(a,b){var c=Kf(b);c=Tf(a,c);c=Rf(c);return t(c)?c:wd}function Vf(a,b){for(;;){if(null==E(b))return!0;var c=y(b);c=a.h?a.h(c):a.call(null,c);if(t(c)){c=a;var d=z(b);a=c;b=d}else return!1}}function Wf(a,b){for(;;)if(E(b)){var c=y(b);c=a.h?a.h(c):a.call(null,c);if(t(c))return c;c=a;var d=z(b);a=c;b=d}else return null}function Xf(a){if(Ge(a))return 0===(a&1);throw Error(["Argument must be an integer: ",v.h(a)].join(""));} +function Yf(a){return function(){function b(b,c){return wb(a.c?a.c(b,c):a.call(null,b,c))}function c(b){return wb(a.h?a.h(b):a.call(null,b))}function d(){return wb(a.B?a.B():a.call(null))}var e=null,f=function(){function b(a,b,d){var e=null;if(2a?0:a-1>>>5<<5}function Jg(a,b,c){for(;;){if(0===b)return c;var d=Gg(a);d.o[0]=c;c=d;b-=5}} +var Kg=function Kg(a,b,c,d){var f=Hg(c),h=a.F-1>>>b&31;5===b?f.o[h]=d:(c=c.o[h],null!=c?(b-=5,a=Kg.M?Kg.M(a,b,c,d):Kg.call(null,a,b,c,d)):a=Jg(null,b-5,d),f.o[h]=a);return f};function Lg(a,b){throw Error(["No item ",v.h(a)," in vector of length ",v.h(b)].join(""));}function Mg(a,b){if(b>=Ig(a))return a.fa;for(var c=a.root,d=a.shift;;)if(0>>d&31];d=e}else return c.o} +var Ng=function Ng(a,b,c,d,e){var h=Hg(c);if(0===b)h.o[d&31]=e;else{var k=d>>>b&31;b-=5;c=c.o[k];a=Ng.Z?Ng.Z(a,b,c,d,e):Ng.call(null,a,b,c,d,e);h.o[k]=a}return h},Og=function Og(a,b,c){var e=a.F-2>>>b&31;if(5=this.F)a=new Jb(this.fa,0,null);else{a:{a=this.root;for(var b=this.shift;;)if(0this.F-Ig(this)){for(var c=this.fa.length,d=Array(c+1),e=0;;)if(e>>5>1<b)return new R(null,b,5,T,a,null);for(var c=32,d=(new R(null,32,5,T,a.slice(0,32),null)).Pc(null);;)if(cb||this.end<=this.start+b?Lg(b,this.end-this.start):A.c(this.Ja,this.start+b)};g.ka=function(a,b,c){return 0>b||this.end<=this.start+b?c:A.l(this.Ja,this.start+b,c)}; +g.dc=function(a,b,c){a=this.start+b;if(0>b||this.end+1<=a)throw Error(["Index ",v.h(b)," out of bounds [0,",v.h(this.W(null)),"]"].join(""));b=this.meta;c=K.l(this.Ja,a,c);var d=this.end;a+=1;return Zg(b,c,this.start,d>a?d:a,null)};g.ba=function(){return null!=this.Ja&&q===this.Ja.fe?Qg(this.Ja,this.start,this.end):new Jf(Hf,this)};g.P=function(){return this.meta};g.W=function(){return this.end-this.start};g.Ac=function(){return A.c(this.Ja,this.end-1)}; +g.Bc=function(){if(this.start===this.end)throw Error("Can't pop empty vector");return Zg(this.meta,this.Ja,this.start,this.end-1,null)};g.Rc=function(){return this.start!==this.end?new Zd(this,this.end-this.start-1,null):null};g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)};g.K=function(a,b){return $d(this,b)};g.oa=function(){return tc(he,this.meta)};g.Fa=function(a,b){return null!=this.Ja&&q===this.Ja.fe?Rg(this.Ja,b,this.start,this.end):Kd(this,b)}; +g.Ga=function(a,b,c){return null!=this.Ja&&q===this.Ja.fe?Sg(this.Ja,b,c,this.start,this.end):Ld(this,b,c)};g.O=function(a,b,c){if("number"===typeof b)return this.dc(null,b,c);throw Error("Subvec's key for assoc must be a number.");};g.S=function(){var a=this;return function(b){return function e(d){return d===a.end?null:ae(A.c(a.Ja,d),new kf(null,function(){return function(){return e(d+1)}}(b),null,null))}}(this)(a.start)};g.T=function(a,b){return Zg(b,this.Ja,this.start,this.end,this.w)}; +g.X=function(a,b){return Zg(this.meta,qc(this.Ja,this.end,b),this.start,this.end+1,null)};g.call=function(){var a=null;a=function(a,c,d){switch(arguments.length){case 2:return this.$(null,c);case 3:return this.ka(null,c,d)}throw Error("Invalid arity: "+(arguments.length-1));};a.c=function(a,c){return this.$(null,c)};a.l=function(a,c,d){return this.ka(null,c,d)};return a}();g.apply=function(a,b){return this.call.apply(this,[this].concat(Gb(b)))};g.h=function(a){return this.$(null,a)}; +g.c=function(a,b){return this.ka(null,a,b)};Yg.prototype[Fb]=function(){return yd(this)};function Zg(a,b,c,d,e){for(;;)if(b instanceof Yg)c=b.start+c,d=b.start+d,b=b.Ja;else{if(!ze(b))throw Error("v must satisfy IVector");var f=H(b);if(0>c||0>d||c>f||d>f)throw Error("Index out of bounds");return new Yg(a,b,c,d,e)}}function $g(a,b){return a===b.la?b:new Fg(a,Gb(b.o))} +var ah=function ah(a,b,c,d){c=$g(a.root.la,c);var f=a.F-1>>>b&31;if(5===b)a=d;else{var h=c.o[f];null!=h?(b-=5,a=ah.M?ah.M(a,b,h,d):ah.call(null,a,b,h,d)):a=Jg(a.root.la,b-5,d)}c.o[f]=a;return c};function Tg(a,b,c,d){this.F=a;this.shift=b;this.root=c;this.fa=d;this.J=88;this.m=275}g=Tg.prototype; +g.Dc=function(a,b){if(this.root.la){if(32>this.F-Ig(this))this.fa[this.F&31]=b;else{var c=new Fg(this.root.la,this.fa),d=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];d[0]=b;this.fa=d;if(this.F>>>5>1<>>d&31,m=k(d-5,f.o[p]);f.o[p]=m}return f}}(a)(a.shift,a.root)}();a.root=d}return a}if(b===a.F)return a.Dc(null,c);throw Error(["Index ",v.h(b)," out of bounds for TransientVector of length",v.h(a.F)].join(""));}throw Error("assoc! after persistent!");} +g.W=function(){if(this.root.la)return this.F;throw Error("count after persistent!");};g.$=function(a,b){if(this.root.la)return(0<=b&&b=c)return new r(this.meta,this.F-1,d,null);G.c(b,this.o[e])||(d[f]=this.o[e],d[f+1]=this.o[e+1],f+=2);e+=2}}else return this}; +g.O=function(a,b,c){a=ih(this.o,b);if(-1===a){if(this.Fb?4:2*(b+1));Be(this.o,0,c,0,2*b);return new xh(a,this.na,c)};g.qd=function(){return yh(this.o,0,null)};g.Jc=function(a,b){return vh(this.o,a,b)};g.sc=function(a,b,c,d){var e=1<<(b>>>a&31);if(0===(this.na&e))return d;var f=$e(this.na&e-1);e=this.o[2*f];f=this.o[2*f+1];return null==e?f.sc(a+5,b,c,d):rh(c,e)?f:d}; +g.Kb=function(a,b,c,d,e,f){var h=1<<(c>>>b&31),k=$e(this.na&h-1);if(0===(this.na&h)){var l=$e(this.na);if(2*l>>b&31]=zh.Kb(a,b+5,c,d,e,f);for(e=d=0;;)if(32>d)0!== +(this.na>>>d&1)&&(k[d]=null!=this.o[e]?zh.Kb(a,b+5,od(this.o[e]),this.o[e],this.o[e+1],f):this.o[e+1],e+=2),d+=1;else break;return new Ah(a,l+1,k)}b=Array(2*(l+4));Be(this.o,0,b,0,2*k);b[2*k]=d;b[2*k+1]=e;Be(this.o,2*k,b,2*(k+1),2*(l-k));f.H=!0;a=this.Gc(a);a.o=b;a.na|=h;return a}l=this.o[2*k];h=this.o[2*k+1];if(null==l)return l=h.Kb(a,b+5,c,d,e,f),l===h?this:uh(this,a,2*k+1,l);if(rh(d,l))return e===h?this:uh(this,a,2*k+1,e);f.H=!0;f=b+5;b=od(l);if(b===c)e=new Bh(null,b,2,[l,h,d,e]);else{var p=new qh; +e=zh.Kb(a,f,b,l,h,p).Kb(a,f,c,d,e,p)}d=2*k;k=2*k+1;a=this.Gc(a);a.o[d]=null;a.o[k]=e;return a}; +g.Jb=function(a,b,c,d,e){var f=1<<(b>>>a&31),h=$e(this.na&f-1);if(0===(this.na&f)){var k=$e(this.na);if(16<=k){h=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];h[b>>>a&31]=zh.Jb(a+5,b,c,d,e);for(d=c=0;;)if(32>c)0!==(this.na>>>c&1)&&(h[c]=null!=this.o[d]?zh.Jb(a+5,od(this.o[d]),this.o[d],this.o[d+1],e):this.o[d+1],d+=2),c+=1;else break;return new Ah(null,k+1,h)}a=Array(2*(k+1));Be(this.o, +0,a,0,2*h);a[2*h]=c;a[2*h+1]=d;Be(this.o,2*h,a,2*(h+1),2*(k-h));e.H=!0;return new xh(null,this.na|f,a)}var l=this.o[2*h];f=this.o[2*h+1];if(null==l)return k=f.Jb(a+5,b,c,d,e),k===f?this:new xh(null,this.na,sh(this.o,2*h+1,k));if(rh(c,l))return d===f?this:new xh(null,this.na,sh(this.o,2*h+1,d));e.H=!0;e=this.na;k=this.o;a+=5;var p=od(l);if(p===b)c=new Bh(null,p,2,[l,f,c,d]);else{var m=new qh;c=zh.Jb(a,p,l,f,m).Jb(a,b,c,d,m)}a=2*h;h=2*h+1;d=Gb(k);d[a]=null;d[h]=c;return new xh(null,e,d)}; +g.rd=function(a,b,c){var d=1<<(b>>>a&31);if(0===(this.na&d))return this;var e=$e(this.na&d-1),f=this.o[2*e],h=this.o[2*e+1];return null==f?(a=h.rd(a+5,b,c),a===h?this:null!=a?new xh(null,this.na,sh(this.o,2*e+1,a)):this.na===d?null:new xh(null,this.na^d,th(this.o,e))):rh(c,f)?new xh(null,this.na^d,th(this.o,e)):this};g.ba=function(){return new wh(this.o,0,null,null)};var zh=new xh(null,0,[]);function Ch(a,b,c){this.o=a;this.i=b;this.Lb=c} +Ch.prototype.ja=function(){for(var a=this.o.length;;){if(null!=this.Lb&&this.Lb.ja())return!0;if(this.i>>a&31];return null!=e?e.sc(a+5,b,c,d):d};g.Kb=function(a,b,c,d,e,f){var h=c>>>b&31,k=this.o[h];if(null==k)return a=uh(this,a,h,zh.Kb(a,b+5,c,d,e,f)),a.F+=1,a;b=k.Kb(a,b+5,c,d,e,f);return b===k?this:uh(this,a,h,b)}; +g.Jb=function(a,b,c,d,e){var f=b>>>a&31,h=this.o[f];if(null==h)return new Ah(null,this.F+1,sh(this.o,f,zh.Jb(a+5,b,c,d,e)));a=h.Jb(a+5,b,c,d,e);return a===h?this:new Ah(null,this.F,sh(this.o,f,a))}; +g.rd=function(a,b,c){var d=b>>>a&31,e=this.o[d];if(null!=e){a=e.rd(a+5,b,c);if(a===e)d=this;else if(null==a)if(8>=this.F)a:{e=this.o;a=e.length;b=Array(2*(this.F-1));c=0;for(var f=1,h=0;;)if(ca?d:rh(c,this.o[a])?this.o[a+1]:d}; +g.Kb=function(a,b,c,d,e,f){if(c===this.ec){b=Eh(this.o,this.F,d);if(-1===b){if(this.o.length>2*this.F)return b=2*this.F,c=2*this.F+1,a=this.Gc(a),a.o[b]=d,a.o[c]=e,f.H=!0,a.F+=1,a;c=this.o.length;b=Array(c+2);Be(this.o,0,b,0,c);b[c]=d;b[c+1]=e;f.H=!0;d=this.F+1;a===this.la?(this.o=b,this.F=d,a=this):a=new Bh(this.la,this.ec,d,b);return a}return this.o[b+1]===e?this:uh(this,a,b+1,e)}return(new xh(a,1<<(this.ec>>>b&31),[null,this,null,null])).Kb(a,b,c,d,e,f)}; +g.Jb=function(a,b,c,d,e){return b===this.ec?(a=Eh(this.o,this.F,c),-1===a?(a=2*this.F,b=Array(a+2),Be(this.o,0,b,0,a),b[a]=c,b[a+1]=d,e.H=!0,new Bh(null,this.ec,this.F+1,b)):G.c(this.o[a+1],d)?this:new Bh(null,this.ec,this.F,sh(this.o,a+1,d))):(new xh(null,1<<(this.ec>>>a&31),[null,this])).Jb(a,b,c,d,e)};g.rd=function(a,b,c){a=Eh(this.o,this.F,c);return-1===a?this:1===this.F?null:new Bh(null,this.ec,this.F-1,th(this.o,Ze(a)))};g.ba=function(){return new wh(this.o,0,null,null)}; +function Fh(a,b,c,d,e){this.meta=a;this.Mb=b;this.i=c;this.s=d;this.w=e;this.m=32374988;this.J=0}g=Fh.prototype;g.toString=function(){return fd(this)};g.equiv=function(a){return this.K(null,a)};g.indexOf=function(){var a=null;a=function(a,c){switch(arguments.length){case 1:return Ud(this,a,0);case 2:return Ud(this,a,c)}throw Error("Invalid arity: "+(arguments.length-1));};a.h=function(a){return Ud(this,a,0)};a.c=function(a,c){return Ud(this,a,c)};return a}(); +g.lastIndexOf=function(){function a(a){return Xd(this,a,H(this))}var b=null;b=function(b,d){switch(arguments.length){case 1:return a.call(this,b);case 2:return Xd(this,b,d)}throw Error("Invalid arity: "+(arguments.length-1));};b.h=a;b.c=function(a,b){return Xd(this,a,b)};return b}();g.P=function(){return this.meta};g.Ka=function(){return null==this.s?yh(this.Mb,this.i+2,null):yh(this.Mb,this.i,z(this.s))};g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)}; +g.K=function(a,b){return $d(this,b)};g.oa=function(){return tc(wd,this.meta)};g.Fa=function(a,b){return ce(b,this)};g.Ga=function(a,b,c){return de(b,c,this)};g.Ia=function(){return null==this.s?new R(null,2,5,T,[this.Mb[this.i],this.Mb[this.i+1]],null):y(this.s)};g.bb=function(){var a=null==this.s?yh(this.Mb,this.i+2,null):yh(this.Mb,this.i,z(this.s));return null!=a?a:wd};g.S=function(){return this};g.T=function(a,b){return new Fh(b,this.Mb,this.i,this.s,this.w)};g.X=function(a,b){return ae(b,this)}; +Fh.prototype[Fb]=function(){return yd(this)};function yh(a,b,c){if(null==c)for(c=a.length;;)if(bthis.F?H(z(this))+1:this.F};g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)};g.K=function(a,b){return $d(this,b)};g.oa=function(){return tc(wd,this.meta)};g.Fa=function(a,b){return ce(b,this)};g.Ga=function(a,b,c){return de(b,c,this)};g.Ia=function(){var a=this.stack;return null==a?null:nc(a)};g.bb=function(){var a=y(this.stack);a=Mh(this.vc?a.right:a.left,z(this.stack),this.vc);return null!=a?new Nh(null,a,this.vc,this.F-1,null):wd};g.S=function(){return this}; +g.T=function(a,b){return new Nh(b,this.stack,this.vc,this.F,this.w)};g.X=function(a,b){return ae(b,this)};Nh.prototype[Fb]=function(){return yd(this)};function Oh(a,b,c){return new Nh(null,Mh(a,null,b),b,c,null)} +function Ph(a,b,c,d){return c instanceof Qh?c.left instanceof Qh?new Qh(c.key,c.H,c.left.bc(),new Rh(a,b,c.right,d,null),null):c.right instanceof Qh?new Qh(c.right.key,c.right.H,new Rh(c.key,c.H,c.left,c.right.left,null),new Rh(a,b,c.right.right,d,null),null):new Rh(a,b,c,d,null):new Rh(a,b,c,d,null)} +function Sh(a,b,c,d){return d instanceof Qh?d.right instanceof Qh?new Qh(d.key,d.H,new Rh(a,b,c,d.left,null),d.right.bc(),null):d.left instanceof Qh?new Qh(d.left.key,d.left.H,new Rh(a,b,c,d.left.left,null),new Rh(d.key,d.H,d.left.right,d.right,null),null):new Rh(a,b,c,d,null):new Rh(a,b,c,d,null)} +function Th(a,b,c,d){if(c instanceof Qh)return new Qh(a,b,c.bc(),d,null);if(d instanceof Rh)return Sh(a,b,c,d.ud());if(d instanceof Qh&&d.left instanceof Rh)return new Qh(d.left.key,d.left.H,new Rh(a,b,c,d.left.left,null),Sh(d.key,d.H,d.left.right,d.right.ud()),null);throw Error("red-black tree invariant violation");} +function Uh(a,b,c,d){if(d instanceof Qh)return new Qh(a,b,c,d.bc(),null);if(c instanceof Rh)return Ph(a,b,c.ud(),d);if(c instanceof Qh&&c.right instanceof Rh)return new Qh(c.right.key,c.right.H,Ph(c.key,c.H,c.left.ud(),c.right.left),new Rh(a,b,c.right.right,d,null),null);throw Error("red-black tree invariant violation");} +var Vh=function Vh(a,b,c){var e=null!=a.left?function(){var e=a.left;return Vh.l?Vh.l(e,b,c):Vh.call(null,e,b,c)}():c;if(Hd(e))return e;var f=function(){var c=a.key,f=a.H;return b.l?b.l(e,c,f):b.call(null,e,c,f)}();if(Hd(f))return f;if(null!=a.right){var h=a.right;return Vh.l?Vh.l(h,b,f):Vh.call(null,h,b,f)}return f};function Rh(a,b,c,d,e){this.key=a;this.H=b;this.left=c;this.right=d;this.w=e;this.m=32402207;this.J=0}g=Rh.prototype; +g.lastIndexOf=function(){function a(a){return Xd(this,a,H(this))}var b=null;b=function(b,d){switch(arguments.length){case 1:return a.call(this,b);case 2:return Xd(this,b,d)}throw Error("Invalid arity: "+(arguments.length-1));};b.h=a;b.c=function(a,b){return Xd(this,a,b)};return b}(); +g.indexOf=function(){var a=null;a=function(a,c){switch(arguments.length){case 1:return Ud(this,a,0);case 2:return Ud(this,a,c)}throw Error("Invalid arity: "+(arguments.length-1));};a.h=function(a){return Ud(this,a,0)};a.c=function(a,c){return Ud(this,a,c)};return a}();g.Ee=function(a){return a.He(this)};g.ud=function(){return new Qh(this.key,this.H,this.left,this.right,null)};g.bc=function(){return this};g.De=function(a){return a.Ge(this)};g.replace=function(a,b,c,d){return new Rh(a,b,c,d,null)}; +g.Ge=function(a){return new Rh(a.key,a.H,this,a.right,null)};g.He=function(a){return new Rh(a.key,a.H,a.left,this,null)};g.Jc=function(a,b){return Vh(this,a,b)};g.V=function(a,b){return this.ka(null,b,null)};g.I=function(a,b,c){return this.ka(null,b,c)};g.$=function(a,b){if(0===b)return this.key;if(1===b)return this.H;throw Error("Index out of bounds");};g.ka=function(a,b,c){return 0===b?this.key:1===b?this.H:c};g.dc=function(a,b,c){return(new R(null,2,5,T,[this.key,this.H],null)).dc(null,b,c)}; +g.P=function(){return null};g.W=function(){return 2};g.fd=function(){return this.key};g.gd=function(){return this.H};g.Ac=function(){return this.H};g.Bc=function(){return new R(null,1,5,T,[this.key],null)};g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)};g.K=function(a,b){return $d(this,b)};g.oa=function(){return he};g.Fa=function(a,b){return Kd(this,b)};g.Ga=function(a,b,c){return Ld(this,b,c)};g.O=function(a,b,c){return K.l(new R(null,2,5,T,[this.key,this.H],null),b,c)}; +g.yc=function(a,b){return 0===b||1===b};g.S=function(){var a=this.key;return Tb(Tb(wd,this.H),a)};g.T=function(a,b){return tc(new R(null,2,5,T,[this.key,this.H],null),b)};g.X=function(a,b){return new R(null,3,5,T,[this.key,this.H,b],null)}; +g.call=function(){var a=null;a=function(a,c,d){switch(arguments.length){case 2:return this.$(null,c);case 3:return this.ka(null,c,d)}throw Error("Invalid arity: "+(arguments.length-1));};a.c=function(a,c){return this.$(null,c)};a.l=function(a,c,d){return this.ka(null,c,d)};return a}();g.apply=function(a,b){return this.call.apply(this,[this].concat(Gb(b)))};g.h=function(a){return this.$(null,a)};g.c=function(a,b){return this.ka(null,a,b)};Rh.prototype[Fb]=function(){return yd(this)}; +function Qh(a,b,c,d,e){this.key=a;this.H=b;this.left=c;this.right=d;this.w=e;this.m=32402207;this.J=0}g=Qh.prototype;g.lastIndexOf=function(){function a(a){return Xd(this,a,H(this))}var b=null;b=function(b,d){switch(arguments.length){case 1:return a.call(this,b);case 2:return Xd(this,b,d)}throw Error("Invalid arity: "+(arguments.length-1));};b.h=a;b.c=function(a,b){return Xd(this,a,b)};return b}(); +g.indexOf=function(){var a=null;a=function(a,c){switch(arguments.length){case 1:return Ud(this,a,0);case 2:return Ud(this,a,c)}throw Error("Invalid arity: "+(arguments.length-1));};a.h=function(a){return Ud(this,a,0)};a.c=function(a,c){return Ud(this,a,c)};return a}();g.Ee=function(a){return new Qh(this.key,this.H,this.left,a,null)};g.ud=function(){throw Error("red-black tree invariant violation");};g.bc=function(){return new Rh(this.key,this.H,this.left,this.right,null)}; +g.De=function(a){return new Qh(this.key,this.H,a,this.right,null)};g.replace=function(a,b,c,d){return new Qh(a,b,c,d,null)};g.Ge=function(a){return this.left instanceof Qh?new Qh(this.key,this.H,this.left.bc(),new Rh(a.key,a.H,this.right,a.right,null),null):this.right instanceof Qh?new Qh(this.right.key,this.right.H,new Rh(this.key,this.H,this.left,this.right.left,null),new Rh(a.key,a.H,this.right.right,a.right,null),null):new Rh(a.key,a.H,this,a.right,null)}; +g.He=function(a){return this.right instanceof Qh?new Qh(this.key,this.H,new Rh(a.key,a.H,a.left,this.left,null),this.right.bc(),null):this.left instanceof Qh?new Qh(this.left.key,this.left.H,new Rh(a.key,a.H,a.left,this.left.left,null),new Rh(this.key,this.H,this.left.right,this.right,null),null):new Rh(a.key,a.H,a.left,this,null)};g.Jc=function(a,b){return Vh(this,a,b)};g.V=function(a,b){return this.ka(null,b,null)};g.I=function(a,b,c){return this.ka(null,b,c)}; +g.$=function(a,b){if(0===b)return this.key;if(1===b)return this.H;throw Error("Index out of bounds");};g.ka=function(a,b,c){return 0===b?this.key:1===b?this.H:c};g.dc=function(a,b,c){return(new R(null,2,5,T,[this.key,this.H],null)).dc(null,b,c)};g.P=function(){return null};g.W=function(){return 2};g.fd=function(){return this.key};g.gd=function(){return this.H};g.Ac=function(){return this.H};g.Bc=function(){return new R(null,1,5,T,[this.key],null)}; +g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)};g.K=function(a,b){return $d(this,b)};g.oa=function(){return he};g.Fa=function(a,b){return Kd(this,b)};g.Ga=function(a,b,c){return Ld(this,b,c)};g.O=function(a,b,c){return K.l(new R(null,2,5,T,[this.key,this.H],null),b,c)};g.yc=function(a,b){return 0===b||1===b};g.S=function(){var a=this.key;return Tb(Tb(wd,this.H),a)};g.T=function(a,b){return tc(new R(null,2,5,T,[this.key,this.H],null),b)}; +g.X=function(a,b){return new R(null,3,5,T,[this.key,this.H,b],null)};g.call=function(){var a=null;a=function(a,c,d){switch(arguments.length){case 2:return this.$(null,c);case 3:return this.ka(null,c,d)}throw Error("Invalid arity: "+(arguments.length-1));};a.c=function(a,c){return this.$(null,c)};a.l=function(a,c,d){return this.ka(null,c,d)};return a}();g.apply=function(a,b){return this.call.apply(this,[this].concat(Gb(b)))};g.h=function(a){return this.$(null,a)}; +g.c=function(a,b){return this.ka(null,a,b)};Qh.prototype[Fb]=function(){return yd(this)}; +var Wh=function Wh(a,b,c,d,e){if(null==b)return new Qh(c,d,null,null,null);var h=function(){var d=b.key;return a.c?a.c(c,d):a.call(null,c,d)}();if(0===h)return e[0]=b,null;if(0>h)return h=function(){var h=b.left;return Wh.Z?Wh.Z(a,h,c,d,e):Wh.call(null,a,h,c,d,e)}(),null!=h?b.De(h):null;h=function(){var h=b.right;return Wh.Z?Wh.Z(a,h,c,d,e):Wh.call(null,a,h,c,d,e)}();return null!=h?b.Ee(h):null},Xh=function Xh(a,b){if(null==a)return b;if(null==b)return a;if(a instanceof Qh){if(b instanceof Qh){var d= +function(){var d=a.right,f=b.left;return Xh.c?Xh.c(d,f):Xh.call(null,d,f)}();return d instanceof Qh?new Qh(d.key,d.H,new Qh(a.key,a.H,a.left,d.left,null),new Qh(b.key,b.H,d.right,b.right,null),null):new Qh(a.key,a.H,a.left,new Qh(b.key,b.H,d,b.right,null),null)}return new Qh(a.key,a.H,a.left,function(){var d=a.right;return Xh.c?Xh.c(d,b):Xh.call(null,d,b)}(),null)}if(b instanceof Qh)return new Qh(b.key,b.H,function(){var d=b.left;return Xh.c?Xh.c(a,d):Xh.call(null,a,d)}(),b.right,null);d=function(){var d= +a.right,f=b.left;return Xh.c?Xh.c(d,f):Xh.call(null,d,f)}();return d instanceof Qh?new Qh(d.key,d.H,new Rh(a.key,a.H,a.left,d.left,null),new Rh(b.key,b.H,d.right,b.right,null),null):Th(a.key,a.H,a.left,new Rh(b.key,b.H,d,b.right,null))},Yh=function Yh(a,b,c,d){if(null!=b){var f=function(){var d=b.key;return a.c?a.c(c,d):a.call(null,c,d)}();if(0===f)return d[0]=b,Xh(b.left,b.right);if(0>f)return f=function(){var f=b.left;return Yh.M?Yh.M(a,f,c,d):Yh.call(null,a,f,c,d)}(),null!=f||null!=d[0]?b.left instanceof +Rh?Th(b.key,b.H,f,b.right):new Qh(b.key,b.H,f,b.right,null):null;f=function(){var f=b.right;return Yh.M?Yh.M(a,f,c,d):Yh.call(null,a,f,c,d)}();return null!=f||null!=d[0]?b.right instanceof Rh?Uh(b.key,b.H,b.left,f):new Qh(b.key,b.H,b.left,f,null):null}return null},Zh=function Zh(a,b,c,d){var f=b.key,h=a.c?a.c(c,f):a.call(null,c,f);return 0===h?b.replace(f,d,b.left,b.right):0>h?b.replace(f,b.H,function(){var f=b.left;return Zh.M?Zh.M(a,f,c,d):Zh.call(null,a,f,c,d)}(),b.right):b.replace(f,b.H,b.left, +function(){var f=b.right;return Zh.M?Zh.M(a,f,c,d):Zh.call(null,a,f,c,d)}())};function $h(a,b,c,d,e){this.Bb=a;this.mc=b;this.F=c;this.meta=d;this.w=e;this.m=418776847;this.J=8192}g=$h.prototype;g.forEach=function(a){for(var b=E(this),c=null,d=0,e=0;;)if(ed?c.left:c.right}else return null}g.has=function(a){return He(this,a)};g.V=function(a,b){return this.I(null,b,null)}; +g.I=function(a,b,c){a=ai(this,b);return null!=a?a.H:c};g.Qc=function(a,b,c){return null!=this.mc?Jd(Vh(this.mc,b,c)):c};g.P=function(){return this.meta};g.W=function(){return this.F};g.Rc=function(){return 0(a.h?a.h(c):a.call(null,c))?b:c};Ai.A=function(a,b,c,d){return Mb(function(b,c){return Ai.l(a,b,c)},Ai.l(a,b,c),d)};Ai.N=function(a){var b=y(a),c=z(a);a=y(c);var d=z(c);c=y(d);d=z(d);return Ai.A(b,a,c,d)};Ai.L=3;function Bi(a,b){return new kf(null,function(){var c=E(b);if(c){var d=y(c);d=a.h?a.h(d):a.call(null,d);c=t(d)?ae(y(c),Bi(a,vd(c))):null}else c=null;return c},null,null)}function Di(a,b,c){this.i=a;this.end=b;this.step=c} +Di.prototype.ja=function(){return 0this.end};Di.prototype.next=function(){var a=this.i;this.i+=this.step;return a};function Ei(a,b,c,d,e){this.meta=a;this.start=b;this.end=c;this.step=d;this.w=e;this.m=32375006;this.J=139264}g=Ei.prototype;g.toString=function(){return fd(this)};g.equiv=function(a){return this.K(null,a)}; +g.indexOf=function(){var a=null;a=function(a,c){switch(arguments.length){case 1:return Ud(this,a,0);case 2:return Ud(this,a,c)}throw Error("Invalid arity: "+(arguments.length-1));};a.h=function(a){return Ud(this,a,0)};a.c=function(a,c){return Ud(this,a,c)};return a}(); +g.lastIndexOf=function(){function a(a){return Xd(this,a,H(this))}var b=null;b=function(b,d){switch(arguments.length){case 1:return a.call(this,b);case 2:return Xd(this,b,d)}throw Error("Invalid arity: "+(arguments.length-1));};b.h=a;b.c=function(a,b){return Xd(this,a,b)};return b}();g.$=function(a,b){if(0<=b&&bthis.end&&0===this.step)return this.start;throw Error("Index out of bounds");}; +g.ka=function(a,b,c){return 0<=b&&bthis.end&&0===this.step?this.start:c};g.ba=function(){return new Di(this.start,this.end,this.step)};g.P=function(){return this.meta};g.Ka=function(){return 0this.end?new Ei(this.meta,this.start+this.step,this.end,this.step,null):null}; +g.W=function(){return wb(this.S(null))?0:Math.ceil((this.end-this.start)/this.step)};g.U=function(){var a=this.w;return null!=a?a:this.w=a=Ad(this)};g.K=function(a,b){return $d(this,b)};g.oa=function(){return tc(wd,this.meta)};g.Fa=function(a,b){return Kd(this,b)};g.Ga=function(a,b,c){for(a=this.start;;)if(0this.end){c=b.c?b.c(c,a):b.call(null,c,a);if(Hd(c))return B(c);a+=this.step}else return c};g.Ia=function(){return null==this.S(null)?null:this.start}; +g.bb=function(){return null!=this.S(null)?new Ei(this.meta,this.start+this.step,this.end,this.step,null):wd};g.S=function(){return 0this.step?this.start>this.end?this:null:this.start===this.end?null:this};g.T=function(a,b){return new Ei(b,this.start,this.end,this.step,this.w)};g.X=function(a,b){return ae(b,this)};Ei.prototype[Fb]=function(){return yd(this)};function Fi(a,b,c){return new Ei(null,a,b,c,null)} +function Gi(a,b){return new R(null,2,5,T,[Bi(a,b),ng(a,b)],null)} +function Hi(a){var b=y;return function(){function c(c,d,e){return new R(null,2,5,T,[b.l?b.l(c,d,e):b.call(null,c,d,e),a.l?a.l(c,d,e):a.call(null,c,d,e)],null)}function d(c,d){return new R(null,2,5,T,[b.c?b.c(c,d):b.call(null,c,d),a.c?a.c(c,d):a.call(null,c,d)],null)}function e(c){return new R(null,2,5,T,[b.h?b.h(c):b.call(null,c),a.h?a.h(c):a.call(null,c)],null)}function f(){return new R(null,2,5,T,[b.B?b.B():b.call(null),a.B?a.B():a.call(null)],null)}var h=null,k=function(){function c(a,b,c,e){var f= +null;if(3lb)return Jc(a,"#");Jc(a,c);if(0===tb.h(f))E(h)&&Jc(a,function(){var a=Ki.h(f);return t(a)?a:"..."}());else{if(E(h)){var l=y(h);b.l?b.l(l,a,f):b.call(null,l,a,f)}for(var p=z(h),m=tb.h(f)-1;;)if(!p||null!=m&&0===m){E(p)&&0===m&&(Jc(a,d),Jc(a,function(){var a=Ki.h(f);return t(a)?a:"..."}()));break}else{Jc(a,d);var u=y(p);c=a;h=f;b.l?b.l(u,c,h):b.call(null,u,c,h);var w=z(p);c=m-1;p=w;m=c}}return Jc(a,e)}finally{lb=k}} +function Li(a,b){for(var c=E(b),d=null,e=0,f=0;;)if(fH(a)?a.toUpperCase():[v.h(a.substring(0,1).toUpperCase()),v.h(a.substring(1))].join("")} +function Qo(a){if("string"===typeof a)return a;a=jf(a);var b=Fo(a,/-/),c=E(b);b=y(c);c=z(c);return t(Oo.h?Oo.h(b):Oo.call(null,b))?a:Kb(v,b,ig.c(Po,c))}function Ro(a){var b=function(){var b=function(){var b=me(a);return b?(b=a.displayName,t(b)?b:a.name):b}();if(t(b))return b;b=function(){var b=null!=a?a.J&4096||q===a.Oe?!0:!1:!1;return b?jf(a):b}();if(t(b))return b;b=qe(a);return xe(b)?Tk.h(b):null}();return Do(""+v.h(b),"$",".")}var So=!1;if("undefined"===typeof To)var To=0;function Uo(a){return setTimeout(a,16)}var Vo="undefined"===typeof window||null==window.document?Uo:function(){var a=window,b=a.requestAnimationFrame;if(t(b))return b;b=a.webkitRequestAnimationFrame;if(t(b))return b;b=a.mozRequestAnimationFrame;if(t(b))return b;a=a.msRequestAnimationFrame;return t(a)?a:Uo}();function Wo(a,b){return a.cljsMountOrder-b.cljsMountOrder}if("undefined"===typeof Xo)var Xo=function(){return null};function Yo(a){this.Yd=a} +function Zo(a,b){var c=a[b];if(null==c)return null;a[b]=null;for(var d=c.length,e=0;;)if(e=d&&a.push(gq(c));return a}}(e),[b,c],a))}};if("undefined"===typeof jq)var jq=null;function kq(){if(null!=jq)return jq;if("undefined"!==typeof ReactDOM)return jq=ReactDOM;if("undefined"!==typeof require){var a=jq=require("react-dom");if(t(a))return a;throw Error("require('react-dom') failed");}throw Error("js/ReactDOM is missing");}if("undefined"===typeof lq)var lq=dg.h(Ef); +function mq(a,b,c){var d=So;So=!0;try{return kq().render(a.B?a.B():a.call(null),b,function(){return function(){var d=So;So=!1;try{return gg.M(lq,K,b,new R(null,2,5,T,[a,b],null)),Zo(bp,"afterRender"),null!=c?c.B?c.B():c.call(null):null}finally{So=d}}}(d))}finally{So=d}}function nq(a,b){return mq(a,b,null)}function oq(a,b,c){qp();return mq(function(){return gq(me(a)?a.B?a.B():a.call(null):a)},b,c)}Wp=function(a){return kq().findDOMNode(a)};function pq(a){switch(arguments.length){case 2:return oq(arguments[0],arguments[1],null);case 3:return oq(arguments[0],arguments[1],arguments[2]);default:throw Error(["Invalid arity: ",v.h(arguments.length)].join(""));}}function qq(a,b){return oq(a,b,null)} +da("reagent.core.force_update_all",function(){qp();qp();for(var a=E(mh(B(lq))),b=null,c=0,d=0;;)if(d=Number(c)?a:a=-1Number(a)?"-":0<=b.indexOf("+")?"+":0<=b.indexOf(" ")?" ":"";0<=Number(a)&&(d=f+d);if(isNaN(c)||d.length>=Number(c))return d;d=isNaN(e)?Math.abs(Number(a)).toString():Math.abs(Number(a)).toFixed(e);a=Number(c)-d.length-f.length;0<=b.indexOf("-",0)?d=f+d+sa(" ",a):(b=0<=b.indexOf("0",0)?"0":" ",d=f+sa(b,a)+d);return d};yq.fc.d=function(a,b,c,d,e,f,h,k){return yq.fc.f(parseInt(a,10),b,c,d,0,f,h,k)}; +yq.fc.i=yq.fc.d;yq.fc.u=yq.fc.d;function zq(a){var b=be([Vk,null]);return wg.c(t(a)?a:Ef,function(){return function e(a){return new kf(null,function(){for(var b=a;;)if(b=E(b)){if(Ae(b)){var d=Wc(b),k=H(d),l=of(k);a:for(var p=0;;)if(p=H(h)&&Vf(function(){return function(a){return!(a instanceof Xq)}}(b,c,d,e,f,h),h)))throw Error(Bq("%s is not a valid sequence schema; %s%s%s",be([a,"a valid sequence schema consists of zero or more `one` elements, ","followed by zero or more `optional` elements, followed by an optional ", +"schema that will match the remaining elements."])));return new R(null,2,5,T,[O.c(c,f),y(h)],null)} +R.prototype.xb=function(){var a=this,b=Zq(a),c=J(b,0,null),d=J(b,1,null);return Wg(O.c(function(){return function(a,b,c,d){return function m(e){return new kf(null,function(){return function(){for(;;){var a=E(e);if(a){if(Ae(a)){var b=Wc(a),c=H(b),d=of(c);return function(){for(var a=0;;)if(ac?f:c;return $r(a,ea?0:a}():function(){var a=e-b;return f>a?f:a}())} +function gs(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a,d=D.c(c,pl);d=null!=d&&(d.m&64||q===d.G)?P(U,d):d;var e=D.c(d,Aj),f=D.c(c,Yj),h=D.c(c,no);return $r(c,e>f?function(){var a=h-1,c=e+b;return a=a}}(l,p,a,c,c,d,e,f,h,k),h),l,p);return Zr(c,d)} +function it(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a,d=D.c(c,pl),e=null!=d&&(d.m&64||q===d.G)?P(U,d):d,f=D.c(e,zn),h=D.c(c,tk),k=D.c(c,fl),l=b-1;d=J(cf(Bi(function(a,b,c,d,e,f,h){return function(a){return h>a}}(l,a,c,c,d,e,f,h,k),h)),l,0);return Zr(c,d)}function jt(a){return K.l(a,im,Ve)}function kt(a){return K.l(a,im,Hr)}function lt(a,b,c){return K.l(a,b,c)}function mt(a,b,c){return Wg(O.A(jg(b,a),new R(null,1,5,T,[c],null),be([jg(H(a)-b-1,kg(b,a))])))} +function nt(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a,d=D.c(c,pl),e=null!=d&&(d.m&64||q===d.G)?P(U,d):d;d=D.c(e,zn);e=D.c(e,Aj);var f=D.c(c,fl);D.c(c,no);var h=D.c(c,Oj),k=D.c(c,Rj),l=D.c(c,$l),p=D.c(c,im);p=95b?p.h?p.h(b):p.call(null,b):b;h=tr(p,h);return G.c(f,d+1)?t(k)?K.l(Yr(zg(c,new R(null,3,5,T,[il,e,d],null),h),d+1),vk,!0):zg(c,new R(null,3,5,T,[il,e,d],null),h):Yr(Ag.Z(c,new R(null,2,5,T,[il,e],null),t(l)?mt:lt,d,h),d+1)} +function ot(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a,d=D.c(c,Rj),e=D.c(c,vk);t(t(d)?e:d)&&(c=null!=c&&(c.m&64||q===c.G)?P(U,c):c,d=D.c(c,pl),d=null!=d&&(d.m&64||q===d.G)?P(U,d):d,d=D.c(d,Aj),e=D.c(c,no),c=Yr(c,0),c=G.c(e,d+1)?Tr.h(c):$r(c,d+1));return c=nt(c,b)}function pt(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;var b=D.c(a,fl),c=D.c(a,no);return K.l(a,il,Wg(qg(c,Wg(qg(b,new R(null,2,5,T,[69,Ef],null))))))} +function qt(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;var b=D.c(a,pl);b=null!=b&&(b.m&64||q===b.G)?P(U,b):b;b=D.c(b,Aj);var c=D.c(a,fl),d=D.c(a,Oj);return zg(a,new R(null,2,5,T,[il,b],null),gr.c(c,d))}function rt(a,b,c){return Wg(O.c(jg(b,a),qg(H(a)-b,vr(c))))}function st(a,b,c){return Wg(O.c(qg(b+1,vr(c)),kg(b+1,a)))} +function tt(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;var b=D.c(a,pl),c=null!=b&&(b.m&64||q===b.G)?P(U,b):b;b=D.c(c,zn);c=D.c(c,Aj);var d=D.c(a,fl),e=D.c(a,Oj);--d;return Ag.Z(a,new R(null,2,5,T,[il,c],null),rt,b=k?Zr(c,k-1):c,m=Mb(D,p,new R(null,2,5,T,[pl,zn],null));return Ag.l(p,new R(null,2,5,T,[il,h],null),function(a,b,c,d,e,f,h,k,m,l,p,Q){return function(a){return Wg(O.A(jg(b,a),kg(b+c,a),be([qg(c,vr(Q))])))}}(p,m,function(){var a=k-m;return b=a}}(c,b)(b)}()))return Gu(a,b+64);throw Jt;}catch(h){if(h instanceof Error){var d=h;if(d===Jt)try{if(55===b)return Bg(a,V,ms);throw Jt;}catch(k){if(k instanceof Error){var e=k;if(e===Jt)try{if(56===b)return Bg(a,V,ns);throw Jt;}catch(l){if(l instanceof Error){var f=l;if(f===Jt)try{if(99===b)return du(a); +throw Jt;}catch(p){if(p instanceof Error){d=p;if(d===Jt)throw Jt;throw d;}throw p;}else throw f;}else throw l;}else throw e;}else throw k;}else throw d;}else throw h;}else throw Jt;}catch(h){if(h instanceof Error)if(d=h,d===Jt)try{if(35===c)try{if(56===b)return Bg(a,V,pt);throw Jt;}catch(k){if(k instanceof Error){e=k;if(e===Jt)throw Jt;throw e;}throw k;}else throw Jt;}catch(k){if(k instanceof Error)if(e=k,e===Jt)try{if(40===c)try{if(48===b)return Zt(a);throw Jt;}catch(l){if(l instanceof Error){f= +l;if(f===Jt)return $t(a);throw f;}throw l;}else throw Jt;}catch(l){if(l instanceof Error){f=l;if(f===Jt)return a;throw f;}throw l;}else throw e;else throw k;}else throw d;else throw h;}},function(a){return a},function(a){return a},Gu,function(a,b){return Cg(a,V,ot,b)},function(a,b){var c=function(){switch(b){case 64:return eu;case 65:return fu;case 66:return gu;case 67:return hu;case 68:return iu;case 69:return ju;case 70:return ku;case 71:return lu;case 72:return mu;case 73:return nu;case 74:return ou; +case 75:return pu;case 76:return su;case 77:return tu;case 80:return uu;case 83:return qu;case 84:return ru;case 87:return vu;case 88:return wu;case 90:return xu;case 96:return lu;case 97:return hu;case 100:return Du;case 101:return fu;case 102:return mu;case 103:return yu;case 104:return zu;case 108:return Au;case 109:return Cu;case 112:return Eu;case 114:return Fu;default:return null}}();return t(c)?c.h?c.h(a):c.call(null,a):a},function(a){return a},function(a,b){return K.l(a,kk,ge.c(kk.h(a),b))}, +function(a){return a},function(a,b){return K.l(a,rk,ge.c(rk.h(a),b))},function(a){return a},function(a){return a},function(a){return K.A(a,rk,he,be([kk,he]))}]);function Iu(a,b){for(var c=a,d=Tl.h(c),e=b;;){var f=y(e);if(t(f)){var h=160<=f?65:f;h=D.c(d.h?d.h(xq):d.call(null,xq),h);d=J(h,0,null);h=J(h,1,null);a:for(;;)if(E(h)){var k=y(h);k=Hu.h?Hu.h(k):Hu.call(null,k);c=k.c?k.c(c,f):k.call(null,c,f);h=z(h)}else break a;e=vd(e)}else return K.l(c,Tl,d)}} +function Ju(a,b){var c=xg(function(a){return a.codePointAt(0)},b);return Iu(a,c)} +function Ku(a,b){try{if(ze(b)&&3===H(b)){var c=Vd(b,0),d=Vd(b,1),e=Vd(b,2);return[v.h(a+8),";2;",v.h(c),";",v.h(d),";",v.h(e)].join("")}throw Jt;}catch(k){if(k instanceof Error){var f=k;if(f===Jt)try{if(t(function(){return function(){return function(a){return 8>a}}(f)(b)}()))return""+v.h(a+b);throw Jt;}catch(l){if(l instanceof Error){var h=l;if(h===Jt)try{if(t(function(){return function(){return function(a){return 16>a}}(h,f)(b)}()))return""+v.h(a+52+b);throw Jt;}catch(p){if(p instanceof Error){c= +p;if(c===Jt)return[v.h(a+8),";5;",v.h(b)].join("");throw c;}throw p;}else throw h;}else throw l;}else throw f;}else throw k;}}ag.c(Ku,30);ag.c(Ku,40);var Lu=function Lu(a){if(null!=a&&null!=a.yd)return a.yd(a);var c=Lu[n(null==a?null:a)];if(null!=c)return c.h?c.h(a):c.call(null,a);c=Lu._;if(null!=c)return c.h?c.h(a):c.call(null,a);throw Cb("Screen.lines",a);},Mu=function Mu(a){if(null!=a&&null!=a.xd)return a.xd(a);var c=Mu[n(null==a?null:a)];if(null!=c)return c.h?c.h(a):c.call(null,a);c=Mu._;if(null!=c)return c.h?c.h(a):c.call(null,a);throw Cb("Screen.cursor",a);};function Nu(a,b){var c=0parseFloat(Iv)){Hv=String(Kv);break a}}Hv=Iv}var gb={}; +function Lv(a){return fb(a,function(){for(var b=0,c=ra(String(Hv)).split("."),d=ra(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f=a.keyCode)a.keyCode=-1}catch(b){}};var Uv="closure_listenable_"+(1E6*Math.random()|0),Vv=0;function Wv(a,b,c,d,e){this.listener=a;this.Xd=null;this.src=b;this.type=c;this.capture=!!d;this.Ub=e;this.key=++Vv;this.$c=this.Fd=!1}function Xv(a){a.$c=!0;a.listener=null;a.Xd=null;a.src=null;a.Ub=null};function Yv(a){this.src=a;this.rb={};this.wd=0}Yv.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.rb[f];a||(a=this.rb[f]=[],this.wd++);var h=Zv(a,b,d,e);-1e.keyCode||void 0!=e.returnValue)){a:{var f=!1;if(0==e.keyCode)try{e.keyCode=-1;break a}catch(l){f=!0}if(f||void 0==e.returnValue)e.returnValue=!0}e=[];for(f=c.currentTarget;f;f=f.parentNode)e.push(f);f=a.type;for(var h=e.length-1;!c.Kc&&0<=h;h--){c.currentTarget=e[h];var k=nw(e[h],f,!0,c);d=d&&k}for(h=0;!c.Kc&& +h>>0);function fw(a){if(ha(a))return a;a[pw]||(a[pw]=function(b){return a.handleEvent(b)});return a[pw]};function qw(){wv.call(this);this.Ib=new Yv(this);this.ff=this;this.ve=null}qa(qw,wv);qw.prototype[Uv]=!0;g=qw.prototype;g.addEventListener=function(a,b,c,d){dw(this,a,b,c,d)};g.removeEventListener=function(a,b,c,d){lw(this,a,b,c,d)}; +g.dispatchEvent=function(a){var b,c=this.ve;if(c)for(b=[];c;c=c.ve)b.push(c);c=this.ff;var d=a.type||a;if(ca(a))a=new Sv(a,c);else if(a instanceof Sv)a.target=a.target||c;else{var e=a;a=new Sv(d,c);Ia(a,e)}e=!0;if(b)for(var f=b.length-1;!a.Kc&&0<=f;f--){var h=a.currentTarget=b[f];e=rw(h,d,!0,a)&&e}a.Kc||(h=a.currentTarget=c,e=rw(h,d,!0,a)&&e,a.Kc||(e=rw(h,d,!1,a)&&e));if(b)for(f=0;!a.Kc&&fthis.head?(Yw(this.o,this.fa,a,0,this.o.length-this.fa),Yw(this.o,0,a,this.o.length-this.fa,this.head),this.fa=0,this.head=this.length,this.o=a):this.fa===this.head?(this.head=this.fa=0,this.o=a):null};function ax(a,b){for(var c=a.length,d=0;;)if(da)){a+=1;continue}break}hx=!1;return 0c)return a;a:for(;;){var e=cMath.random()&&15>d)d+=1;else break a;if(d>this.level){for(var e=this.level+1;;)if(e<=d+1)c[e]=this.header,e+=1;else break;this.level=d}for(d=Ex(a,b,Array(d));;)return 0<=this.level?(c=c[0].forward,d.forward[0]=c[0],c[0]=d):null}; +Gx.prototype.remove=function(a){var b=Array(15),c=Fx(this.header,a,this.level,b);c=0===c.forward.length?null:c.forward[0];if(null!=c&&c.key===a){for(a=0;;)if(a<=this.level){var d=b[a].forward;c===(ad)return c===b.header?null:c;var e;a:for(e=c;;){e=d=a)break a}null!=e?(--d,c=e):--d}}Gx.prototype.S=function(){return function(a){return function d(c){return new kf(null,function(){return function(){return null==c?null:ae(new R(null,2,5,T,[c.key,c.H],null),d(c.forward[0]))}}(a),null,null)}}(this)(this.header.forward[0])}; +Gx.prototype.R=function(a,b,c){return Y(b,function(){return function(a){return Y(b,Qi,""," ","",c,a)}}(this),"{",", ","}",c,this)};var Ix=new Gx(Ex(null,null,0),0);function Jx(a){var b=(new Date).valueOf()+a,c=Hx(b),d=t(t(c)?c.keya:b)?a+8:a,[v.h(c),v.h(a)].join("")):null} +function Vy(a){var b=J(a,0,null),c=J(a,1,null);a=J(a,2,null);return["rgb(",v.h(b),",",v.h(c),",",v.h(a),")"].join("")} +var Wy=hj(function(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;var b=D.c(a,Nk),c=D.c(a,pl);a=K.l(a,Nk,t(c)?wb(b):b);var d=null!=a&&(a.m&64||q===a.G)?P(U,a):a,e=D.c(d,Ok),f=D.c(d,Tn);b=D.c(d,Kj);var h=D.c(d,dk);c=D.c(d,Vl);var k=D.c(d,Nk),l=D.c(d,Yn);d=D.c(d,pl);var p=t(k)?t(e)?e:"fg":f;e=Uy(t(k)?t(f)?f:"bg":e,b,"fg-");h=Uy(p,h,"bg-");c=vg(ub,new R(null,6,5,T,[e,h,t(b)?"bright":null,t(l)?"italic":null,t(c)?"underline":null,t(d)?"cursor":null],null));if(E(c))a:for(b=new cb,c=E(c);;)if(null!=c)b.append(""+ +v.h(y(c))),c=z(c),null!=c&&b.append(" ");else{b=b.toString();break a}else b=null;l=null!=a&&(a.m&64||q===a.G)?P(U,a):a;a=D.c(l,Ok);c=D.c(l,Tn);h=D.c(l,Nk);l=t(h)?c:a;a=t(h)?a:c;a=hi.A(be([t(ze.h?ze.h(l):ze.call(null,l))?new r(null,1,[ik,Vy(l)],null):null,t(ze.h?ze.h(a):ze.call(null,a))?new r(null,1,[al,Vy(a)],null):null]));return hi.A(be([t(b)?new r(null,1,[vn,b],null):null,t(a)?new r(null,1,[fm,a],null):null]))}); +function Xy(a,b){var c=J(a,0,null),d=J(a,1,null);d=Bg(d,pl,function(){return function(a){return t(a)?B(b):a}}(a,c,d));return new R(null,3,5,T,[ro,Wy.h?Wy.h(d):Wy.call(null,d),c],null)}function Yy(a,b){var c=J(a,0,null),d=J(a,1,null),e=jg(b,c);e=E(e)?new R(null,2,5,T,[Eo(e),d],null):null;var f=K.l(d,pl,!0);f=new R(null,2,5,T,[Vd(c,b),f],null);c=kg(b+1,c);d=E(c)?new R(null,2,5,T,[Eo(c),d],null):null;return vg(ub,new R(null,3,5,T,[e,f,d],null))} +function Zy(a,b){for(var c=he,d=a,e=b;;)if(E(d)){var f=y(d),h=J(f,0,null);J(f,1,null);h=H(h);if(h<=e)c=ge.c(c,f),d=vd(d),e-=h;else return O.A(c,Yy(f,e),be([vd(d)]))}else return c}function $y(a,b,c){a=t(B(b))?Zy(B(a),B(b)):B(a);return new R(null,2,5,T,[Lm,Ii(bg(function(){return function(a,b){return pe(new R(null,3,5,T,[Xy,b,c],null),new r(null,1,[mk,a],null))}}(a),a))],null)}var qA=new ti(null,new r(null,3,["small",null,"medium",null,"big",null],null),null); +function rA(a,b,c,d,e){var f=yp(function(){var a=B(c);return t(qA.h?qA.h(a):qA.call(null,a))?["font-",v.h(a)].join(""):null}),h=yp(function(){return function(){var d=B(a),e=B(b),f=B(c);f=t(qA.h?qA.h(f):qA.call(null,f))?null:new r(null,1,[wk,f],null);return hi.A(be([new r(null,2,[fl,[v.h(d),"ch"].join(""),no,[v.h(1.3333333333*e),"em"].join("")],null),f]))}}(f)),k=yp(function(){return function(){return Lu(B(d))}}(f,h)),l=yp(function(a,c,d){return function(){return xg(function(a,b,c){return function(d){return yp(function(a, +b,c){return function(){return D.c(B(c),d)}}(a,b,c))}}(a,c,d),Fi(0,B(b),1))}}(f,h,k)),p=yp(function(){return function(){return Mu(B(d))}}(f,h,k,l)),m=yp(function(a,b,c,d,e){return function(){return zn.h(B(e))}}(f,h,k,l,p)),u=yp(function(a,b,c,d,e){return function(){return Aj.h(B(e))}}(f,h,k,l,p,m)),w=yp(function(a,b,c,d,e){return function(){return On.h(B(e))}}(f,h,k,l,p,m,u));return function(a,b,c,d,f,h,k,l){return function(){return new R(null,3,5,T,[Gm,new r(null,2,[vn,B(a),fm,B(b)],null),bg(function(a, +b,c,d,f,h,k,l){return function(m,p){var u=yp(function(a,b,c,d,e,f,h,k){return function(){var a=B(k);return t(a)?(a=G.c(m,B(h)))?B(f):a:a}}(a,b,c,d,f,h,k,l));return pe(new R(null,4,5,T,[$y,p,u,e],null),new r(null,1,[mk,m],null))}}(a,b,c,d,f,h,k,l),B(d))],null)}}(f,h,k,l,p,m,u,w)} +function sA(){return new R(null,2,5,T,[Ym,new r(null,4,[Mn,"1.1",Fl,"0 0 866.0254037844387 866.0254037844387",vn,"icon",mo,new r(null,1,[An,'\x3cdefs\x3e \x3cmask id\x3d"small-triangle-mask"\x3e \x3crect width\x3d"100%" height\x3d"100%" fill\x3d"white"/\x3e \x3cpolygon points\x3d"508.01270189221935 433.01270189221935, 208.0127018922194 259.8076211353316, 208.01270189221927 606.217782649107" fill\x3d"black"\x3e\x3c/polygon\x3e \x3c/mask\x3e \x3c/defs\x3e \x3cpolygon points\x3d"808.0127018922194 433.01270189221935, 58.01270189221947 -1.1368683772161603e-13, 58.01270189221913 866.0254037844386" mask\x3d"url(#small-triangle-mask)" fill\x3d"white"\x3e\x3c/polygon\x3e \x3cpolyline points\x3d"481.2177826491071 333.0127018922194, 134.80762113533166 533.0127018922194" stroke\x3d"white" stroke-width\x3d"90"\x3e\x3c/polyline\x3e'],null)], +null)],null)}function tA(){return new R(null,3,5,T,[Ym,new r(null,3,[Mn,"1.1",Fl,"0 0 12 12",vn,"icon"],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M1,0 L11,6 L1,12 Z"],null)],null)],null)}function uA(){return new R(null,4,5,T,[Ym,new r(null,3,[Mn,"1.1",Fl,"0 0 12 12",vn,"icon"],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M1,0 L4,0 L4,12 L1,12 Z"],null)],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M8,0 L11,0 L11,12 L8,12 Z"],null)],null)],null)} +function vA(){return new R(null,4,5,T,[Ym,new r(null,3,[Mn,"1.1",Fl,"0 0 12 12",vn,"icon"],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M12,0 L7,0 L9,2 L7,4 L8,5 L10,3 L12,5 Z"],null)],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M0,12 L0,7 L2,9 L4,7 L5,8 L3,10 L5,12 Z"],null)],null)],null)} +function wA(){return new R(null,4,5,T,[Ym,new r(null,3,[Mn,"1.1",Fl,"0 0 12 12",vn,"icon"],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M7,5 L7,0 L9,2 L11,0 L12,1 L10,3 L12,5 Z"],null)],null),new R(null,2,5,T,[Fj,new r(null,1,[pn,"M5,7 L0,7 L2,9 L0,11 L1,12 L3,10 L5,12 Z"],null)],null)],null)}function xA(a,b){return function(b){return function(){return new R(null,3,5,T,[cl,new r(null,1,[Sl,b],null),new R(null,1,5,T,[t(B(a))?uA:tA],null)],null)}}(Ty(b,new fy(null,null,null)))} +function yA(a){return 10>a?["0",v.h(a)].join(""):a}function zA(a){var b=Math.floor((a%60+60)%60);return[v.h(yA(Math.floor(a/60))),":",v.h(yA(b))].join("")}function AA(a,b){var c=T,d=new R(null,2,5,T,[Yk,zA(B(a))],null),e=T;var f=B(a);var h=B(b);f=["-",v.h(zA(h-f))].join("");return new R(null,3,5,c,[Ml,d,new R(null,2,5,e,[co,f],null)],null)} +function BA(){function a(a){a.preventDefault();return Ry(a.currentTarget.parentNode.parentNode.parentNode)}return function(){return new R(null,4,5,T,[un,new r(null,1,[Sl,a],null),new R(null,1,5,T,[vA],null),new R(null,1,5,T,[wA],null)],null)}} +function CA(a,b){var c=Sy(b,function(a){var b=a.currentTarget.offsetWidth,c=a.currentTarget.getBoundingClientRect();return cy(Nu(a.clientX-c.left,b)/b)}),d=yp(function(){return function(){return[v.h(100*B(a)),"%"].join("")}}(c));return function(a,b){return function(){return new R(null,2,5,T,[Vj,new R(null,3,5,T,[Bl,new r(null,1,[Ql,a],null),new R(null,2,5,T,[Cj,new R(null,2,5,T,[ro,new r(null,1,[fm,new r(null,1,[fl,B(b)],null)],null)],null)],null)],null)],null)}}(c,d)} +function DA(a,b,c,d){return function(e){return function(){return new R(null,5,5,T,[Kk,new R(null,3,5,T,[xA,a,d],null),new R(null,3,5,T,[AA,b,c],null),new R(null,1,5,T,[BA],null),new R(null,3,5,T,[CA,e,d],null)],null)}}(yp(function(){return B(b)/B(c)}))} +function EA(a){return function(a){return function(){return new R(null,3,5,T,[ol,new r(null,1,[Sl,a],null),new R(null,2,5,T,[Xk,new R(null,2,5,T,[km,new R(null,2,5,T,[ro,new R(null,1,5,T,[sA],null)],null)],null)],null)],null)}}(Ty(a,new fy(null,null,null)))}function FA(){return new R(null,2,5,T,[Ek,new R(null,1,5,T,[xn],null)],null)}function GA(a){return Wf(function(b){return a[b]},new R(null,4,5,T,["altKey","shiftKey","metaKey","ctrlKey"],null))} +function HA(a){var b=t(GA(a))?null:function(){switch(a.key){case " ":return new fy(null,null,null);case "f":return bm;case "0":return cy(0);case "1":return cy(.1);case "2":return cy(.2);case "3":return cy(.3);case "4":return cy(.4);case "5":return cy(.5);case "6":return cy(.6);case "7":return cy(.7);case "8":return cy(.8);case "9":return cy(.9);default:return null}}();if(t(b))return b;switch(a.key){case "\x3e":return new ey(null,null,null);case "\x3c":return new dy(null,null,null);default:return null}} +function IA(a){if(t(GA(a)))return null;switch(a.which){case 37:return new ay(null,null,null);case 39:return new $x(null,null,null);default:return null}}function JA(a){var b=HA(a);return t(b)?(a.preventDefault(),G.c(b,bm)?(Ry(a.currentTarget),null):b):null}function KA(a){var b=IA(a);return t(b)?(a.preventDefault(),b):null} +function LA(a,b,c,d){a=t(a)?['"',v.h(a),'"'].join(""):"untitled";return new R(null,4,5,T,[dl,t(d)?new R(null,2,5,T,[jo,new r(null,1,[zl,d],null)],null):null,a,t(b)?new R(null,3,5,T,[ro," by ",t(c)?new R(null,3,5,T,[lo,new r(null,1,[ho,c],null),b],null):b],null):null],null)} +function MA(a){var b=Mx(1,ig.h(iy)),c=Kx(1);lx(function(c){return function(){var d=function(){return function(a){return function(){function b(b){for(;;){a:try{for(;;){var c=a(b);if(!N(c,Z)){var d=c;break a}}}catch(x){if(x instanceof Object)b[5]=x,Cx(b),d=Z;else throw x;}if(!N(d,Z))return d}}function c(){var a=[null,null,null,null,null,null,null,null,null,null,null,null];a[0]=d;a[1]=1;return a}var d=null;d=function(a){switch(arguments.length){case 0:return c.call(this);case 1:return b.call(this,a)}throw Error("Invalid arity: "+ +(arguments.length-1));};d.B=c;d.h=b;return d}()}(function(){return function(c){var d=c[1];if(7===d)return c[7]=c[2],Ax(c,12,b,!1);if(1===d)return c[2]=null,c[1]=2,Z;if(4===d)return c[8]=c[2],Ax(c,5,b,!0);if(6===d)return d=Jx(3E3),Ux(c,8,new R(null,2,5,T,[a,d],null));if(3===d)return Bx(c,c[2]);if(12===d)return c[9]=c[2],c[2]=null,c[1]=2,Z;if(2===d)return zx(c,4,a);if(11===d)return c[2]=c[2],c[1]=7,Z;if(9===d)return c[2]=null,c[1]=6,Z;if(5===d)return c[10]=c[2],c[2]=null,c[1]=6,Z;if(10===d)return c[2]= +null,c[1]=11,Z;if(8===d){var e=c[2];d=J(e,0,null);e=J(e,1,null);e=G.c(e,a);c[11]=d;c[1]=e?9:10;return Z}return null}}(c),c)}(),f=function(){var a=d.B?d.B():d.call(null);a[6]=c;return a}();return yx(f)}}(c));return b} +function NA(a,b){var c=dg.h(b),d=Kx(1);lx(function(b,c){return function(){var d=function(){return function(a){return function(){function b(b){for(;;){a:try{for(;;){var c=a(b);if(!N(c,Z)){var d=c;break a}}}catch(F){if(F instanceof Object)b[5]=F,Cx(b),d=Z;else throw F;}if(!N(d,Z))return d}}function c(){var a=[null,null,null,null,null,null,null,null,null,null,null,null,null];a[0]=d;a[1]=1;return a}var d=null;d=function(a){switch(arguments.length){case 0:return c.call(this);case 1:return b.call(this, +a)}throw Error("Invalid arity: "+(arguments.length-1));};d.B=c;d.h=b;return d}()}(function(b,c){return function(d){var e=d[1];if(7===e){var f=d[7],h=wb(null==f);d[8]=d[2];d[1]=h?8:9;return Z}if(20===e)return f=d[7],d[1]=t(q===f.Fe)?23:24,Z;if(27===e)return d[2]=!1,d[1]=28,Z;if(1===e)return d[2]=null,d[1]=2,Z;if(24===e)return f=d[7],d[1]=t(!f.Tc)?26:27,Z;if(4===e){f=d[7];var k=d[9];h=d[2];var l=J(h,0,null),m=J(h,1,null);d[10]=m;d[7]=l;d[9]=h;d[1]=t(null==l)?5:6;return Z}return 15===e?(d[2]=!1,d[1]= +16,Z):21===e?(f=d[7],h=Ab(Yx,f),d[2]=h,d[1]=22,Z):31===e?(d[11]=d[2],d[2]=null,d[1]=2,Z):13===e?(d[2]=d[2],d[1]=10,Z):22===e?(d[1]=t(d[2])?29:30,Z):29===e?(f=d[7],h=B(a),h=Zx(f,h),h=gg.l(c,wo,h),d[2]=h,d[1]=31,Z):6===e?(d[2]=null,d[1]=7,Z):28===e?(d[2]=d[2],d[1]=25,Z):25===e?(d[2]=d[2],d[1]=22,Z):17===e?(m=d[10],f=d[7],k=d[9],h=gg.c(a,function(){return function(a,b){return function(a){return Xx(b,a)}}(k,f,m,m,f,k,e,b,c)}()),d[2]=h,d[1]=19,Z):3===e?Bx(d,d[2]):12===e?(f=d[7],d[1]=t(!f.Tc)?14:15,Z): +2===e?(h=B(c),h=E(h),Ux(d,4,h)):23===e?(d[2]=!0,d[1]=25,Z):19===e?(f=d[7],h=wb(null==f),d[12]=d[2],d[1]=h?20:21,Z):11===e?(d[2]=!0,d[1]=13,Z):9===e?(f=d[7],h=Ab(Wx,f),d[2]=h,d[1]=10,Z):5===e?(m=d[10],h=gg.l(c,re,m),d[2]=h,d[1]=7,Z):14===e?(f=d[7],h=Ab(Wx,f),d[2]=h,d[1]=16,Z):26===e?(f=d[7],h=Ab(Yx,f),d[2]=h,d[1]=28,Z):16===e?(d[2]=d[2],d[1]=13,Z):30===e?(d[2]=null,d[1]=31,Z):10===e?(d[1]=t(d[2])?17:18,Z):18===e?(d[2]=null,d[1]=19,Z):8===e?(f=d[7],d[1]=t(q===f.sb)?11:12,Z):null}}(b,c),b,c)}(),e=function(){var a= +d.B?d.B():d.call(null);a[6]=b;return a}();return yx(e)}}(d,c));return d} +function OA(a,b,c){c=Ty(c,!0);var d=Sy(b,JA),e=Sy(b,KA),f=yp(function(){return function(){return Hm.h(B(a))}}(c,d,e)),h=yp(function(){return function(){return el.h(B(a))}}(c,d,e,f)),k=yp(function(a,b,c,d,e){return function(){var a=B(d);return t(a)?a:B(e)}}(c,d,e,f,h)),l=yp(function(b,c,d,e,f,h){return function(){var b=Gk.h(B(a));b=t(b)?b:wb(B(h));return t(b)?"hud":null}}(c,d,e,f,h,k)),p=yp(function(){return function(){return["asciinema-theme-",v.h(gm.h(B(a)))].join("")}}(c,d,e,f,h,k,l)),m=yp(function(){return function(){var b= +fl.h(B(a));return t(b)?b:80}}(c,d,e,f,h,k,l,p)),u=yp(function(){return function(){var b=no.h(B(a));return t(b)?b:24}}(c,d,e,f,h,k,l,p,m)),w=yp(function(){return function(){return wk.h(B(a))}}(c,d,e,f,h,k,l,p,m,u)),x=yp(function(){return function(){return V.h(B(a))}}(c,d,e,f,h,k,l,p,m,u,w)),C=yp(function(){return function(){return ml.h(B(a))}}(c,d,e,f,h,k,l,p,m,u,w,x)),F=yp(function(){return function(){return jn.h(B(a))}}(c,d,e,f,h,k,l,p,m,u,w,x,C)),I=yp(function(){return function(){return Uj.h(B(a))}}(c, +d,e,f,h,k,l,p,m,u,w,x,C,F)),M=yp(function(){return function(){return wl.h(B(a))}}(c,d,e,f,h,k,l,p,m,u,w,x,C,F,I)),S=B(a),X=null!=S&&(S.m&64||q===S.G)?P(U,S):S,Ga=D.c(X,ki),db=D.c(X,li),Q=D.c(X,mi),xb=D.c(X,ni);return function(a,c,d,e,f,h,k,l,m,p,u,w,x,C,F,I,M,S,Q,X,Ga,db){return function(){return new R(null,3,5,T,[Cn,new r(null,5,[Jj,-1,Zj,c,Rn,d,Vm,a,vn,B(k)],null),new R(null,7,5,T,[Sm,new r(null,1,[vn,B(l)],null),new R(null,6,5,T,[rA,m,p,u,w,x],null),new R(null,5,5,T,[DA,C,F,I,b],null),t(t(Q)?Q: +X)?new R(null,5,5,T,[LA,Q,X,Ga,db],null):null,t(B(h))?null:new R(null,2,5,T,[EA,b],null),t(B(e))?new R(null,1,5,T,[FA],null):null],null)],null)}}(c,d,e,f,h,k,l,p,m,u,w,x,C,F,I,M,S,X,Ga,db,Q,xb)} +function PA(a){var b=Kx(null),c=Kx(new dx(bx(1),1));return function(b,c){return function(){return Pp(new r(null,4,[ln,"asciinema-player",Dm,function(b,c){return function(){return OA(a,b,c)}}(b,c),$k,function(b,c){return function(){var d=ty(Gl.h(B(a))),e=MA(c);Tx(e,b);return NA(a,Je([b,d]))}}(b,c),Wm,function(){return function(){return uy(Gl.h(B(a)))}}(b,c)],null))}}(b,c)};function QA(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,Ak),e=D.c(c,Gl);d=a.h?a.h(d):a.call(null,d);zy(e,d);return K.l(c,Ak,d)}$x.prototype.sb=q;$x.prototype.qb=function(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,Uj),e=D.c(c,wl),f=D.c(c,Gl);t(e)&&yy(f,Nu(d+5,e));return c};ay.prototype.sb=q;ay.prototype.qb=function(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,Uj),e=D.c(c,wl),f=D.c(c,Gl);t(e)&&yy(f,Nu(d+-5,e));return c};by.prototype.sb=q; +by.prototype.qb=function(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,wl),e=D.c(c,Gl);t(d)&&(d*=nn.h(this),yy(e,d));return c};dy.prototype.sb=q;dy.prototype.qb=function(a,b){return QA(function(){return function(a){return a/2}}(this),b)};ey.prototype.sb=q;ey.prototype.qb=function(a,b){return QA(function(){return function(a){return 2*a}}(this),b)};fy.prototype.sb=q;fy.prototype.qb=function(a,b){xy(Gl.h(b));return b};gy.prototype.sb=q;gy.prototype.qb=function(a,b){return K.l(b,ml,so.h(this))}; +hy.prototype.sb=q;hy.prototype.qb=function(a,b){return K.l(b,Gk,so.h(this))};jy.prototype.sb=q;jy.prototype.qb=function(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a;D.c(c,fl);D.c(c,no);D.c(c,wl);c=null!=b&&(b.m&64||q===b.G)?P(U,b):b;var d=D.c(c,fl),e=D.c(c,no),f=null!=this&&(this.m&64||q===this.G)?P(U,this):this,h=D.c(f,fl),k=D.c(f,no);f=D.c(f,wl);return K.A(c,fl,t(d)?d:h,be([no,t(e)?e:k,wl,f]))};ky.prototype.sb=q;ky.prototype.qb=function(a,b){return K.l(b,Hm,Hm.h(this))};oy.prototype.sb=q; +oy.prototype.qb=function(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,oi);t(d)&&(ap(bp),d.B?d.B():d.call(null));return c};ry.prototype.sb=q;ry.prototype.qb=function(a,b){return K.l(b,Uj,Zk.h(this))};function RA(){return ig.l(function(a,b){return new R(null,2,5,T,[a,new gy(b,null,null,null)],null)},rg(function(a){return a+.5},.5),og(new R(null,2,5,T,[!1,!0],null)))}function SA(a){var b=Dy(RA());return K.l(K.l(a,ml,!0),Ol,b)} +function TA(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;var b=D.c(a,Ol);Tw(b);return K.l(K.l(a,ml,!0),Ol,null)}function UA(a){a=null!=a&&(a.m&64||q===a.G)?P(U,a):a;a=D.c(a,Ol);return t(a)?Je([a]):vi}my.prototype.sb=q; +my.prototype.qb=function(a,b){var c=null!=a&&(a.m&64||q===a.G)?P(U,a):a;D.c(c,jn);var d=null!=b&&(b.m&64||q===b.G)?P(U,b):b,e=D.c(d,jn);c=D.c(d,pi);var f=D.c(d,qi),h=null!=this&&(this.m&64||q===this.G)?P(U,this):this;h=D.c(h,jn);if(G.c(e,h))return d;d=K.A(d,jn,h,be([el,!0]));if(t(h))return t(c)&&(c.B?c.B():c.call(null)),SA(d);t(f)&&(f.B?f.B():f.call(null));return TA(d)};my.prototype.Fe=q;my.prototype.de=function(a,b){return UA(b)};py.prototype.sb=q; +py.prototype.qb=function(a,b){var c=K.l(b,V,V.h(this));c=null!=c&&(c.m&64||q===c.G)?P(U,c):c;var d=D.c(c,Ol);return t(d)?SA(TA(c)):c};py.prototype.Fe=q;py.prototype.de=function(a,b){return UA(b)};function VA(a){return t(a)?(a=ig.c(parseFloat,Fo(""+v.h(a),/:/)),a=ig.l(Ye,cf(a),rg(function(){return function(a){return 60*a}}(a),1)),P(Xe,a)):null} +function WA(a,b,c){t(a)?"string"===typeof a?t(0===a.indexOf("data:application/json;base64,"))?(b=a.substring(29).replace(RegExp("\\s","g"),""),b=JSON.parse(atob(b)),b=fj(b),b=new r(null,1,[V,new r(null,1,[il,b],null)],null)):t(0===a.indexOf("data:text/plain,"))?(a=a.substring(16),b=Ju(Ot(t(b)?b:80,t(c)?c:24),a),b=new r(null,1,[V,b],null)):b=t(0===a.indexOf("npt:"))?new r(null,1,[Zk,VA(a.substring(4))],null):null:b=new r(null,1,[V,new r(null,1,[il,a],null)],null):b=null;return b} +var XA=new r(null,2,[pl,new r(null,1,[On,!1],null),il,he],null); +function YA(a,b){var c=null!=b&&(b.m&64||q===b.G)?P(U,b):b,d=D.c(c,no),e=D.l(c,wk,"small"),f=D.l(c,Ak,1),h=D.c(c,Hk),k=D.c(c,fl),l=D.c(c,rl),p=D.l(c,cm,!1),m=D.l(c,gm,"asciinema"),u=D.c(c,qm),w=D.c(c,Bm),x=D.l(c,vm,!1),C=D.l(c,Em,!1),F=function(){var a=VA(h);return t(a)?a:0}();w=WA(w,k,d);var I=null!=w&&(w.m&64||q===w.G)?P(U,w):w;w=D.c(I,V);I=D.c(I,Zk);var M=t(I)?I:wb(w)&&0a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("
    +INFINI Pizza +

    INFINI Pizza +#

    Introduction +#

    INFINI Pizza is a distributed hybrid search database system. Our mission is to deliver real-time smart +search experiences tailored for enterprises by fully harnessing the potential of modern hardware and the AI capability. +We are committed to meeting the demands of high concurrency and high throughput in challenging environments, +all while providing seamless and efficient search capabilities.

    Learn More

    Features +#

    The Next-Gen Real-Time Search & AI-Native Innovation Engine Written in Rust.

    Major features of Pizza:

    • True Real-Time, get search results instantly after insertion, no need to +refresh anymore.
    • Support partial update in place, no longer pull and push back the entire +document again.
    • High performance, lightning fast with high throughput and low latency, +hardware reduced.
    • High scalability, supports very large-scale clusters, beyond petabytes.
    • Native integration with LLMs and ML, empowering AI-Native enterprise +innovation.
    • Design with storage and computation separation, and also storage and index +separation.
    Getting Started Now

    Community +#

    Join Our Discord Server

    Who is using? +#

    If you are using Pizza and feel it pretty good, please +let us know. +All our user cases are located +here. Thank you for your support.