From 01ce429a90c772aaeb0b66117ec8e3ca097d122e Mon Sep 17 00:00:00 2001 From: John Kerl Date: Mon, 24 May 2021 22:02:43 -0400 Subject: [PATCH] iterating --- .gitignore | 1 + docs6/10min.rst | 8 +- docs6/10min.rst.in | 6 +- docs6/_build/doctrees/10min.doctree | Bin 46598 -> 0 bytes docs6/_build/doctrees/build.doctree | Bin 67197 -> 0 bytes docs6/_build/doctrees/contact.doctree | Bin 3824 -> 0 bytes docs6/_build/doctrees/cookbook.doctree | Bin 96714 -> 0 bytes docs6/_build/doctrees/cookbook2.doctree | Bin 62030 -> 0 bytes docs6/_build/doctrees/cookbook3.doctree | Bin 23529 -> 0 bytes docs6/_build/doctrees/customization.doctree | Bin 19083 -> 0 bytes docs6/_build/doctrees/data-examples.doctree | Bin 26335 -> 0 bytes docs6/_build/doctrees/data-sharing.doctree | Bin 31915 -> 0 bytes docs6/_build/doctrees/environment.pickle | Bin 219201 -> 0 bytes docs6/_build/doctrees/etymology.doctree | Bin 6002 -> 0 bytes docs6/_build/doctrees/faq.doctree | Bin 79271 -> 0 bytes .../doctrees/feature-comparison.doctree | Bin 23981 -> 0 bytes docs6/_build/doctrees/features.doctree | Bin 22020 -> 0 bytes docs6/_build/doctrees/file-formats.doctree | Bin 86526 -> 0 bytes docs6/_build/doctrees/index.doctree | Bin 5836 -> 0 bytes docs6/_build/doctrees/install.doctree | Bin 13370 -> 0 bytes .../doctrees/internationalization.doctree | Bin 8749 -> 0 bytes .../doctrees/log-processing-examples.doctree | Bin 14214 -> 0 bytes docs6/_build/doctrees/manpage.doctree | Bin 216935 -> 0 bytes docs6/_build/doctrees/originality.doctree | Bin 27893 -> 0 bytes docs6/_build/doctrees/performance.doctree | Bin 12540 -> 0 bytes docs6/_build/doctrees/quick-examples.doctree | Bin 9405 -> 0 bytes .../doctrees/record-heterogeneity.doctree | Bin 16155 -> 0 bytes docs6/_build/doctrees/reference-dsl.doctree | Bin 668400 -> 0 bytes docs6/_build/doctrees/reference-verbs.doctree | Bin 312807 -> 0 bytes docs6/_build/doctrees/reference.doctree | Bin 213054 -> 0 bytes docs6/_build/doctrees/release-docs.doctree | Bin 10494 -> 0 bytes docs6/_build/doctrees/sql-examples.doctree | Bin 19797 -> 0 bytes docs6/_build/doctrees/why.doctree | Bin 38287 -> 0 bytes docs6/_build/html/.buildinfo | 4 - docs6/_build/html/10min.html | 495 - docs6/_build/html/_images/cover-combined.png | Bin 518951 -> 0 bytes docs6/_build/html/_images/linreg-example.jpg | Bin 140569 -> 0 bytes docs6/_build/html/_images/mand.png | Bin 646689 -> 0 bytes docs6/_build/html/_images/omd.png | Bin 78450 -> 0 bytes docs6/_build/html/_sources/10min.rst.txt | 402 - docs6/_build/html/_sources/build.rst.txt | 211 - docs6/_build/html/_sources/contact.rst.txt | 11 - docs6/_build/html/_sources/cookbook.rst.txt | 1143 -- docs6/_build/html/_sources/cookbook2.rst.txt | 526 - docs6/_build/html/_sources/cookbook3.rst.txt | 321 - .../html/_sources/customization.rst.txt | 92 - .../html/_sources/data-examples.rst.txt | 194 - .../_build/html/_sources/data-sharing.rst.txt | 319 - docs6/_build/html/_sources/etymology.rst.txt | 9 - docs6/_build/html/_sources/faq.rst.txt | 658 - .../html/_sources/feature-comparison.rst.txt | 67 - docs6/_build/html/_sources/features.rst.txt | 43 - .../_build/html/_sources/file-formats.rst.txt | 589 - docs6/_build/html/_sources/index.rst.txt | 64 - docs6/_build/html/_sources/install.rst.txt | 54 - .../_sources/internationalization.rst.txt | 17 - .../_sources/log-processing-examples.rst.txt | 185 - docs6/_build/html/_sources/manpage.rst.txt | 2381 ---- .../_build/html/_sources/originality.rst.txt | 43 - .../_build/html/_sources/performance.rst.txt | 23 - .../html/_sources/quick-examples.rst.txt | 74 - .../_sources/record-heterogeneity.rst.txt | 206 - .../html/_sources/reference-dsl.rst.txt | 4932 ------- .../html/_sources/reference-verbs.rst.txt | 3425 ----- docs6/_build/html/_sources/reference.rst.txt | 1096 -- .../_build/html/_sources/release-docs.rst.txt | 21 - .../_build/html/_sources/sql-examples.rst.txt | 227 - docs6/_build/html/_sources/why.rst.txt | 56 - docs6/_build/html/_static/basic.css | 860 -- docs6/_build/html/_static/classic.css | 271 - docs6/_build/html/_static/doctools.js | 315 - .../html/_static/documentation_options.js | 12 - docs6/_build/html/_static/file.png | Bin 286 -> 0 bytes docs6/_build/html/_static/jquery-3.5.1.js | 10872 ---------------- docs6/_build/html/_static/jquery.js | 2 - docs6/_build/html/_static/language_data.js | 297 - docs6/_build/html/_static/minus.png | Bin 90 -> 0 bytes docs6/_build/html/_static/plus.png | Bin 90 -> 0 bytes docs6/_build/html/_static/pygments.css | 76 - docs6/_build/html/_static/searchtools.js | 514 - docs6/_build/html/_static/sidebar.js | 159 - docs6/_build/html/_static/underscore-1.3.1.js | 999 -- docs6/_build/html/_static/underscore.js | 31 - docs6/_build/html/build.html | 318 - docs6/_build/html/contact.html | 107 - docs6/_build/html/cookbook.html | 1126 -- docs6/_build/html/cookbook2.html | 610 - docs6/_build/html/cookbook3.html | 405 - docs6/_build/html/customization.html | 186 - docs6/_build/html/data-examples.html | 284 - docs6/_build/html/data-sharing.html | 401 - docs6/_build/html/etymology.html | 106 - docs6/_build/html/faq.html | 671 - docs6/_build/html/feature-comparison.html | 162 - docs6/_build/html/features.html | 129 - docs6/_build/html/file-formats.html | 643 - docs6/_build/html/genindex.html | 80 - docs6/_build/html/index.html | 169 - docs6/_build/html/install.html | 149 - docs6/_build/html/internationalization.html | 113 - .../_build/html/log-processing-examples.html | 279 - docs6/_build/html/manpage.html | 2478 ---- docs6/_build/html/objects.inv | Bin 3150 -> 0 bytes docs6/_build/html/originality.html | 130 - docs6/_build/html/performance.html | 117 - docs6/_build/html/quick-examples.html | 172 - docs6/_build/html/record-heterogeneity.html | 298 - docs6/_build/html/reference-dsl.html | 4459 ------- docs6/_build/html/reference-verbs.html | 3207 ----- docs6/_build/html/reference.html | 1112 -- docs6/_build/html/release-docs.html | 119 - docs6/_build/html/search.html | 89 - docs6/_build/html/searchindex.js | 1 - docs6/_build/html/sql-examples.html | 328 - docs6/_build/html/why.html | 149 - docs6/build.rst | 90 +- docs6/build.rst.in | 90 +- docs6/customization.rst | 2 + docs6/customization.rst.in | 2 + docs6/genrst | 6 +- docs6/install.rst | 6 +- docs6/install.rst.in | 6 +- docs6/internationalization.rst | 8 +- docs6/internationalization.rst.in | 8 +- 124 files changed, 32 insertions(+), 51094 deletions(-) delete mode 100644 docs6/_build/doctrees/10min.doctree delete mode 100644 docs6/_build/doctrees/build.doctree delete mode 100644 docs6/_build/doctrees/contact.doctree delete mode 100644 docs6/_build/doctrees/cookbook.doctree delete mode 100644 docs6/_build/doctrees/cookbook2.doctree delete mode 100644 docs6/_build/doctrees/cookbook3.doctree delete mode 100644 docs6/_build/doctrees/customization.doctree delete mode 100644 docs6/_build/doctrees/data-examples.doctree delete mode 100644 docs6/_build/doctrees/data-sharing.doctree delete mode 100644 docs6/_build/doctrees/environment.pickle delete mode 100644 docs6/_build/doctrees/etymology.doctree delete mode 100644 docs6/_build/doctrees/faq.doctree delete mode 100644 docs6/_build/doctrees/feature-comparison.doctree delete mode 100644 docs6/_build/doctrees/features.doctree delete mode 100644 docs6/_build/doctrees/file-formats.doctree delete mode 100644 docs6/_build/doctrees/index.doctree delete mode 100644 docs6/_build/doctrees/install.doctree delete mode 100644 docs6/_build/doctrees/internationalization.doctree delete mode 100644 docs6/_build/doctrees/log-processing-examples.doctree delete mode 100644 docs6/_build/doctrees/manpage.doctree delete mode 100644 docs6/_build/doctrees/originality.doctree delete mode 100644 docs6/_build/doctrees/performance.doctree delete mode 100644 docs6/_build/doctrees/quick-examples.doctree delete mode 100644 docs6/_build/doctrees/record-heterogeneity.doctree delete mode 100644 docs6/_build/doctrees/reference-dsl.doctree delete mode 100644 docs6/_build/doctrees/reference-verbs.doctree delete mode 100644 docs6/_build/doctrees/reference.doctree delete mode 100644 docs6/_build/doctrees/release-docs.doctree delete mode 100644 docs6/_build/doctrees/sql-examples.doctree delete mode 100644 docs6/_build/doctrees/why.doctree delete mode 100644 docs6/_build/html/.buildinfo delete mode 100644 docs6/_build/html/10min.html delete mode 100644 docs6/_build/html/_images/cover-combined.png delete mode 100644 docs6/_build/html/_images/linreg-example.jpg delete mode 100644 docs6/_build/html/_images/mand.png delete mode 100644 docs6/_build/html/_images/omd.png delete mode 100644 docs6/_build/html/_sources/10min.rst.txt delete mode 100644 docs6/_build/html/_sources/build.rst.txt delete mode 100644 docs6/_build/html/_sources/contact.rst.txt delete mode 100644 docs6/_build/html/_sources/cookbook.rst.txt delete mode 100644 docs6/_build/html/_sources/cookbook2.rst.txt delete mode 100644 docs6/_build/html/_sources/cookbook3.rst.txt delete mode 100644 docs6/_build/html/_sources/customization.rst.txt delete mode 100644 docs6/_build/html/_sources/data-examples.rst.txt delete mode 100644 docs6/_build/html/_sources/data-sharing.rst.txt delete mode 100644 docs6/_build/html/_sources/etymology.rst.txt delete mode 100644 docs6/_build/html/_sources/faq.rst.txt delete mode 100644 docs6/_build/html/_sources/feature-comparison.rst.txt delete mode 100644 docs6/_build/html/_sources/features.rst.txt delete mode 100644 docs6/_build/html/_sources/file-formats.rst.txt delete mode 100644 docs6/_build/html/_sources/index.rst.txt delete mode 100644 docs6/_build/html/_sources/install.rst.txt delete mode 100644 docs6/_build/html/_sources/internationalization.rst.txt delete mode 100644 docs6/_build/html/_sources/log-processing-examples.rst.txt delete mode 100644 docs6/_build/html/_sources/manpage.rst.txt delete mode 100644 docs6/_build/html/_sources/originality.rst.txt delete mode 100644 docs6/_build/html/_sources/performance.rst.txt delete mode 100644 docs6/_build/html/_sources/quick-examples.rst.txt delete mode 100644 docs6/_build/html/_sources/record-heterogeneity.rst.txt delete mode 100644 docs6/_build/html/_sources/reference-dsl.rst.txt delete mode 100644 docs6/_build/html/_sources/reference-verbs.rst.txt delete mode 100644 docs6/_build/html/_sources/reference.rst.txt delete mode 100644 docs6/_build/html/_sources/release-docs.rst.txt delete mode 100644 docs6/_build/html/_sources/sql-examples.rst.txt delete mode 100644 docs6/_build/html/_sources/why.rst.txt delete mode 100644 docs6/_build/html/_static/basic.css delete mode 100644 docs6/_build/html/_static/classic.css delete mode 100644 docs6/_build/html/_static/doctools.js delete mode 100644 docs6/_build/html/_static/documentation_options.js delete mode 100644 docs6/_build/html/_static/file.png delete mode 100644 docs6/_build/html/_static/jquery-3.5.1.js delete mode 100644 docs6/_build/html/_static/jquery.js delete mode 100644 docs6/_build/html/_static/language_data.js delete mode 100644 docs6/_build/html/_static/minus.png delete mode 100644 docs6/_build/html/_static/plus.png delete mode 100644 docs6/_build/html/_static/pygments.css delete mode 100644 docs6/_build/html/_static/searchtools.js delete mode 100644 docs6/_build/html/_static/sidebar.js delete mode 100644 docs6/_build/html/_static/underscore-1.3.1.js delete mode 100644 docs6/_build/html/_static/underscore.js delete mode 100644 docs6/_build/html/build.html delete mode 100644 docs6/_build/html/contact.html delete mode 100644 docs6/_build/html/cookbook.html delete mode 100644 docs6/_build/html/cookbook2.html delete mode 100644 docs6/_build/html/cookbook3.html delete mode 100644 docs6/_build/html/customization.html delete mode 100644 docs6/_build/html/data-examples.html delete mode 100644 docs6/_build/html/data-sharing.html delete mode 100644 docs6/_build/html/etymology.html delete mode 100644 docs6/_build/html/faq.html delete mode 100644 docs6/_build/html/feature-comparison.html delete mode 100644 docs6/_build/html/features.html delete mode 100644 docs6/_build/html/file-formats.html delete mode 100644 docs6/_build/html/genindex.html delete mode 100644 docs6/_build/html/index.html delete mode 100644 docs6/_build/html/install.html delete mode 100644 docs6/_build/html/internationalization.html delete mode 100644 docs6/_build/html/log-processing-examples.html delete mode 100644 docs6/_build/html/manpage.html delete mode 100644 docs6/_build/html/objects.inv delete mode 100644 docs6/_build/html/originality.html delete mode 100644 docs6/_build/html/performance.html delete mode 100644 docs6/_build/html/quick-examples.html delete mode 100644 docs6/_build/html/record-heterogeneity.html delete mode 100644 docs6/_build/html/reference-dsl.html delete mode 100644 docs6/_build/html/reference-verbs.html delete mode 100644 docs6/_build/html/reference.html delete mode 100644 docs6/_build/html/release-docs.html delete mode 100644 docs6/_build/html/search.html delete mode 100644 docs6/_build/html/searchindex.js delete mode 100644 docs6/_build/html/sql-examples.html delete mode 100644 docs6/_build/html/why.html diff --git a/.gitignore b/.gitignore index 467e03466..3e5fd4fb7 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,7 @@ push2 data/.gitignore docs/_build +docs6/_build c/mlr.static miller-*.src.rpm diff --git a/docs6/10min.rst b/docs6/10min.rst index 15f7a3f48..8e66eb311 100644 --- a/docs6/10min.rst +++ b/docs6/10min.rst @@ -52,7 +52,7 @@ but it can also do format conversion (here, you can pretty-print in tabular form yellow circle 1 87 63.5058 8.3350 purple square 0 91 72.3735 8.2430 -``mlr head`` and ``mlr tail`` count records rather than lines. Whethere you're getting the first few records or the last few, the CSV header is included either way:: +``mlr head`` and ``mlr tail`` count records rather than lines. Whether you're getting the first few records or the last few, the CSV header is included either way:: $ mlr --csv head -n 4 example.csv color,shape,flag,index,quantity,rate @@ -208,12 +208,6 @@ OK, CSV and pretty-print are fine. But Miller can also convert between a few oth { "color": "yellow", "shape": "CIRCLE", "flag": 1, "index": 87, "quantity": 63.5058, "rate": 8.3350, "ratio": 7.619172 } { "color": "purple", "shape": "SQUARE", "flag": 0, "index": 91, "quantity": 72.3735, "rate": 8.2430, "ratio": 8.779995 } -Or, JSON output with vertical-formatting flags:: - - $ mlr --icsv --ojson tail -n 2 example.csv - { "color": "yellow", "shape": "circle", "flag": 1, "index": 87, "quantity": 63.5058, "rate": 8.3350 } - { "color": "purple", "shape": "square", "flag": 0, "index": 91, "quantity": 72.3735, "rate": 8.2430 } - Sorts and stats ^^^^^^^^^^^^^^^ diff --git a/docs6/10min.rst.in b/docs6/10min.rst.in index 0737f0636..1f070b37d 100644 --- a/docs6/10min.rst.in +++ b/docs6/10min.rst.in @@ -16,7 +16,7 @@ but it can also do format conversion (here, you can pretty-print in tabular form POKI_RUN_COMMAND{{mlr --icsv --opprint cat example.csv}}HERE -``mlr head`` and ``mlr tail`` count records rather than lines. Whethere you're getting the first few records or the last few, the CSV header is included either way:: +``mlr head`` and ``mlr tail`` count records rather than lines. Whether you're getting the first few records or the last few, the CSV header is included either way:: POKI_RUN_COMMAND{{mlr --csv head -n 4 example.csv}}HERE @@ -67,10 +67,6 @@ OK, CSV and pretty-print are fine. But Miller can also convert between a few oth POKI_RUN_COMMAND{{mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv}}HERE -Or, JSON output with vertical-formatting flags:: - -POKI_RUN_COMMAND{{mlr --icsv --ojson tail -n 2 example.csv}}HERE - Sorts and stats ^^^^^^^^^^^^^^^ diff --git a/docs6/_build/doctrees/10min.doctree b/docs6/_build/doctrees/10min.doctree deleted file mode 100644 index 2789375b0f59ce58fe70a2e071a1fa2fafd685f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46598 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 diff --git a/docs6/_build/doctrees/cookbook.doctree b/docs6/_build/doctrees/cookbook.doctree deleted file mode 100644 index 70d0c43d2689ee2e0f98ff2bed543e9045b1db1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96714 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 RR;K(HQfnX$y}y+F{{g_xS_S|B diff --git a/docs6/_build/doctrees/cookbook2.doctree b/docs6/_build/doctrees/cookbook2.doctree deleted file mode 100644 index 3d5680794f3d1aef99a20ef791265576fcdc177e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62030 zcmeHweT-w*b)QzN*$+xuYvp)t$CmRvJJNjYkVA5Y^RcT@R*_cHTH2AU-Pr4{x12}v z&G2zZKI*;4otc$aQQ8_^$1g2Xv413W(jsut0Bz9(Zt4O-6BH?sKZ@3EQ6zN=7p;v3 zL4y`a(E|M^ZGY$7k9W!8@MCtymTV4oNxu8;z31bed+xdC-h1x5V}J97|M?LAMIQ

D8%w%%(^|7`1CYbrYJ+uMQH^ovd_dI&j+Ww%=LoqFpw zUY?=+p<4}7vVxOEuhv$+JQiJi@f7*LNf#pi00#NDFA)Z$zs(G0wm)1SlzCPU#CjVM*L8)i(9_4!Ff*a)T$SQ zhE2RW)$pCb@$WdTW^^*NH>pIcoG70wA1@y(ACFEbre2%-Y2*v$wj94Y*Ju{<bgCNdSdDnUXF!sSapn7QSt>@mj(WWR`#Oxrd=<2H7kUmYzDIyo~*#DIabXM z%c6D84qGa2hb*{}CT^6USu0Pip()BA1^>$*N27lN|DVGDpTPf5-)=R_PnT23enDg} zPnM@%9RrCoLQG?_=2Sv7A#ktmS^<~`HqTWp~nQK$!v(cjlt}V@-_GEDCvnHn?d8g519CSc* z6s2gOD86uH)T&lKt=VZHYa{~IFZPnc=n?M5kx?W%0a}{A+loGOcn!qj{uhXGEGH*I z+uw9zr3_wOJ5+fP{84>RkeB4{VXKa4(rl|nVP99qRPlwuJK z4lGy$&_gw$ZlGd&q&PZBrkiiycBE0a!Ol+~&J!n?xx#+od4C$~? z$ly8~eee*ETacvr*M^biPsME)tAl7lNo`V_4`Kx6#!T9s`cdcaX>MrMN!@80fK7vj ztb!f}&C}YT*>vhqKy1-e>_Wlux1or3MW0elIAHFWZ@&v{{`ugNPuAFP8z#*KAg^`7 z&96WF&_hrM0gMaZu>zO-{Y-r(33I0wST;->%s7g$x}6eqCi1X-1M^1NG%3&DoTD}f z8cwwu|4If`7e$j{kZP1RV9KPd>tvDA%)_f&8_hafynum9*P)>y)+UHyO{h9!JXhbO znu8SjvoxVn7VA4ko{0oCjS$wQ=UeL;N$7#BHVrakfV0-Khf-&@t?eEaFN3eW^Yv)_FCL{5RPykcsb~$X+tbVEDrb*9^w1#U&{42G zPn`r2$qgnVl~v>`*P@pWGVj)nria*lgyQPKCfa-J?-YnJwkr(vp;@q3Z&a>y6@p{t zP=JS?&3X9NgKkb)wb`613C($Pz~)>(jONtV%@H-HuD`Q6;WN&djj0&Wr7_EW8?*9x z;)NLc<5B$j`r%t^x(#L3W*e#`wBg+W+wd&~+fY_*wxLQw8-8uTHvIZww4t`%kEjiG{axB{-fTm~fG%zL54yJD2{G9)n5a^E zs@KDxo9JehRT~(cR7q&o-x;u3fA27wRnMJ{s9AOWU7B^lY*xj9F3tL_uFZNZW$+IV zosAiLew4>sS?^?gDK}pd#n|c5=Il5Lh_JFO_$6!$t2QC6pa=&iJN`m?S8p^!a`Fj} zNYR7qt>%ak%F0K5LKca~mg)fz{66;CHq_yeZAs=lMzLI9>!T;wL?JC@~ z(!B%(1QD_(4T$a81mhB-+LgA81nU} zA2{M4P#VykDt}B0##qcPe_PMJ6S1@?t#(SuPs}!QiB$fKdT*bFV0c9s8aqbDSpMQ# zBAL(|qmxo#6*^-qzi};$%Oh}N4u#9Hi*XGR9=hN#n4Xz4^h~^*@TY1yffo$qszM5` zN%E=AZ3fk3Hl0qBd(t9hlYGlcZdm%g;lb=kXRVtkI9Q8HG_d7?9Lr6t7$+JYmb%=c zOIjgO_uRlqR6VRQ6roZ=e;42Q@=8tixY|evnvI5o@2W>xognc1AW_09+rlnkOvSj1ArRYN+zpm| z%h?gDmL&)43s{)Lpc`P!Bwk$O%{hcSMs?a6gAo}6u3mz`q9!)-_#T!p&_(VzRB`dG zrb|mAv}WPfu~jUYMcx#Z@X^!=w+yyT{zY{e7M!nUSHSs(~<}JIj|uc zfV&Xysjv!8xb4tNVY6679|T}V5!lrlLG1GW`umIM@4owsUC1^R>aV`P@a@(}r14+W zf+jXK(Kal(W58S(IISC03H=y1a7-|dL9e5>K4Vbj8bK6*c}Tqcz#^jiTlC;{bzw=Y zlzJK4uNb`+bm?*M=I?>t3G|M_u9bAG$qWWPjC$xP!P{SQzl1IkSmW;M`M2E*nS0~+ zCaveh1|}L96A8IRBU!g{MzXt_Nw}+7{GZ4F1^mw?5@PM%+o*-s{2S7Sx#pbtxQTMITz9^iEOug3-eYswYaj7$*!y{EI7$@E-~LV-?EiU zrPGT`E2uhye2a;NZuxRqYax}+&1W*X<%JyQ%XQ6{1Kj1sOgfugSyH_C|YX^@iP z*TW$F)C+7>k#)y=u-|HuDG09(jAzVC)L7jwo902~FN?wXXX$GwgY_L?%vqYGiY4s5X{z((|2TgkXJwZ zCOLLGY)Nm!LS|7Yo6}qIeqiup#{Pm}>|fVx8e|W-a^!76$`pf5+amgTHOKaN;9-j% zqr`@Vp}{8p%@R9k0KwQzLk!KdCnt9D?pwaKYT*aHPx6m!Zc^stt$%R$xy@PvInWB} zRCZx;aVbrYD3DGqEi7l27x73HrBk_dCYM=M;`TnnN;d-c@Lxs?^fFO9d$`xmd%bBa z+9aXg#{R`3JQ1CeEcUC*DNh$c#uoO5<=ugw)aU@H4I50?*THd2oP-}!?kA;9Kc7D$ zfUymKbRfXQzuzJHl{F-2r`t(MwvwUaU_y)-x7*4>dzt%p+QlL^_m|)j?A|M}71Nr$ctVNWva);pjoF6K4Q7vb zxyNVGr4#sx-VW<9(?<{NDlL)AX6Ba?cobSWFm zV&TDAsHL2{%)jc>WjdAJ-8QL?dqVUnp~_%rB-;#)q%<_*ePwaZ?j}i3bBD}^9_G%+ zVsmGk_uoV9(p*RzI{RnPe5w2~cmgv2h`xq0alWTZu!(~+2=Nx;=pMU!YJ4c5fD>nA z<=`OKCY;3Zqw$VnI%)`nVYOh|MhJCQP1oy`PB5R;vGm;6scEi}IhN znqK3!q5TOWYyX9AoMg{kFJ5X0}c6{Jizk?B^w$cvspLG?<94BIXFN0^vHAPGXc1?`Xi-y_D#v!`@Q|N$=*S z528t>)6%AsEi9^x*)&{jnRI3e8SgqOBh37T)KX?;aXBYJXR_oQ%g)aeXzV4>HD+_E z-28lIQR29;vbcnK!#p6#o_=#A+0^GolKn#@*?REcLF?S{-h)=B{q;B6#(;R-h&~qE zU&``HlKKb?$5Na}YF=#}^|ZOjj_F}@Exa5b-x5o*R=runDK2?39p^z^51VpIIG@g8 z31}OS8p;n=So5%w0sp{~IrR34qf@$#!&b5HmfCxfr%>;ZVH=mzj$l4h`Ps5VGqGJHxP)D|T1uW_3!agDS1lOWI=* zH#r1NiUvu84FeVXzQ~tBrU-AuqIGBr(|}D`*!zW=rpV=2-JQkaL~dGc`&aG~m?&ru zK6(f2*l&o1DV(jvX2+_B=AgP!hmnuQY20@vL@HmZNrr*SdbLGgMt%K^a#b1IW;5*MeY zr{_dAu0mK+6HS4pP@A*C zESBkj7uc6fmR&20uX+K;kgc4-se+Aj(8!+WeMYl^{BDSE6rt^kR&v|Qrj^|@>ZPMz zI_jlUMhAXh^-?`ZvkmtuhSXk;hfW*ro9$zBykKy0jfXsKMd)V@uX0Nm1z$LjQSk5E z0iTW@Ei@61Da>x_i0sgAN}uxvGxA>D^()q zT*aj?wpPjZM4+fj4Jmr1V;m8*Fot6j{BDvr=U{xst`UT`z#1tV0eiUgSE)w9r9n!^ z#B#xNm9Lz{u>VlPw6!k@{8 z72LQO_NAStZEoKwa!{}Jb$2zrzCMfW*vv&goUpj3-G5WEf>!??p~_>QsC)+g-(>vv zdQ~MBYASX@pcU7^%I$XsAYN|R6L5gZCwmbV*WV}KKA2-2kU68!K8~ljPR9A)9RTNt zXHDMGQ!n^v5CeXu1O9(K0DPRv;s(}TGg2uUk9fA<%S-%i2Zeoxe z*TW+A1Q+YMOMGh?EZ6nl= z9I~w!u78e2KM)-X4j69(P79BUVO+=lcm_mWCG@%bIBIO!Bqs)S|_ydD$| z2~ffTKvQUj04TE#OreAWfTqw44p8MB9H0`K6;o(bHSza8omw%3MpqO6 zI6Qy?PDUB1Y?sDx^snv!_3J_Vp@xGWhS0?I=wDp{>bC=Td<_Rb452Y9Qa=w5pn#KU zGlUfs!h-`; zLSq=h0|4xVHw1-BXbeO6NC8SX8PgCxT7XJu_E;niDk37+PS*o}#9qw%`ZRa*U8IED{3Z?nTJ^$!jzEEZNw4nw# z@}t!C5-;L@VC4YZ{dre-Er_ zq#+E~_ux*&J$(Xj2M4H}iX%_7IRM8^r+*F1Qs!tH0gjC=8C`9417O$pgW07T&d3wp zrrI8erE=@X_sbKlH(T=|liPi^kar#|{V#2Mtm94O(Skf-iNggHkFDg@WDtTt-2N;> zbR^AS24>(8qr8gaFhGcpoUW0Ps!rD`1iAzr&Aj%}V`f~Cn_obnE!s=J-W5B2BWw3C2wW!bZRAagaN#o@DM6Ho z5bc6Ep*TV%?;!DfisZmyE+{}SPK7kwqPRRk-^}D80vFC_;WQPpQp9+x*`PBed>zBg z+Kh#m@-=&lireCzBybeG)Dc=Tlp7i45iE+(!nx`42CB8ztcETwx#ut-S?tj-I*kx< z4%`seh;LB1jgCC?D$o4>c@|Wjg*XqWKr9Tep0YlV7!`Ct7=b$cJGktD&V$hfR0!!o zSmE|4zA3zB`&&2|%gkfi;{!U59qb}#lGohCy;5~~2}R0U^EfC5*G6~UGV;U>Tnn{D z6(R5XdcoOr>p0*>Awt&Iaae~By8$JN&KF!F?x84h*NORvv?s2@ngaF+7}Mkfo*ZeP zDgkr19K>>$2c`LV(YB3CXy`y3P7sN*6kKy!obBX;oFroLd9&ydeui-V6)l|dDu(zn z#cPKulIqk>zkU|&lL5H?JaFxGqFCLNyk8BqC@Zf^9-=p?YuuPq=(!DjraE_^&MEky z?@Gp{m^mYy(nkWNqa0I5X|<>CNv`|~F(bb8R-tz``ofWQenWna5J)$njPJ=h4#lEG z>DXF~5f5&^(MLdtUv&DKgdRbv1pp46QcHo}9RQy>vW$ipd}EN&&_(<59kFQD(5}clArfM+%=te*0Hw*{tcAFRhAh~H%6O{K zBeKA?j~_!(WgtT($7eX-#UWG?R8AVK!5oi`DKG~S$W|Zlk0P_Fq1H5>FRCzn>P|Bl zx6;x=%wsy|YTD0L+<4KnHywm}dvJ_U#~Uz4Id&V&MjMxu!E8)&7(g;)W$ZwNTytQz zazH!8psgYhn24MvE;FPMcS&y}N!29Dn3N3jh--u9=S!n5Q>z{JDluZ}2_X)BXqL%e4h$PP_v_yBY~o$16qyD#pV#0rpg zFSwViiXyT?M7oMdCaDsm2M~f%q88%9*KCP74P7HSF!Ly^KQk}}#8H7Pj+v}L+>;9F z=BO`@`r@cBl6v_8_C-B7vo&yTtoK~F!;g3Esr?4p$dzH<pQ_H_e8tKAGibsq&w*$dSW*J*?mk))*YwhhazS%Sd9S61ytZU^HQ8wTFcv6!UhFqjb{_(*A}8*bl~@s2!a-62Pa{0c?B}FZ zRcZjY+-EfJ_qgSL@&P%nWamuW7SwR@Y$NJ?16jBZd;ixJBOqan>7aFVp3WpLyfT%e?Fn2*s?XkcjSQA#ypv z<1pjo;0wrM%TpCv?oihNAe=shC#UNHkeN6W0EAOlQEzX)dHB5Lj{PIfU9AQxKSSfy zxyn8I8raB?alEeC9epBp0u>T_oIs?>rAs3oJJ|Bj*3m(III&}b!uBJ$y>N2Sy!x__ z5URM<7=No)5=-~wa=7evOAN4*${CRp_Z*9ixFuk-OczYc?EQHmynbr~s~^^VTa^Ae~hnFuKChCoZc7vUm}cjKn%$XFyA+QvyD& zd9bdk_1a0k1)&+v$qTRH(Sz5jfbfYSHZNe=*{4=YmPvn7GX_v}0lB$gT4HI|#yx18 zby~9(?l|B@mwE8L9iRa=r4$nc|7Ur@6$-pGE*5vy)mG9@6}VR6MnXN4LcSndwB=@L z5~NNNK8_7d4s2)*m|ScS1-gQP-ti(Z={m`URH98t1qPQAZ9+Q15{pDrNGIrlG8#fU zAs;B&5Y!3rfK*ddC&U9%O<|qT4|rk9>;yj`(UiXl`G90o04LM~(oGSZsQ8p(2-ZXe zzANoSWCxe5Qu(+`oiM+MYqO%*b&4>Wf#n0_uP% z=4E>YuUxtM@+&uxh2Lvd8dY5V{M8q4yg~^g3-h?Gl55Z3yn5rh&Y@Ur)bZMt&s}-# z`i(1Zh&l{*8<}2s<@qL&4qPQw$qc-quJxR7Be_=6aOGm(kJS*F zS)pD)=XK{)$!Ti_o);ETqARYRE)ypIux~vJFoJ{hWO|7$+LZ#-2@}!9sB#~bbN-IH zr3ln%Lr9+0Se^o?PBnax@6IX(jUP%Z@w0-LkVJVah`2U{c}2~6k38Gwb(mME0NhN% z_t-%l8-|{;)5>l`&0{-8w<)reNWY>w%#@f9n55Da)6~19aTIb`l3@4vbX#VoO9DY% z$^v8?GL_()Q}!WW$l$E5f7T+}K|1^GiP3ktO~jzb&+NmGpNk#ui~2oyMSb?u3U}3M z%^EH1uFg-Qz_m4?2>5|sHQ0ZBPpHYaIh`v|nYg^jB#Vmus@i&@lMWD@TZo&s1Bz-GVTYow(iq~#1|ORR5&sys9_a#%IJE_9H{d@-d_;}$P%~{kjrCl=>eQ#iFf%RqAn^*C z1-zB7W<@>ni!-8!N{`6Rk+m6f6|5dvn{3{Vtj&?NIkGm#N7m-Z+8kM%%8+Ekb!2Ul zu}tRY$l4sj+SFcCUdaC{uXOEy>r3ZCzSH3>)e8vGrRU+7Qb#`ExWdF;%rxna5uDh7 zJIl6UZeto2b){o zHmuZ~-mjot!YFn&UMe-iKig~R^E4O`uJ`6ll8!F&x12HO}@jOt$bPz3`$L&8jl>LCjAn=Q7?)*cdm&Ch4Na+Hkt$r{Gho=Mkh7VA2+G8k62BJmv69t6i$zTy_#Qp!YtoI>jFA#v!3Si=i+r zNj3Z$S^E4O2FOh>wpIYSPtC^bp@5)f$eN_gsHES|A%SSA>sN2v`~E<5lSsL4D?Zr6 zfItSTY`z-_hGJKj2iv8$rJ*HiG`%d>K3?j^kKe0g)-XoM07)#3>KXydwHJ&aH1F&^ZEHln~{-PRGuI zggmReIx!W5A!LUH=1XG7X|nE?b`bDq1LD)Lv5U3{NlR`ZB4I)tCLN|wb~@oexU6wL zl)8#j-%GjNd@eo9r;S%H;D~)@Av>R*rGu}lc*0*cJu40qt|DGQ8d=48?NxPFdsd+# zzQ?UECIsqqG98HS*(a;K?IUg;3OBXXvr7BjAywMR4q-nXjUfcgrqg<_r6Z1iG?hXe zEF@mMh@-AMbG+fXQQvHjcGMYuCOY2q-B$EiTZt%v&;=zIF|=?6!o5~y4YA59{|Pt; z2z6BXx1!ssI5p*GI0D$2hns~s%1!h!0v|^wOX~O=MtG%;JVpdF9cYO{D|H4(qgZ1G zqzh2JTR4Kdl_Wiz%&H3~5aYDI86<&5l5QtR;`n;m0G?FEgig+0R2NN%aze}VwFa^v zg0`9A+K!7*CPe$IV|pYgDP>WK?-3ka1a(Tj-wNwv#U+CjBfnYT68*QFdn$&Lc7*LWseFldDOjy z$Ao-r`c*tV9(u)m!7gsmTYwt_UjA+?dUC__LPTqIjF+z-iyjZ0VhAmo-@$3-S_>&> z=mv*I9tXwwx&l=B36bJd#RUd=xo+5ly9UpuqREuFN`Vj7cfSxpJ8RJ@7(Ni67 zI;yDr*olW8iq437V;ofJPqx44C>%XOGz4H&87!)TrdIU03KIv8m+<_sQ*T8d_8o*q zDCJ8|gF-LWiwLI#KAb3e^$m~-j<}^fBIj+mJFW7G=#1SAy?mS$J?uiL9xpX(4GOa+ z1P_em1Uh`}V>qM=Kg22EZatvpkCPgK)5O{Qof?VM6Nqnzz%hBVBuhy#%+mqx(DSLT zJnnw63snb%NGwmP4pE+r9s@A}FyYu%$o{y@mZzY_LF;xaI@53(dC-K|FLea@L!QSd z1tY$bC)tiH3N060oSWO;-cE_rz9V$Rp@CxEzA3r;wg} zI=uk4obfk`9bhOW2J=Y;CPWl~AmuvY27@VwwJJcI4($TE0HXP{UOg2(1%ayNb>GtH z=h`b=y*>AyY}%TG1m_k0kst z7_jJ1Z#B_<1C;zQKa0nF)hi+r5OeS;9j8NdE3_EtpFCZ3(rf^kGtfPui^D*&yMF~j z;uYQc2AW#+|0hW!;23>-z9%TKSP5Nn7qH3>V)uO|`be?r*;{$1X1mqAT`F-TN5T(* z+wZj2nuX|;&;;mukRn)LF627Qhqe!!m@z)f=k?u?k1jz%HfVH;o@`5{5Z9cH+BWpV z36lO2r=O%m@q4QBKQNY6{)7g!-zxvp^4;=wC50=8Y&FC}{67DvbTtUiO`M1`}ckeS1YfQj>M*cn{exH%P&j{aV zWbZSg_Zi7GMsSUhTVur5D%YXD?lbf?hJ3$S{`kGtl;GF}aO}DAcKI!4SNXS@SLOdF z7oFQv4KLv z3;z6V`o;VqtAzPeahOSuo1Kl@|M8-Wv4lDoWJ08nLR9&LpqVKmA5;#yT&>_$b^qn8 zKh}|`bDwUj@w9@~^=$Ugak zOn;9|wQ;oAt7E~JTW^wzL@Y4$XG9r=SxA7(r!ipfB4AierN&0Y7%bD1$P!PNmtSl) zs&0`&03pCCejzHV=#3VM-bHJ?>xDGqB7`Y!Pb%5YhA1O?z_L7>hJ<=gRovf zM#;8%9aF-vPd*kHI~tSb#OxSSSJz&8oyL4+tU;ZUH3s7jHm{FbQMtN|K-#=N h4olRIp420vVk)=sqdJ)tTB1aQv>eaKc5D_>{~y<%QL_L5 diff --git a/docs6/_build/doctrees/cookbook3.doctree b/docs6/_build/doctrees/cookbook3.doctree deleted file mode 100644 index ed6e912504dc8085fe2c17cff0d70b4e4a9e3300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23529 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 diff --git a/docs6/_build/doctrees/customization.doctree b/docs6/_build/doctrees/customization.doctree deleted file mode 100644 index a6971f3781f08b34f00beae282d4bcaee93c6f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19083 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 LFQ7a~QmgzA=pP|% diff --git a/docs6/_build/doctrees/data-examples.doctree b/docs6/_build/doctrees/data-examples.doctree deleted file mode 100644 index f8c0649ce8d664598c91da5110b8ffddb421f161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26335 zcmeHQZ;T|zRloE3{_Obfe4FGBh4@0D#P-G6neCqGp6Pai73c1Pk8{q>`EVQ(GuJcI zJKeKA-Q)hVe+jX9Ue6DDb~H}U z^@46PwEcMe?)YP08-HbdEnN$(-6%-Hu02jq0HW)-UN5x$@terJNbs@iMYXJgv)y1g zQQkS7KL6^=H(z}1CcE(pyYtFDcJs!qd+f%oyEm`jd-)4B@p$j0o2(W_an1GFXKuZG zlZhg=v2*s#v9p#we$U<`oF1yKx5vCk&S~dNdS+yy5AoPJpLDFWV#RUjc9Ix0pgx~+ zdlCAVp6z;86d@7cPy5zTd^^`mM#V$N>TZYj7Kd5e8+y-2Ba3KtZWP*)9q!oUBt08j zeJU|_D$W(>lylNKm7d9o`nkT z*o{5Al$Czq2G!SdcU-^E@@fSm))!pf1{Fs?yxV%PGv?fn`?(Pr^j6?Ih6T$NfA!{VB=j&T8G z#e7DXBwmx9E45TgL~~zS#_05MA^W}b46sN- zcZ_*sf@oY8evQ!Pgg+BoVc#z1AYi&aLuY|qE?lX=he$NGa!Jb)iA_k%#7-jN3`qk0 zv?58<8{a;eA+erbTa}F^qO4wKhDBeLLT(;eE^>xFL=94uFhg8%zP^;LIX9iRiI6$_ z*3*-<5=rnd-B)|*l<UrsQK1BJrvu&RehBVeED-uNqsO#Ir)S6@)`8rs38P z0*tI6WEOiXal6~h3xaKiyz8&MF2^ZlqGEaNju&*d z%M-zGew5LI!m2*2b5a!(8v6}4^g__grP;1p4fa5J*0thFH%R<=pE35DJ#_uRvn#Q? z)2=J3%IbB)RBF1Or_@y`xbG-2;OH%!L*Z#jfAQkl7L``w$0`l!Ez8WK?n?0B6<8XI*RPvKv;< zX7$RemN#Udwymy%oR{3b<5_+$V#v9X>{uQb2IRaJ*VwNF4hA9~Di4jUAH`w9^_~r` z3~^0zJ^dM{LLplu;s04jOD~hc+Qd!kvnBq2uwuL{|9u0?VuB*!_ zt_=v8+9ps|dbIW`s@c+8HB(jaVXD$p^@dv0nvIsOuzJhTbzQAB8u%d`GriS=GoD%qhCeCJSoJPw(W@@)Y&t>|II^ z>t)5}a6-ZsfHQUe0Adp(2%O}fDOi#KrKvThl3BIhP}Q2MYmK^5&f`ogCuHCA>dV^M z0(=)FAEA3CYFp~l9EAZ4Juvij_DLgP_lMiCE!U5N0Y{*3`Z};a#)u&*|V%kd2m+D|cwTe@>2r%6y3;aTV$oqrWvwlcyw5(;k&#Q-88KE$80RU###m8~J|*Pn#ly?d)R0{) zJU5OaJX5v5FeNd0PYZ{CkuvS=AH1|kE-ufXWaO-!E&!Or?PB%GLlE+)1Cq$xDSI!U z(=oc%(kI}?_UyRr!PQoB$rcehYn0Q5Nqtz#PQU!Bn0G~x33>ClyP9qL!LHB9Z^r|g z;F5_L+-=T#faSPcEs%A$PLNw z?(K`{lfoxI7?AW(oYwk#ij`!TKFEF$!Bg|>g zM~a*&U%E-oPNHVmqsRo$>L7fpCpZ+q{|zsh#XZA(eGnX)NYB=CA@I`MHuxH~D@gt5 z+9(LetG_b%I$Bw_{FDjzc~IlG4u)Tma4&L&22n{?|Nec<*S5#$r!Yiys2hTQkjjqL zaS_X~&wBRA_9=*f!S%>#IZd%|WE5MfFZ>bj0ENnB5fbH*cJ6+LPd?>7PUsaAF6pa- zKVN|ae@dua8Dx#Er~1)4DA{$?3M3AzO;>LK{ts8^-fBamDL9;z**o$O6~_|arC1)~ zB%u04w3SLr*k zw=Wl)e9GfA=b>2?5zuwRE=8(N57mDMvIp|?KX{L3cnZ8EPj{wx`d=#$A>*m29XxFm zJYBh$MYBgM4t_1@-7<;2@YsQq^$AKlq;gKC#B4RmLnz?j-&P>{YLfR!A$hxH z$+MC;Ade_%G>|9?`s49MdQcJpMp;%5na7FI3wC$jgwyl{Kg7hTaA;uf|Gk?PIeGFgh0$+wvs4v5i&zDmy8F` z=v+%hu!Y~VphorV9an@HSse=ERBQE2A@BpK2XvuYWr_f)3|xz$`~|{4?S>(|qR*=d`T1)} z5l7QdT1~CR!)^?tRYwO^#X!2Ep-QEuHJX}fAS9vLYUr&N5_Nu5{W@rUAH5T>No(T#>l5tZl*62TlD!B1MVZh|!iqNt{M!<%VpD2*s~ zgkvhe#Q-aG#G_CT8>(U&ih<66B1l7GtEHM~9pEja2`*7HO+4$0)&##aNJ2Juzi~X0 zI2Dgal5#wfjyRI!O2?J%ZyvB%PoL4~lomK?Q%k@6a&}B8@o}m}#Ij?~=25=vS`v|Z zdcPa;{l!wZn($Rc6MnU=1lsFxQxxZZG*U}(LKL-rOzcibBmBq;IF$6LmB66~d}~S% zDEYx|J+dz4s_7Zg$r74*3NZQ30j$bBT7OL#d+9GN^F$m-XX%BY{!h5DKDFEnabV3e z9*C^ZB@cv5nejmUEn!pgOl8=urx*DKwvY-bH6@vJo65uRvXE9$*Dn})$lsk^} zKl2kh;;3P9++z9&4($Xsl8v2Z`w1}|Sp#t&R-YfyVM_L$PUtALhG{^h&ysMohYp`5 z0+1_s6ojp5l*CW;kP1Uef4xab1ka&Ne4w{hc4WyalzHgwib-juqEO^pl#~@kz;mmv zD@s0#{%m$$3L0P6FJjBN%>OjKuE!-YD%N#wH+0|#4RD5ki2Y-*OO8!!r`;`n7CxSE zlafzP*;M)VvN)poaFxhz4L*!6VSqnH|4I|q(%DBkjK5aupByG{yp8cLM@qI|F1m|j zC31LFt6sn$kBD}zIxZ|{^u_PcRSIf$+;`rl9sq3=#D~72pxArkC<@Lqu_XJyBmP&Y zesN%dcCqwfP3*F$I6i!5h5wCaMP_3pV<`>_!RXa)e#)(j~2ztlW4n{_~D`G7QLAaRn16F^m33P3XefMRct&jhMCLB=aJ ziBefUofQ(0no`f{3JTG_mf@I1Mdp*l2*?}^5c$`-p6_pu1@c%RNp{|Qft2$uUrwGo z)i8$hlMYT$;3JW zHq0WBfg)^1!HB`Hf!G|+?fbOpC2hWSe)Hu>&O4pI_h*~K0#bWxM$7dJQ6%rhkFPy6GR4xXk%3cJVYzJ4YQZ&Eo~3FAmNe3DRhX_tp5AI!`k{^9$r&FR zuqop-`*h8kL55&hK8+@sYN=*!ZN}OGd#$M1gfUp;HBoaA!uW2NYu4*3j`~g2tin)? zLO6G-H|o4JbaqNnu&`?aXQKsMy~xvAdTv3^S1E#p8JrFlPEw=Zq>gGPG=Us1So}Gm zU~d;V!<3)*2Q_C#<5JBHr2zx`bj>ii^P1~=6N@oX!+^0{ZVPx`6SizxhxryDcS)3L zHq5$4_WlW+Rp>9gG;I2&s2P@Yd;y(X@L=E@OxNTm5Ij(^FPT;pSCefK-991PB59#) zi)@IR5M_k*JR<3qj*Sv^;QcVP<`i{kw}y^mkA@2sG75k?lXTa0D1?&klimz5P~bRF zp&U%DRPl?^@x=9!mRy? zhiJNFD}JbIU|+g7r4mmX#Ls4(%x#UQ(B-0W&WJY;U<3uPWZ^{A7B`A-9+qg5_vxXF z>W7rsi*zB&JaNe-C|_R*kAvY_=TuE@*QnuPmW^T0pLi-HpA)ntjqHYZzVBvfJL{ z-(YT08x2i0xB{Z82w9j_#tv>V-)C&hXk>nf%|h1dLai*@pJFP=^fOtcKoprmv&}Uv zD36AMa2A2NL9r~Ex?V)Hpm#0kD*~nkOPE$+*=`{V^Ci7S!6pJq8GS>bhpAJzkZ3E{ zya+~bAq<7oG{kEdO0En`{fSB=P^HB~F`)LtxR}F~@lmt}!ew|p8X`R!`9=WO)bX%m zjs?O_C|ZYjgD9Fh@X0n$C43rn4f-G9107v4a+nExaDx~2Ng2+7k@P9G1(i)T2?lXG zrM^$pqaf%8mQu8(*0FiYah`-hh>)NUf?sqahmn0JEU?uupdS;?t)^MxMb<9?gN>5F z8BPqzQ`r{5G!zh;?ufvS=5qD65#Iep47FuOJocq3}W{Vlm{l-oi? z4OS)&qv3`~BR3`eZN{s1k8*)8Vsa`e)1;&Og*%lS+L{I2#aQWuw#7Y$4w z@RawtJI_+w#mV$yH^KP?KW=CDyx&RB=PCR?(mUz7$c}NlY9IIRugiP%VadgrC%-pN z&%91IXGXgcYb-KvpG+^%h4FqeZ12&5EL@76UZmrsBWN`Ia{mZben_O?SR-Bc zAGOI?-OjJeM~hj3?EZXoKD6nQ^R{R2*xvZ|V`;^)Jo$(VzU@61w1Uo+L^;su^mNbe zBz-h@an}mTC=LijsSJ^_7KgZJpYR?(NH4nnD2dy+-#q96YMibm@mAHSMlQZTHJRDA z!!QWj4$c+eVtvq=Q0?N<{3oH&Pu6mp*D_A8PUTEhG59Nth4iARx4JgV?Xo&xIn5wX8W8bx-} z3)*EKleZIbO&-lD&|yIULW;j*Dyp zGTI!cm#GBRNF~}hM-3{+{0$BEsQR>`fh-rpt?pDalu|VFR34BP2e?qE=GyTVZ^ns- z9-3Igo!A%xz1SJwK9^pFKn>e+Y)SOn6yjx%-$}1JID043Z`MnHz%;lW=5kq!5EAS40e6Su(XeEh$UW`ro|Ou}8VhaJ0zA-RvX z92+dV#gwwuhGMweeyRyaa<@pz$C*W&1m0oRm(_iJ1UH4^rg%Jr{Bvx5btJ zoagIk2vQN_#Uh|hkKV2E70gu=sp9<`NJed2@_}xor&o6%{VXMl@7D&ukMTJmjnetC z^CM^9*%`b;DZfpBHgObVut9(B(w|r8&p#rxV(@*6r%KnTo_K$RKHxnTyrw(OkMB79 z4|pASc=-ps>;qozLE?OnAbE2iM{_SYJI;u=<@`i6^o(ri7JZ|J27kv}yHFMy-j54i z7jq&J0(}!HG_Z3xL9lX)fWr$*AUeZN;7K{;pdXk@l+bGvHLm5Y@ohAyQF61!IJ~xpYx*CRyBP)rPOM=QR7z6IaV{O zofg;a-gkTRzukMhsGwKoNNLxW0?4Ej}Q&F6lV%w%x>DcH4YV#qjW}$t~ z(P~q%EWE_;8C_|~U&m^lcJNS9sv9P+i#)U2t>$H`tx#VbYn$BS<|glToTIj~P9=J3 zOg*n2QV*(!oFiVRzPt2ggrTZN^XVk=2YRZLA^r%voShnt$tdp8etD(JhT7O&cxq5DHh9YFn>K;n$8*-aiw za$dQuZ37V7(rlF(w#rS`RP^ZdTK zui)=B{Cx(0pMBWts29}~vR{(f)wr6tIU}k+i;+^+O{J}dYI*;k4<0yh)nYZxs&+6! zH3q^#U76cfX6WoPdgt<^y4K{$x?#2y+j_LfZj0VzR;S%IOxr^KO>Qbp0IJtHQ3Rs` z%q@^&*ZlXkVKglUs$uJfQDcf7Dq~|Bty_!CGMHw^EvB^yx&mmn!77|76~M&Lma)kh z4Hv45M@6qOqhm9p-rvzFwy^N_`(IgD5P23BzV!Z`HF^N{E#7PXr zWg`z@sm2zgKUB735&Vi~n~K>5L`y|QfWFm2Gb}(s9!ye>Hq|@2pg5(e*6*Tp^FbS#$oD*$S65UeX#=H#? zm2++Y$#@*-h^C84R7HFMAmR$pf!DkYL+T;DR z;SNgQ>@OY8+cIDh$ErqfS8`u%;GP{F`BfBsx5zCV1R zw}XIZv2@s`p|6KY_o&M+JPv&b+#_hQAjPd=#6%<9@ke$>u$`d1KR>AABz z*D|j;r=p8ofL8S8zl`3jYoo1>g4gZ7J_gI)=SPD#e6{Uc8TnA*>`I9J3n2|lz=AjX z(H%mbT=HHxXK6~X8%uXcFms8*T`mVD`7Klb8zc2!;RXBIGUHD}GGh$Y`VGGppZ=mJ z6_IR6wJ{-YK{mE7dqX@di(jk8L5Q2E*w06=nAcw?P)t-%2(u?45s|!Et~8D6Mu>sm z-#l{Qz=h8)bu4qKqUlRq-(+neki}vb*y;hh7m({F@3OW5 z;q)?tQsPO=kQ&*R3W-+;x32j6CTl}C3Z&U3SCW--vZe!CpY}jBTQejij7K*f$kGx! zV->|xUw0eMk{YXRY(f<>Qths&9%C2S-RoDc0XAb-u3TX)rOj4FE)veNcud5%S2K&< z)ogr`#aHQLF+Ly8FMi)KYoLtUHLYqV9-s*2%f#mwSt8!0-`V*5LzEJEFRW~o!?F#+s@ z8cAuQoYxhLAFk%&qBVP@qt#eUsy58z-mj_w{Zxqi7LjUlkN*HdYeUb1#-PV(2bU+E6rw?C_rQe5u{=@UXPLrb<`rE!$;kk zzZ?Tq2~-w(+To? z4vlDlhw4GO7g=ULCUD8@MD_O|!Go0w9kt4%;B2!Sec=`JP+&eM#BW(UFPU#wdD|Xb zbXS;OVGnk_X($7sdl`pe@$wKSiME&~7P^V%n7|~u!{m0y)M=*e6Qvn0r5QwN;9t9t znwv5%t)ZTgxyqoh(-;GrOKU_`Xkk1ap}YqV#Ul|Bx_}l?K#C5NAgYwoCQUX0Z6JY+ z^I$^Mpi7KicpW$|$K35Yq@)_)?+MgF5}P&eu7uMSNbt<*3KXn+(-mmC0=X=Dx&lpC zAkhQCk`1wDzg8e$(IUON@gkJ1VXC!yL46(es>VrD%A`^9bV$nz)W5l_kRpX)TqB9n zvx>V$ai}0IUkw~3t6$5;XM{S~c#XbB-rn#u!ka-|8>axl(^l`lboju5*I5;MR@-QH z*PDi&BvC)98B4A`U+6)Dl|)xAx4M=mn1@Al=ud72SEGu>wy=-K**&x4N|Vs6u%#q6 zQ4CXCCjlC=Y1J@mQuJ_T6(C5#X07Qd6WQryVjeF{t(}mPhE^BCGIUnRHBqUhf+8D& ziXfdp?(wucPoWX|8-WaKH6s57cFi=}Ou_C9PJ{`;=QjbPgK@#N89{iZP7~7y<-YAj0*lV z*7bCa(6>TKNZgqQr#@yQ)z2d z7+m0wa6a4lzzAoANld;%3JiZ%Uzl3lv{mw7Ofya^6`?im46o+)rV*9(HYIZ8o zh3B1_9ez6|9PfVNUOO}{|CfArG_%5zH&QHV`et3T;(O5ePCLj3L#L+CUrwhpm($~U z@T^{8kLR}MRjqho{)RP6Jc&mY`{}y9tG%? zmzSIE_3daV90KnKLO5ea~nssg_Ha%|$92?>6s<|!>J6$(TLmJN^`h`l$ zvhPR_7te}~Q$4$tB}biGT)`O+1t&{{QQWNq+%&{5`W8RX3lBDgcMBe6Dqh7z`o4_t z^L1?rdA6WEXbHA7gj?9-CmV~KPuNDvHp=9hA{|sV#p6@o6=j|p?#W1a`a2;1GrS!{j^Vxz z7ucRX9bA6|sy_Wh+vqFkJ3L8IPgEz^QKv_wJxqx$eH3$LrweT8#yZ?TEaC;b?WTt% zjVVb4&MndbMvTF)BuV%jNU+Mk9-meIV}$pFSY>$6)Mbg`S3cs#-%Hl_!--hmzeUhT zS>Hbi)(c*pHT76$=Mzp)?{nA!l1&uaYg}#ODx=^zFa^Ln@ zJ-i_lBi8`-<^9-n-Aff}R^rmeeLO;pxzO5?|JS^L+CmbL$kG$^{P z{lUI0Yx}+ljO}6C2c|D<1&eQgJ6OD&d`DQ$Z{~ivYbFy5ruR}j#Aw@J*_nl^=pY*?Rr|GisD_mHl4^OZaO zoPlY6qZ?!bKm%szYvhwWv~B%@UqWnK|17d?{l>fEvNoJc=j<}>Te|$n`dZViAr6Dc zySW|(7hW9?Z7W$_~82N>#&`Ry7t-E_`nlA#irRw@TFqw8Jh;0wSsZEKz^7QUPHI;%_1Iq{OccC_4)AZ=u{+#6PGRA=b1LXv8mxYY6q9hcl~A2hjR%YjTHqx8z_J{6KcYAJf-Z zv)~W?5@Hq{iOhogDJ-V(>k+&5{w@EyL>w1v8e10Y z8Xa=QHR<#P^RG#aG)`PO4`RKd55+J30GAPjJ3is(4`hND$|BLy#a|VvKSP0Vd*k!*D<)5LaU+;6p zC*~G^-GF0*WR;0Ij(t*`<_C{tTZY-J&CSOnyA!ajkl96J+hlX;`zI_geeaBjXMQeU zD6XV4`8-_T)1_>l!7k8$aEyiVM~p1RdnpRa13Ul&wDtc zlkTVEPrCENCf$30H{!aP)Y)9>btN_T1X_}ku{y0^%G9f8SE|K)DVxP=m#JopIbP2c zYB(mnTrcoy4J+tMzF5!TuvT({DVkp{)K*F*UajOR^-QI>T*r!9uNL@9ofp%!O1_Zi zSS3pYef;H@E0uJOr}Md5p;*u7Gu2|fmf^V^uv8VSz3CD!@JhYt)qT7vKW^Q}V+~`} z-D4qB;tHSMXKdU7qTwedG@5KT#sGuUbSiDrsB+v?3=0JX`{;T$5L?+mfDDD{hMt7kVpGF~S4zw1;Iu6)8MfBqDdAr! z;;P_8#|Bw3U=48<687j3e53fIN4^Dx4oy>fwPT7%A_M|jFVhv>KwJ_8!LS%AV8KKK zqYD%q0;s`;gHwC5j`EB(g}^YLb7KO7$MZ)Gu`+fjYI>uvHLk@ebV;^z%NnPe4K8$b+&RK0(F&{Rt$iItpU9p4g*%|5M$^6%eUs+6w;AMo9$|xO z$tt2h)fO=mY}olWxp+o28*vla#Wh^o%`H7{!(5AN%xE6LP|4a&#RkQ<{GdSl0m|<= zF_NigjHIiiP*5dbF_9Mn-d=<$HtH=hzpJohuX-j1q9%6fqLsS1M&c1BvksFcZ?mMr z;CqcD{z-6#y;&XXJ}ZQHw95kg1O|!Ba-mej)hn4&Y8hsLG!zWz{}TvL5kUE3Hd`td zuzbNJP|B=KATCAVEf+E+Xv;3VmE{T6un4@ua=r)=Ou}2q%KD8b5=Gz@mvMnjw&cPq zW;`KiN;Ja_T9Hotl_#1g_j+qI?$rpcF}=MM<HFgznBUxvsd;9Q_>qTk*rLBe_l6<{>Pvv_t^P zBn6;MihFRAK>*4Cm78sFoXQ>eM9fY1vS`GW4A6O1_xyVhTulZ$RpYdEdeAxLs&i%c z{hD*adqaEcy*1~Ug^RMF%OQU18HCuA@lflC&_=-!d(M%sP^1ql&|^|-&g?qZ5eEpd zOi+H7#7@hGR~R0SOEhJ`-oRtbee9S`Je{Je#+j+{N@pGLPEo8u^cCG1%#{}2%p#y< zl~bb-g7B1Z$0@^20(TrE!kshQvFpiF($etz)o5aw)3ps{6~SN-AQk;gRjnd+;fvBC zA_QedKq|AhxrCh7QqOsrN)SXUQHJ{rsh}d#E^j9< zrt|2QQ)a!|hlbt+XkPWuh%i+tjoWpBMzvc_pqRz6GfaV+t@dsnb6x{MwaWh7@~dB# zA$~u0&WqY;I^y?|2Mj2V`ltp%K8~o#{v#&dX{)Q-%63`R*3~BdM37#J;pm*ey``8> zU+ZA{S}1u=Jj=&2qJ$}K5587~s;*QqzH(Y&#EActQF^1(MkG&)#Vn%vy3_q*5Q$Mm z%peT4H~-HPM}SQ%n(s7kRd@|kvI|@)NBqx^otLY)_GF{Xaam8Ztke+kSp-7l~Au08dz=-MvJ0HR{d&j1mq!UjV`-yr%D1y^>?M&43XWbqo%>iz>o zHl+~E$bOVw%HN3w$NX$m=wlQ6jSY)Feoh}hqmNq9cPvx z(apgk#Znkc&_%B^+OPa#~fK&W04*wmj&RCH;TL`D9e5*4|^2~@%s z(Q!_O2}iW$Btou=DMBPF-_Ydt^2tsMzmfS6d>Z7_su)e57Dd*V`d<3EXCn}2J*=Y8 z*$8~_Y15{K;pKi&NeZQpZC*A2zcWQ20dtD^sy|ZN-+j2v;BrK~~mgEB1KIV4kZfCVkTO^&q z#1M)FLkXPuLnvv4-b^#5_dr4*6o(p;5FkK+Py!)=kpJ)Zep7blH+wt3r<)7@e0-~U z@6E4#zpuYH@7>??VE3}+%kV#YO}(18$|okw@-eGcDVNN0W8NOQp=lL!J6nQYGQZ{N z^Y_hfw!4gKb$-7+n5$$PHPg&lwR!uN$=m8?tv-3gtQ9A#&FQIpqfwo*$_=wtHXD;A zt5`H^nVMNNjk;NPpYx`Xn*=fS$4*X7qdt5_T1}ewQTFuIV0r$<@J$19uRIZvQ8fLj}Rm%1GyXWn`YOPW*vw%|XKIPcF zJ&>(b=W5n$9s*Zyy?E=z7o~2lax%>~qk7=*uTAxp-phyggVl z>VVi3pa9yfa?U(4Zx1)jQnhF_%=%Q-Xynm=!6`3n-mpi^6WL-jXJRzsjW%w!dkIm{ zc{txJP1h%K)9~+!9fzh4H7Yf8-n0kvjZ$%{kvB^w_>?Ug^|}RmM^tdVVKl6)r?GE} z0zlociTq~k^{E-F2ta{7!|Ihl(2xo$v?Lm;SDLk~IaP1Y%vj*p%4`KPMYf?(wO8I! z%b7JZx5ENlfscdpcK1ZBjybVr)*H2Ew$X&>1~4&Sw};Bj5->V7Q>m4VhRT(Fb&>_> z9HM`v&ckd3$>2qBaF;bZp@MoE#&i)v`VZr;3L4B-a%N__SjirN_xD=$hE<-$n5Nx( z%qTWhe%PE}n_p*lK{1)%|D5^!#{6mdo%oOS`3-hAx{JYfALJm+Df9NSd5S+he}?*p z-P5S#jJf&z9(o*5k5e7vG>eU?S_J@hoZ4XIa#J(SvSJ!CR1NBvya~0y z`~&pX2qq|1a!qg)ZTBM1Y}Bk0a9nAWD-Cn1X3jtkDPtC@8d-Dxq@%Q+uN|Hu zhpTh5SdrBs-_9vpZbEX_384&c08Lc;~RmjD4Kjv;n**frBmGh}=rBtevryw1c4v1F*2cZZ| znN_P;nRW40K~Mv=1g%j(VciKuWoo8qfNlre;VNKg)aIa0DH#^z$`w_}ftYXYRb{BW z0U%ZT&+p%lVIvgQQs3PNF_^eyl&g?4>r+jr(cJu6wi;C{dt`3@q)IgGJWpA(WvpZF zrgwX(w7T4kIfWMrEc|OKXI7zB+p}C5mA@*#jjUS@1v@_l38tY!G>S#{?NJqO9tE7- z;_q0q(tQI8h3o!cqgbDU5^2rMxj`#2C<_^=)~LIV3^pM{Pl0>T^tsaN09)f|6LOvh z=9-qUDMMxGdAsZA4%0z&yfxmbm9dy?wg=o&sEYB5f&mq2ziRTZAYpyo1pq^xrz$wJ zNf->Ns&*QhOjV}y>xc>!>Q*z4e_X$6#+TXM7_RD|L6w4P_WUFHN07iZe%Mq?zE*Kg zdaD5?CBKf+uT<%sh6}1Xm5>Z_eSyqmmggykS_LqmXw~y(ZQgyuX)V0gF~5P*uU6ur zr7btC84F&p`_I$0!6Qm0bZxRVOVw+Lp?ZO0pi>0Z$aE8W2VTsmdgpk}!uAmBXlPglp(kVA3yF;) zDa>Dx-|SS2s?k^Z&h0r+#G00fmdr<09L1^3XP-_TsucBzQc$Heu^NZI2(+jq%juth z6^*Gz?6;`16KD(ulwznxD^TW@DXUb-jB(5YFr2{rM1E4m<}c1)LjTy3zmU?eR_UR# ztQkRn*OF-H%}q6{Iq17V3#giTY9&-`9rEWiw4~UKs$hBv8bd(4QZ|Yp60?LGJ*M8G zY8;uhvZ`WIuTmVgqg4}nM35PdK(<)%vG+Klse{&G#yFXdEiOf%DmQW+MXGKdhI?JT?uiC;+eiYLil#t8DA!G+md#_AsKp>GW$wEU zGh|S!P$z=Ksj}dA!5w40oC3yDBj-dA&zRw{JLv*UzEzryY7^RAuN%~(xQ9kZOTP+<5G;tIF$v!joaVt-4ZfToW6zlV125Hyj$>iZgn1nvc`GD8F`S z7&QpR&I7dy>)kXkkb|1BW|ZrIC5}2b?z(O7-qil>`*x%UDy5Ex<_rFnaN@AmzVzis>D;nlr+A6K*{Dz({`*H$52C!n;83hnVUiP2k-ELtjg-DosTR#+W^u|HP~upKI>+Ob zAY272dmNc9jq-{zv@6K>7`>*Vuu6xXD>U>fYM7#6T0{+2pejnOOTDR4U;DtaYF zQ~$0ohuNw{4>iAjflzS{T!E%pMK~4!MQQ@TwO|D65a@elkA(X2!+r$z4c#vOMnAY_ z9)LTQ$&Fd2o|o>j6KWUd^m*f`5Y68V|B

Utt+4mzL^cfDnc%9 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 diff --git a/docs6/_build/doctrees/etymology.doctree b/docs6/_build/doctrees/etymology.doctree deleted file mode 100644 index b03bf91f0493e968e5aa9a95d87bcfd9ff07b6b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6002 zcmd5=U2j}R8MfoB?R8=&PDrY%i5Mi3IE%d-A_^r!2_-cUoVr!(@^KN4XV014nfRPD zr)TD5y{cLjq)Lf2cRgGoZn;GK2mS(FRq6%zh+j~NXXbqE+OC~K)w0q`XTIKfzvq3Q z4_kj2zA)o{=A25ni1)iR2x1v9m7B#t`dP$coqwF){9XQjzGm7f9VwZmKFiGvcKBR` zLCWI%5f)eMel0@PEeS06GMYNiTjtK24>w8^;$PaizoB*l?#&KDl#ylqbJuzkzZ|3vGf+)2b+eBR6_6f)?XpUwKz zEK#jf(a$t=U}c^Yfr5Ny!4IiYn8bH0rcv>=7-UH^=u>|$WdpaTy&r{lR6?z;7L$}I zmOf#5W)?IZ+7mfn;+OdxpXGCAzEbMzy?3xr_4ZgA_L8jcajg?i#G0is)4fQ9Axk$> z7BUJ}sxfCY=t2AH`#q+|kqqTL+tW&KmAZz-mKHi> z6HDgeulShwGz^K*Fbf@~G~p9m{rZ(tGc!A!k#}OTPqdWb9=ID(Mf{Xe z%>n|i(OBEp(LUrR+^4+3|lZ2&~cZPqS-B@RA|j&OCkxencQD5 zPHRO%Dfir9z*tCVz!^+R{7@?hpk0{` zdv?^bl6VL{kdg@>-`(}@5HTn?9N`ucWlH$#6`v!Sg#qa^2-NA6o=Rxg&!SGJOCE|n zHWG@h6D4Aw5gUR~0K^9&mG$efv^Rj`-6%|VcM02P2wvI`anjC1xGdC#-a4H=NOU^u zmaVbO$Oz7`PC%igwqd=@$*j8M%}iSg%1#U!zEY<)OVkAl-D8eyEZthAu_Tp2=4(sU zZgs}HQ?U59W=~ip{!gqqk5{PMf9>T#;j{R#XQ0+1gRJpY^X(m6agqn+wLd@Set7YZ zC!HQqHLr9kK9=_HubD&yCJ@zf@NWtM6) z2Km-(?bd70n+7LL@%(2FxzjI-8V5DX>Y=<^xx(^PzHRPx5&QHwV_Qj^h`s&A6LoW$ z`EO1i5*Ot_C{R|=aMCvx%J-lWcn+^abF&lkPbZ1_$J&Bdk9}4ey5@w9hnR0{wOBn) z700LTTh)+uEdTW+mK)2AzNSa6;n;j_EF4m^SBJ!d-7o7AuI#jWh~R_@j#vb9e>={M zRW?29=)30ju_^S(f?+C=>RJ;opO8I|q;U6Ef|491w`&`0y{BZvB&x&_mt>dOM;^{!@Kq-#O9kq9+@DheGQ>w0l50MC{req*fTcCDtR$lhpZ2$AaKmR|l zU6-8v-!Q|!CacNgTd2xwm!NC9EKb;>Mp8rDOUA8cPhSDNZfRhwF-6|jCb#C0np zn#Rx-cA(>pFw@p4PzEbh{?x39ILWk!qF4slm78{^2OFVcI5BpzR%otZH!1>J^+>hzWAg#(Apc`Jj0qBv9(I^<+I zr13DLLk5ipKvGTtY%&*9=F2qj0+zr(aE*X-Y@2ys#si26jflVlf2R?eHmXu`|szSE_4l{ja)$>4Ce3>nOw(ZGZ>}fk5+oYtdYVLq%R4TQ&P$0gOE}mmN32 zWmsw@hu>Nq1#sjuz#8iz0`I&U$C~bYTnu@LzeBfdZ*9)1h$5ce%@Do{Coj5jG4w)- zyjN)Os?UKa`6zmeu!6;G{_${nFH7=g4#9LVSQ+lm;3U!)@c^c-;{Srp2mn&1_nl`^ zp9Kg>z&(mHG+fVYA0+9X#{fHp9$-~KDi%I`YUWt{BnK#F7K==P(1RD@NfhvF?G+uH z!w^?-5xhbJR)uZ?i!8p6Ts1Z8KovU;YJ+-Un@0;=Vt&C+7T;@+XAqzKGyVa8kAKQP z$xPcW>Tv?b0MNPRZT`Vi{^`?dUZp4!89i2PW&??J0`w>Q;B?!W4ZZ&Q#k>ed!>ra%ILWAs6^E zv#4rr&iE3bssl#x9xU81=Rbx%KFZ%hKmdkBhym|aNJGVibxN3;K2uLSi!KE=OO*j_ JU-GQq{SQ$0!3qEX diff --git a/docs6/_build/doctrees/faq.doctree b/docs6/_build/doctrees/faq.doctree deleted file mode 100644 index 5ce6d6e8693288ad7ac3898a313fd13d8c020c0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79271 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 B9-ROH diff --git a/docs6/_build/doctrees/feature-comparison.doctree b/docs6/_build/doctrees/feature-comparison.doctree deleted file mode 100644 index cc73ded5c6b266288643855fe009e8f1b98cf1f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23981 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 K6c&mb)&BtrYw5HA diff --git a/docs6/_build/doctrees/features.doctree b/docs6/_build/doctrees/features.doctree deleted file mode 100644 index 3d3462174bb5f4ec4d25cd7bb3322b8388dd1c3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22020 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 diff --git a/docs6/_build/doctrees/file-formats.doctree b/docs6/_build/doctrees/file-formats.doctree deleted file mode 100644 index 7cf708ee3a68a95926516251f58b36e585437c4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86526 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 diff --git a/docs6/_build/doctrees/index.doctree b/docs6/_build/doctrees/index.doctree deleted file mode 100644 index e80fb69234b92ea6e62156ed71342fbae3d19432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5836 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 diff --git a/docs6/_build/doctrees/install.doctree b/docs6/_build/doctrees/install.doctree deleted file mode 100644 index 8a62a0d04f6007b09492a79df6b09cef7bcb09a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13370 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 HS5l7xkMQ%?4j?MW@T_RSE*qIdWyCC5 z3e>_UyBjm#hLnRo0QcAZ*z=6u0qj)EJBX#>Gv<&Cv=zYSB;?ITU>#Y$bZyJ?4mt+u zGFoIHg|PY%QW*|x9oNgM86h3SEBwC>FcVhyuravr z*14-hY7W~cR&~0`C=%QQXnbV3e!_pC=FyS|A>!POW?Di!cc;lcJ-lZ{e)1#DC&|tc zkH*hNoDr&Gx<*s0iMqz2yp8*>YT9y!Q(L|Kh~g>r@lj_=w=|vB(*A$(ARs?g zYd@K!wKBjxhDAG<8+BR+Ua+S}DRejKmTiTuq$?=fF|NORtAIBR*0|b3!wnEwJ=b%k zn}&6|?TU?VcYym_-0R@B)fKq4G5DHpEc@3wyt7#I`sz22+X?gm)_6NJ)lzc`)BXFH z>0W4pHy2OccK@B(?wN7j&&X@W`=7e%Ol!RVsxwYwy#GCv@lH5E)p}Q;{RCB89lKn0 zfz--|N(VRr#Z--JC=SmZJ#u6ckeXv0$l>QfUx#E$EQe1W0K>)?K^1ozyymX=KAx)f!GuQXsZExuoE;GG8F&BNk5`7q58 zKR>-+Ea6ax;mSnS(lIo>kyJ0GPk*|*O=Z_s(~uU9OpB~H4eW8`CPRlP`7^^E{4Ol| zXs2>!G}3|Tq9XZ)ztzpLDsqy?{dc*^ldHM(^^>Th&+8n;`<0uj&Q-t*74H!B>o=L@ z?;$mY=WN6V`u&6ZFj7DQuTG&2i=y9nSZuN)5%+d9dDGxPkKTW)gyniYhD-)!LFiSS z-^KL{xAyW)FP0RIUVNxsSETfi6TrNGOp>o8h${Eib4@3wgV(*v$212e2-~VX?o~it z?o#XKPf6oyX{c%4$wv*mRoyDyPUBbC;m^Q#D0kg(imD$uk>RG}-)!AkXB`j5_Iwkz zTC3{d{;>r2)Ht|AUPJd!4G2w(?jIU>r$P5GhefyP7!%=rwYa^OZ?{8QS>YVj|6#HQ zu}*egbgKN73#CbOt7HBud0VHG4N5jZkqlRe7$4GTh!4Yn`#L$DrlJkEZyW@%fyXXA zWszX*#mK)RL2b!OD$XCz92;v$w;??%QE@=#)f0>oLzJ792GT>A=2GdG&Q01~sdj2I z4WRlfDR0HQ3@vozkKM+|Ry*W_f?%Drkh69)|CmOdbrAd~Q5Hc^?^#>+cRoXei@mDP za+L-NOsA~vQdvue2^lFXuOv(yuT&T=VPai($)Y$a4CMm(M0rV~sLk-_$dZn#RXauk z(wAmdv)NM1d5=!xZK(ypq@+4TqS{D^r8TjB6j0t7iMhFNT3(FmQIYTKY^m0O`3zZ~ zAWG11U_3%vqY#aybQvUG{X1wbX3aSA&{~m!ZBo&RMzP#1_7xo@>Qp}nq#sCD8N7K^ ztx(m+k4NS{rB)O4tWw1!G_yjTz?4s>J*Y5I=}wq*i7@lh7go#|vRW7pA0cTKAu-H$ znU~x=rWU#770p@IX8SI%Ld_%=Ink_|br>84mRqIFAZ1K3FSADIX-QOU7##`;!&TQu z+SnxbLU~nW9+3t>c}BSSzA!#$vM357Gpz+hz?rscBhz>yO+HsSArAHpTGj zF$C?^bl!3gIroL}ff}fYQ?FG5>5bBDhNw-xIeD?PCIw3+u;CF&(&~?~u z7nGu#s58VtGZKf1$^%fAy4uRZ^=Gbp8L+HIeY>^{^_0t8$YY!g0#vSDCi{9BE=L}g zXrV3v6L2I?ZZ4>cP^ghv*jBN9GcEJpQ)l&VTpu-DDlkFg2qOoIyoAbm(S+fh6bHVv z_D${%I0_qF7ia_0@MSTwU{7~rn6Cim6S|!?O)o$ZD@E{PQQJ(-3KAp#V}kom93t;d z^>|&$&CLBClq9fSzYkI8_J4{z0LD%yYPa|AcB$Hx(g>NDpiYejcAR%wG^{r7AW((+aA+T0u!c z(jGFcoG#sRwI`)R`5(d?^#ZTZ1WkIn)>%-u#%65gt7@iGWAnpHMv~m}nfhGW$Pu*& z!_Tf-NPgP^igLQB0OvpddU^#zVEF)dqj#YFD4N5b@TUp_J||tUu>Y~{rJ`GlZ_y!_ Mlvyv`osf+E9}2U?UH||9 diff --git a/docs6/_build/doctrees/log-processing-examples.doctree b/docs6/_build/doctrees/log-processing-examples.doctree deleted file mode 100644 index a97875505a3c98c5b626e7ea2dec10898f2513b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14214 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Æ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 diff --git a/docs6/_build/doctrees/originality.doctree b/docs6/_build/doctrees/originality.doctree deleted file mode 100644 index e89eebd454c92c7fb993505984acb83e89dff5ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27893 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 diff --git a/docs6/_build/doctrees/performance.doctree b/docs6/_build/doctrees/performance.doctree deleted file mode 100644 index 0fefeacdc89024d9d09c396ad1289fa9a621f7c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12540 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 diff --git a/docs6/_build/doctrees/record-heterogeneity.doctree b/docs6/_build/doctrees/record-heterogeneity.doctree deleted file mode 100644 index 7da5e193aa696afb67a5da029011b4a4ff5a6ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16155 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 TtT58B>3~LVB50E%>9qbA-53G9 diff --git a/docs6/_build/doctrees/reference-dsl.doctree b/docs6/_build/doctrees/reference-dsl.doctree deleted file mode 100644 index 8af1153c062a5e2abf596b19baaf3d81642b477a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668400 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

By 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 ueUHtTirj5180t~%XS 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�i+)bmD4rNMyACKpvytC8cyi8uo;$ zq>Oi?9h(uXsW6IP>n(CaK8M}A;Q{e440p3H#F*!@aaUxR_0s<(gCib>$e%8FxU zBAvExth?$Q7swDOvNp+cZ%1eDpDd_A$_$(fj96M4z^As@Z83JFgxU3|OV8P`gT&+q z=H5yA<0T3&QP|0ZZJy1S3<`S^uMGXY(ZX`2$K{xFR6ZeB+I)(Agie}&!y7#W@(6!! z;N=XDC;qL-eMD6&d+O>{@oOU4XS!*guv;z~qhc8%{IAlmDAONm~l*GhDgsFQdTk85neRiMC2&V8QdTUJ?_XRwvO%*mwc`8#Jfaui8rP_cfnlZLd&9K2=g(> zhOZKU4c0udOu_T9re2h|kR&(XvN*YE%_2AdPl~`tPIIwg4havOG>1FZQ`zEcUF zJ~+aQLvJR|FT$(|l)FUuURe`9n)TxYF`(Tuw?6GQ;=1u8UzK#Cu9&ZiS4YMmMqIVX@a!{Rw_GQ^ic-zk5rZ6*8R#1mitCc=qvjs^ z%4Fv(yN7YlcwtO{)Y6-Wk9RWWlH_M z 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 z zByw%ye|)L#b;M$3dfchD5GSoLt*4(!a^IiQ^E`93YWv6UULH z*-IkVCQh#H*3`9$e|F{NNO%fU7I+$wr?{{u1y>VsOH@ya&6+|+BT-HO`KfY z5vIwtiIZ!)o<2&hO`Kd?i)nIg;^f*s!!)@zadK_z>A~dM#L2ZCOkJBe4s6YRByw%y z-ldGQS&u@z{mF_ zg%ck(U-Ce?I3>x4$4oq0*9!G&`kbz;7cNOmbNBU>*k|vmi?;NXk2$PHi<4&CmX_5$ zb3xpXX&J@%;r!DEg!ic85f~4f-rMS6E?12SKb_7cMHY~4bBYal85lza5`hrT`Gu~ zx|6fR{Nfywg$vWA6JtwOus4R6Ut7VM(c@T4QFr8v*L0@|SH!E6trAur4Q@WpxjH+^ zifIteq8=MVnWm=l%rp*5;Jq5|wQjhDu;Bsr7aSlg*bh7My$Y=P5U%(ipx%@f>h&H_ zF#(ME&v3>A@NYYSSiqlly^4>JwR^dRT3-Tq>UQ z0Q;N+ga!N8j(omg-??o?RGQ+;n7k0B!tKe0& z2kILgXe{c(j(pyz2UcdaX`jxz?W5RtI51eOw>$EAW1Y;5^^m)TCrZT%_Q3V&x8@u` zEZ~+SpEuwKGXwS*dT_D-=tO;P+C!Z`;y_{%-{;8Zjrifrh=0W0#6XOZy$9Uib-=K2 zA9CdLhWlJ*xE_5LUmk|7WEat<2kIvsXe{a{9QnLaU$+WHW_oz=u;WR-Y{j#j2jIVT z0I`7o#*xn(@Y&3O54g1&0Tq3o9?m&HSgZwfc2vUAv{NN9%6A+;64Y`;ZvPZvF4rj53DA|VCr{DTf2O5j|h$Ejj z>U%Sz_Aq1a`RLKap#y{kd#59xH`vc+2J12Q!1s);`cxyVc_2RRKw=TkJMwuWel9a& zkLES?ijPbBm;;0b`%y+wj8 ziH~M$bh3fX)v-9!1NN64a4hUUcjWViy>V^UM!v!AnXpmvRLQ@W{s#vb3;ORI`Mg0N z%?#SZH`VIdn)<&SXe{dUj(pyzKb{%2N9Q$-RiYkxeeqlTMqC#<@_B=OHZ$0RZoS4U zmNLd49(eaSaM;EjbL8{JJFqUR9eYgj%y>=m9CKi>SZ{IU^Tv8fW~?5g>4k4iJes%U zfMOvR9QnK?oEZhei`Mlvini;M~*VQQD0|l=cu16g>EZ#>P`MmL-&y3frdAYHvNArHo z0mH(5%8}0-?)Z8XnQ2(<)x3(Q=7IOy4jdNmw;cJr@isE!^=RHEKCP1s3{rH5?1MYDL3=8)*M?P=3+cU%UQR#Afa?;C$D-IkM@1!H2H{KJO@p=rl znkOqWqxkx4wh~smyFdF3w$3;}S@1vO$mb3Ij?Caao)Wp`o`+^X=m25Ce%z7I8|>-K zV2^rqUI43TYL)2>4gFaMCX4+sM?P=t&u7N&(}`ilXLFB7Q$OQ?Vc|aQ$mb3BvVIhq zY1ripciaQ+KRaMpxc}tH=MDG%%y50oxaIXeam_BjG1p2*K5wv>Z^+uV9+Mxfu;|gS zKjgq*8+L~ypEuS=GGp~(j6$pF!oj92hLt6OMe| zSkJ#MSnECu0BQ~l7OQdO^Ts+ffFd(>#vV${khUHc`ymGi3-*JKeBNMh&J5OLx^f|C vnFr)gIG|X_zvjs24SD0>Li?8D4e2)#iY(BN^>o;-lPhsL0fV@-3uFHc=Jp7l diff --git a/docs6/_build/doctrees/reference.doctree b/docs6/_build/doctrees/reference.doctree deleted file mode 100644 index 08e5c5abb9600b78edf29576c0344fbcd50039c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213054 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 diff --git a/docs6/_build/doctrees/release-docs.doctree b/docs6/_build/doctrees/release-docs.doctree deleted file mode 100644 index a8b9266556b1ead8bddbe3727d8ea7297da84575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10494 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%0DJX--;UX9o1c>`g4-) zeg}~FH3#MM*8V?A86k|S?e86-78x5`atCv9hI;HBd7|d})-99OEyp#{@`d&!YHe!D z1I)V}qpT?p=}f>Vg&jdj$pP2G)CFDD-!zYjK!rd;L~Ly8dU_4Hs!ggpqacR1_3VZk zFsP{t@<|fv-wT`XVSjG^92fpB|0(}~zrT4L{}kJtr^^amzCf4TbP4J54qfii<W^Ah2nrfz| znx&~`Xe#YZrMaoJHY0u?=~3pNgZV$<@AJQE+o#DeW&0EKOW9thU&{6$(l2HEAL*B} zeIMDWY+t5d%Jyn%`{rHcz-*pe70lV1gTzd$fdFd>Wta3ly=r-heh>X@;J04&-E1?c zSC1Ej+1sTyjiq!}HRx!YejF5mpp)rDQCIS0pPWMOtN9UixW#h1=A&Igb*SO|o4lOJ s?_!Bwk6%OrKsOjt3VQECq+LB>mIB+v)0tQiJY`c>P7)Z^@6nU>e`3v&Gynhq diff --git a/docs6/_build/doctrees/sql-examples.doctree b/docs6/_build/doctrees/sql-examples.doctree deleted file mode 100644 index 8ea84aef5d444f807163e77ae7a24bef621f60b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19797 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 TI!_>6A4A)~j12YV%=7;TouZmt diff --git a/docs6/_build/html/.buildinfo b/docs6/_build/html/.buildinfo deleted file mode 100644 index ebd3bcf94..000000000 --- a/docs6/_build/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: e016f5df2654b2ea86739097b17e0daf -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs6/_build/html/10min.html b/docs6/_build/html/10min.html deleted file mode 100644 index ef8a02800..000000000 --- a/docs6/_build/html/10min.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - - - Miller in 10 minutes — Miller 5.10.2 documentation - - - - - - - - - - - - - - -

- -
-
-
-
- -
-

Miller in 10 minutes

-
-

CSV-file examples

-

Suppose you have this CSV data file:

-
$ cat example.csv
-color,shape,flag,index,quantity,rate
-yellow,triangle,1,11,43.6498,9.8870
-red,square,1,15,79.2778,0.0130
-red,circle,1,16,13.8103,2.9010
-red,square,0,48,77.5542,7.4670
-purple,triangle,0,51,81.2290,8.5910
-red,square,0,64,77.1991,9.5310
-purple,triangle,0,65,80.1405,5.8240
-yellow,circle,1,73,63.9785,4.2370
-yellow,circle,1,87,63.5058,8.3350
-purple,square,0,91,72.3735,8.2430
-
-
-

mlr cat is like cat – it passes the data through unmodified:

-
$ mlr --csv cat example.csv
-color,shape,flag,index,quantity,rate
-yellow,triangle,1,11,43.6498,9.8870
-red,square,1,15,79.2778,0.0130
-red,circle,1,16,13.8103,2.9010
-red,square,0,48,77.5542,7.4670
-purple,triangle,0,51,81.2290,8.5910
-red,square,0,64,77.1991,9.5310
-purple,triangle,0,65,80.1405,5.8240
-yellow,circle,1,73,63.9785,4.2370
-yellow,circle,1,87,63.5058,8.3350
-purple,square,0,91,72.3735,8.2430
-
-
-

but it can also do format conversion (here, you can pretty-print in tabular format):

-
$ mlr --icsv --opprint cat example.csv
-color  shape    flag index quantity rate
-yellow triangle 1    11    43.6498  9.8870
-red    square   1    15    79.2778  0.0130
-red    circle   1    16    13.8103  2.9010
-red    square   0    48    77.5542  7.4670
-purple triangle 0    51    81.2290  8.5910
-red    square   0    64    77.1991  9.5310
-purple triangle 0    65    80.1405  5.8240
-yellow circle   1    73    63.9785  4.2370
-yellow circle   1    87    63.5058  8.3350
-purple square   0    91    72.3735  8.2430
-
-
-

mlr head and mlr tail count records rather than lines. Whethere you’re getting the first few records or the last few, the CSV header is included either way:

-
$ mlr --csv head -n 4 example.csv
-color,shape,flag,index,quantity,rate
-yellow,triangle,1,11,43.6498,9.8870
-red,square,1,15,79.2778,0.0130
-red,circle,1,16,13.8103,2.9010
-red,square,0,48,77.5542,7.4670
-
-
-
$ mlr --csv tail -n 4 example.csv
-color,shape,flag,index,quantity,rate
-purple,triangle,0,65,80.1405,5.8240
-yellow,circle,1,73,63.9785,4.2370
-yellow,circle,1,87,63.5058,8.3350
-purple,square,0,91,72.3735,8.2430
-
-
-

You can sort primarily alphabetically on one field, then secondarily numerically descending on another field:

-
$ mlr --icsv --opprint sort -f shape -nr index example.csv
-color  shape    flag index quantity rate
-yellow circle   1    87    63.5058  8.3350
-yellow circle   1    73    63.9785  4.2370
-red    circle   1    16    13.8103  2.9010
-purple square   0    91    72.3735  8.2430
-red    square   0    64    77.1991  9.5310
-red    square   0    48    77.5542  7.4670
-red    square   1    15    79.2778  0.0130
-purple triangle 0    65    80.1405  5.8240
-purple triangle 0    51    81.2290  8.5910
-yellow triangle 1    11    43.6498  9.8870
-
-
-

You can use cut to retain only specified fields, in the same order they appeared in the input data:

-
$ mlr --icsv --opprint cut -f flag,shape example.csv
-shape    flag
-triangle 1
-square   1
-circle   1
-square   0
-triangle 0
-square   0
-triangle 0
-circle   1
-circle   1
-square   0
-
-
-

You can also use cut -o to retain only specified fields in your preferred order:

-
$ mlr --icsv --opprint cut -o -f flag,shape example.csv
-flag shape
-1    triangle
-1    square
-1    circle
-0    square
-0    triangle
-0    square
-0    triangle
-1    circle
-1    circle
-0    square
-
-
-

You can use cut -x to omit fields you don’t care about:

-
$ mlr --icsv --opprint cut -x -f flag,shape example.csv
-color  index quantity rate
-yellow 11    43.6498  9.8870
-red    15    79.2778  0.0130
-red    16    13.8103  2.9010
-red    48    77.5542  7.4670
-purple 51    81.2290  8.5910
-red    64    77.1991  9.5310
-purple 65    80.1405  5.8240
-yellow 73    63.9785  4.2370
-yellow 87    63.5058  8.3350
-purple 91    72.3735  8.2430
-
-
-

You can use filter to keep only records you care about:

-
$ mlr --icsv --opprint filter '$color == "red"' example.csv
-color shape  flag index quantity rate
-red   square 1    15    79.2778  0.0130
-red   circle 1    16    13.8103  2.9010
-red   square 0    48    77.5542  7.4670
-red   square 0    64    77.1991  9.5310
-
-
-
$ mlr --icsv --opprint filter '$color == "red" && $flag == 1' example.csv
-color shape  flag index quantity rate
-red   square 1    15    79.2778  0.0130
-red   circle 1    16    13.8103  2.9010
-
-
-

You can use put to create new fields which are computed from other fields:

-
$ mlr --icsv --opprint put '$ratio = $quantity / $rate; $color_shape = $color . "_" . $shape' example.csv
-color  shape    flag index quantity rate   ratio       color_shape
-yellow triangle 1    11    43.6498  9.8870 4.414868    yellow_triangle
-red    square   1    15    79.2778  0.0130 6098.292308 red_square
-red    circle   1    16    13.8103  2.9010 4.760531    red_circle
-red    square   0    48    77.5542  7.4670 10.386260   red_square
-purple triangle 0    51    81.2290  8.5910 9.455127    purple_triangle
-red    square   0    64    77.1991  9.5310 8.099790    red_square
-purple triangle 0    65    80.1405  5.8240 13.760388   purple_triangle
-yellow circle   1    73    63.9785  4.2370 15.099953   yellow_circle
-yellow circle   1    87    63.5058  8.3350 7.619172    yellow_circle
-purple square   0    91    72.3735  8.2430 8.779995    purple_square
-
-
-

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index. Use $[[3]] to access the name of field 3 or $[[[3]]] to access the value of field 3:

-
$ mlr --icsv --opprint put '$[[3]] = "NEW"' example.csv
-color  shape    NEW index quantity rate
-yellow triangle 1   11    43.6498  9.8870
-red    square   1   15    79.2778  0.0130
-red    circle   1   16    13.8103  2.9010
-red    square   0   48    77.5542  7.4670
-purple triangle 0   51    81.2290  8.5910
-red    square   0   64    77.1991  9.5310
-purple triangle 0   65    80.1405  5.8240
-yellow circle   1   73    63.9785  4.2370
-yellow circle   1   87    63.5058  8.3350
-purple square   0   91    72.3735  8.2430
-
-
-
$ mlr --icsv --opprint put '$[[[3]]] = "NEW"' example.csv
-color  shape    flag index quantity rate
-yellow triangle NEW  11    43.6498  9.8870
-red    square   NEW  15    79.2778  0.0130
-red    circle   NEW  16    13.8103  2.9010
-red    square   NEW  48    77.5542  7.4670
-purple triangle NEW  51    81.2290  8.5910
-red    square   NEW  64    77.1991  9.5310
-purple triangle NEW  65    80.1405  5.8240
-yellow circle   NEW  73    63.9785  4.2370
-yellow circle   NEW  87    63.5058  8.3350
-purple square   NEW  91    72.3735  8.2430
-
-
-
-
-

JSON-file examples

-

OK, CSV and pretty-print are fine. But Miller can also convert between a few other formats – let’s take a look at JSON output:

-
$ mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv
-{ "color": "yellow", "shape": "TRIANGLE", "flag": 1, "index": 11, "quantity": 43.6498, "rate": 9.8870, "ratio": 4.414868 }
-{ "color": "red", "shape": "SQUARE", "flag": 1, "index": 15, "quantity": 79.2778, "rate": 0.0130, "ratio": 6098.292308 }
-{ "color": "red", "shape": "CIRCLE", "flag": 1, "index": 16, "quantity": 13.8103, "rate": 2.9010, "ratio": 4.760531 }
-{ "color": "red", "shape": "SQUARE", "flag": 0, "index": 48, "quantity": 77.5542, "rate": 7.4670, "ratio": 10.386260 }
-{ "color": "purple", "shape": "TRIANGLE", "flag": 0, "index": 51, "quantity": 81.2290, "rate": 8.5910, "ratio": 9.455127 }
-{ "color": "red", "shape": "SQUARE", "flag": 0, "index": 64, "quantity": 77.1991, "rate": 9.5310, "ratio": 8.099790 }
-{ "color": "purple", "shape": "TRIANGLE", "flag": 0, "index": 65, "quantity": 80.1405, "rate": 5.8240, "ratio": 13.760388 }
-{ "color": "yellow", "shape": "CIRCLE", "flag": 1, "index": 73, "quantity": 63.9785, "rate": 4.2370, "ratio": 15.099953 }
-{ "color": "yellow", "shape": "CIRCLE", "flag": 1, "index": 87, "quantity": 63.5058, "rate": 8.3350, "ratio": 7.619172 }
-{ "color": "purple", "shape": "SQUARE", "flag": 0, "index": 91, "quantity": 72.3735, "rate": 8.2430, "ratio": 8.779995 }
-
-
-

Or, JSON output with vertical-formatting flags:

-
$ mlr --icsv --ojson tail -n 2 example.csv
-{ "color": "yellow", "shape": "circle", "flag": 1, "index": 87, "quantity": 63.5058, "rate": 8.3350 }
-{ "color": "purple", "shape": "square", "flag": 0, "index": 91, "quantity": 72.3735, "rate": 8.2430 }
-
-
-
-
-

Sorts and stats

-

Now suppose you want to sort the data on a given column, and then take the top few in that ordering. You can use Miller’s then feature to pipe commands together.

-

Here are the records with the top three index values:

-
$ mlr --icsv --opprint sort -f shape -nr index then head -n 3 example.csv
-color  shape  flag index quantity rate
-yellow circle 1    87    63.5058  8.3350
-yellow circle 1    73    63.9785  4.2370
-red    circle 1    16    13.8103  2.9010
-
-
-

Lots of Miller commands take a -g option for group-by: here, head -n 1 -g shape outputs the first record for each distinct value of the shape field. This means we’re finding the record with highest index field for each distinct shape field:

-
$ mlr --icsv --opprint sort -f shape -nr index then head -n 1 -g shape example.csv
-color  shape    flag index quantity rate
-yellow circle   1    87    63.5058  8.3350
-purple square   0    91    72.3735  8.2430
-purple triangle 0    65    80.1405  5.8240
-
-
-

Statistics can be computed with or without group-by field(s):

-
$ mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape
-shape    quantity_count quantity_min quantity_mean quantity_max
-triangle 3              43.649800    68.339767     81.229000
-square   4              72.373500    76.601150     79.277800
-circle   3              13.810300    47.098200     63.978500
-
-
-
$ mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape,color
-shape    color  quantity_count quantity_min quantity_mean quantity_max
-triangle yellow 1              43.649800    43.649800     43.649800
-square   red    3              77.199100    78.010367     79.277800
-circle   red    1              13.810300    13.810300     13.810300
-triangle purple 2              80.140500    80.684750     81.229000
-circle   yellow 2              63.505800    63.742150     63.978500
-square   purple 1              72.373500    72.373500     72.373500
-
-
-

If your output has a lot of columns, you can use XTAB format to line things up vertically for you instead:

-
$ mlr --icsv --oxtab --from example.csv stats1 -a p0,p10,p25,p50,p75,p90,p99,p100 -f rate
-rate_p0   0.013000
-rate_p10  2.901000
-rate_p25  4.237000
-rate_p50  8.243000
-rate_p75  8.591000
-rate_p90  9.887000
-rate_p99  9.887000
-rate_p100 9.887000
-
-
-
-
-

Choices for printing to files

-

Often we want to print output to the screen. Miller does this by default, as we’ve seen in the previous examples.

-

Sometimes we want to print output to another file: just use > outputfilenamegoeshere at the end of your command:

-
% mlr --icsv --opprint cat example.csv > newfile.csv
-# Output goes to the new file;
-# nothing is printed to the screen.
-
-
-
% cat newfile.csv
-color  shape    flag index quantity rate
-yellow triangle 1    11    43.6498  9.8870
-red    square   1    15    79.2778  0.0130
-red    circle   1    16    13.8103  2.9010
-red    square   0    48    77.5542  7.4670
-purple triangle 0    51    81.2290  8.5910
-red    square   0    64    77.1991  9.5310
-purple triangle 0    65    80.1405  5.8240
-yellow circle   1    73    63.9785  4.2370
-yellow circle   1    87    63.5058  8.3350
-purple square   0    91    72.3735  8.2430
-
-
-

Other times we just want our files to be changed in-place: just use mlr -I:

-
% cp example.csv newfile.txt
-
-% cat newfile.txt
-color,shape,flag,index,quantity,rate
-yellow,triangle,1,11,43.6498,9.8870
-red,square,1,15,79.2778,0.0130
-red,circle,1,16,13.8103,2.9010
-red,square,0,48,77.5542,7.4670
-purple,triangle,0,51,81.2290,8.5910
-red,square,0,64,77.1991,9.5310
-purple,triangle,0,65,80.1405,5.8240
-yellow,circle,1,73,63.9785,4.2370
-yellow,circle,1,87,63.5058,8.3350
-purple,square,0,91,72.3735,8.2430
-
-% mlr -I --icsv --opprint cat newfile.txt
-
-% cat newfile.txt
-color  shape    flag index quantity rate
-yellow triangle 1    11    43.6498  9.8870
-red    square   1    15    79.2778  0.0130
-red    circle   1    16    13.8103  2.9010
-red    square   0    48    77.5542  7.4670
-purple triangle 0    51    81.2290  8.5910
-red    square   0    64    77.1991  9.5310
-purple triangle 0    65    80.1405  5.8240
-yellow circle   1    73    63.9785  4.2370
-yellow circle   1    87    63.5058  8.3350
-purple square   0    91    72.3735  8.2430
-
-
-

Also using mlr -I you can bulk-operate on lots of files: e.g.:

-
mlr -I --csv cut -x -f unwanted_column_name *.csv
-
-
-

If you like, you can first copy off your original data somewhere else, before doing in-place operations.

-

Lastly, using tee within put, you can split your input data into separate files per one or more field names:

-
$ mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*'
-
-
-
$ cat circle.csv
-color,shape,flag,index,quantity,rate
-red,circle,1,16,13.8103,2.9010
-yellow,circle,1,73,63.9785,4.2370
-yellow,circle,1,87,63.5058,8.3350
-
-
-
$ cat square.csv
-color,shape,flag,index,quantity,rate
-red,square,1,15,79.2778,0.0130
-red,square,0,48,77.5542,7.4670
-red,square,0,64,77.1991,9.5310
-purple,square,0,91,72.3735,8.2430
-
-
-
$ cat triangle.csv
-color,shape,flag,index,quantity,rate
-yellow,triangle,1,11,43.6498,9.8870
-purple,triangle,0,51,81.2290,8.5910
-purple,triangle,0,65,80.1405,5.8240
-
-
-
-
-

Other-format examples

-

What’s a CSV file, really? It’s an array of rows, or records, each being a list of key-value pairs, or fields: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line.

-

For example, if you have:

-
shape,flag,index
-circle,1,24
-square,0,36
-
-
-

then that’s a way of saying:

-
shape=circle,flag=1,index=24
-shape=square,flag=0,index=36
-
-
-

Data written this way are called DKVP, for delimited key-value pairs.

-

We’ve also already seen other ways to write the same data:

-
CSV                               PPRINT                 JSON
-shape,flag,index                  shape  flag index      [
-circle,1,24                       circle 1    24           {
-square,0,36                       square 0    36             "shape": "circle",
-                                                             "flag": 1,
-                                                             "index": 24
-                                                           },
-DKVP                              XTAB                     {
-shape=circle,flag=1,index=24      shape circle               "shape": "square",
-shape=square,flag=0,index=36      flag  1                    "flag": 0,
-                                  index 24                   "index": 36
-                                                           }
-                                  shape square           ]
-                                  flag  0
-                                  index 36
-
-
-

Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/_images/cover-combined.png b/docs6/_build/html/_images/cover-combined.png deleted file mode 100644 index bc0bd8c8904705b1849cbc3b1719bc2372a89851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518951 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 z 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 diff --git a/docs6/_build/html/_images/mand.png b/docs6/_build/html/_images/mand.png deleted file mode 100644 index 770e95c50a0259f0b060e6c19a54dbd733c66457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646689 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

~N*29=>=iRyHSQcra`2chw{qP)CDCVk>T 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%0A64zRF(H1Z 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

L36e2=v67%WQ34zS2PN7nDY}h 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%0AI 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

wU zdsI2-^n%AV9k%NaRY;YlcoX67s>;z>hVOe^*G0E>s?bGroqKC>b&DLAC?T+Q7vn~U z2~MT^)38958N#|qz7T`U8y`s{As%#Op5k{MYElxqKDwuUh)ih7usMu;%Sb(NH;efY z|Lq-M4KmMBc^WAoNTlHA+4xAsEC}&Y`qqJU9Nq)qJ?Q+uTZz7xdlfz+9sPK^@Ljj| zfm626$okL!Pq_WvKkyDh#;QE~XLVoM4#T|*A!_raLbwo-iF)8mJ2z-Z)3~8(4X%xd z&mdz;W-x9ab##}+a>pir``j&uUbl#q;?6|Bf|P@tCrTjD8kr11NFtoMxxJ0E2 zU+>4d$F(-Ht%qxZw}gE{oE=)h!4FllGRhEIbI{huk1P*kP)Lb4vBD>We88U?ZZ>)0 zR;sCZ|4tlIImO@e9Nqi3aN{{4jtP2zwL^>s6hGadID zfJ}89KSYm&7)U^58A^$vLq9w#dsJPP?O_!6ItQ_;9+AB77Y<~iWA)qID*^;S#VWDz zaUNp0UqZ%?xVJ-$w%}l5S6PZ{+lYD`)&Z$CQV4wCgO0dX-*g0}NoN(l-W&DzcQAHa zWtzn~!h!I9I27`9b?A$62+cky$}EJezI z4>3f_?s{aNA_*~}a`+60XvCCzYR}MJ*W(hpE@qU30M;MIYs_0$@pA(zi6-y;K_|F? z%;Vn3_m+DpSWyEV((&Zc|NcAd#cOs~yXZdcddg2eBhLgO%}CUa^)EH$lQI2OP4&f7 zXx3c+^=G^+IsW~p^p|g_SBiYD2sVMxuzPobs?Hca8sS#g^o_$AhpP?KfB7xaUUL1{ zOQyg5Em_r5zo|(^3G1IOng81t^e^6!J$p|5^LH?RMwxXqyBL76d9x%P5}T%DbjS9#*oZ%x{E8C@*8BgVtcVe z>I_7S?>#t&o}W>S9asPBJFG}a@(JZ}6`|rg$WP|@W`!7^lIn)#53ge7Rz(U)aXLlx zTl!58DkVRfksX!s^kyR^AvjCFj+<42Af4tzMM)fVmN$_7aL}0Dt+K>xWfH@9+VeGD z3X-ZAT2MDhN>Vz^a!KDrc>W&-(i} zm?kj&-Dia6l8gWOGv!ymWBNGd^8fcIoGvMkrzkxAw#8bDZF=Va`g>%3&UT$}^3R{r z{PGL^(jdzclq5f@qDD+7bjvmEVvSw5k!kwrDdq7Pw>oF>%}YGdNNYMres+SEEoNg$ zW=AAdf+|ZybIJMt`Uz1~#I9TtsYSQcLEZ(DYC=o4*(i(g#$a|1->flfi!2n~)fIgwnSA{W z`|cb^$>_5q(khAf{q0Mxzk7!s&q$QVG=k~xKP5>$sz_LV^F6D#JJPB^c#kKbb;?b2 zSiqSM)5FQX{T^jDY%kXY6X>p&WS@P`6G#w0JPY^mcmN z-O6e#hV;uzn(LZ;b~bo5?Av|y>qN@G-y7-4;ebmLk0SQ@BBX2TH(7j{Z26d?ISkden+=U$d6~JLO#6z zzdxSuYtXgC)f>9&4PHu=PVZ>rg%G&D$BP@eB1Gd@`sgVqzkiNfyk+}xgQ`kgvq8v& zzOL!F9mS)^NVlOk8RbcVxwxY1EZKC73>sCaNJx++)u&VZW=XqI_-=ve6Y^O`cd?8z z2Ry!)%>MBU(%i88_6^O|mh|M9B(d~c6B+7047js`$rnegzWEEyE@Slg2-mC#RAke1 zXsUF$x;-3(LrBQxvlyhZza?_02>VE8O3L>GQiPJ2T^~2XY8YpGsK6lm+soUMQ8w__ z_iJeEsG4moKKgozX(Z`1qrbcw4%HfT#`wz<+PA;3{Ao=-ji%(jHs9mg4k?_T6jrct+@3`pz8o0Afgxj48w^ zNi`;$XzG_&B*%}Kd^TqL(=Y5Uy2xj48`|ZD?D#43-#vwPOLK9__Vt$P(@#*sV4aOc zU0IThbIkIBX48@t8GR=hJ)N=n_7|rA_Ah9=V*74`$}0#hh!Ss>kxo|RblV--WJJGe z$sZllUA#lj9&_}Y6Wa5)EPuF)#fRR56nhGXo+RS}-!wSq2Z6U8Sa=Fm<%nRT6E#%? zB*{3#ZnpHTLnSHMyu$Z=G;=8*Q8hUH5N9k1L$xQ~^xy)?bcFCd{kDw}+=;~RI-Kor zUXspALfxarBiv>MS&7zxe$^3z!3z~xeMqv|2w@D)SZv$iMbzR3AEGI45ZEJROnKX* z%J!$7-rxgBEr-*yir>S_fr|>>SbT^T=4?L3*E_sQNQ#({6?%hrAXAB5*N|i+qZBCu z{kFmOF~r~ySv$mw`r$WGNlrE|FpDK-zutS$laeG)2Trskn4W&M!8s5rAsv@sdfa|s z-E#KIyhNwaFE)eDTA>md<5HbKDv7hPiX=tA+CCb}hH9M3b=1Z81K~h|stR;|E4|S4 znC&oW2oX=lA8Wh6ho!o;b}EV8MFWmZ2k?E^(@pl9@JQ_lKGGIY3a#}}^>;%nOUF2R z>u?6LqYAg%;fz2K<99)s~mq2Ok~h%40hdF%B~FlciK7 zv*-p#L}Ev?Y$6&`g10W}?Di6a^%~oTsMYrZDaBB|y%p;lJl;b#pFrPYZ8#Wz^teJP zk6E`-PZ|PB#_*hdHQEo0uxmTicuJbbkR_SMgK07;=of3y1xYGnh>qJ=_2dwY5IaeJ zcy?4dP;HdN?&q-&z}^KO=L1TmF-&W~TL~c^xIqr@Vr5;3hi`Zo!Z`K>fZ)S>&s_*{ z9t*)9LSdxl{jiXGLf$ZNP=)Zfh#emj_{s;SvcTO$!)P22hYIK4(%}DR{YO0T8~^RG z8G^-oO+L-Bn=QtO$Pt(EITU{{sYJvyL2qLf_K-Gs=sd)#;mrm!vi5yzk!4A7JR!7A zL{sk3d<;5d@6maM6b9P|R2Dly&O(x>h#(Nc59^>pPc*(YxIV-XAuprM#hRgz7{_fk zDR9jWQ@c34vkZyF_Jh$?#_F|4l8$ov_Y^1vq4W1Lf2wya|mjS9j0*0)CzbJ zIneEnzHyOm;^JDM2LDDNL8lVaL=2uzqhHD!;`<64Y`3P?`R$Vy3lu>)7rTyIGyC1!0I|K?Mw;~3-W)ST%jQ~JdfrjbZ(2q7gu zJw_`-dl?OZVhGCE-`IW~!S3a=Q>0z7{NXj}>@jJXVp~J?$&Bsy-_tf4nwtFc&nQQZ zb^(*GpJ1=vaQ)3MSkg#QXlgte`Fs{RwznOvQsH(B+MQ$c$y3~FOYvmH_WK{Pp+sTn zh6v8!Jo(u(MrWGkAAZCNMLM366a_NzG#8inUNQOlIl^z*{B%Wf`iQiE_VqcUh^B=0 zVudPaNN>6qQC7c9O#XZ*Y0Q4|g9R}J&ue@6S_XSUZZ#p9=x(*&7`Vd99v5UPj* zeA@(kw~P9vGNrjVM`Q)UxrllxE6S&HvPlL~(_g&i`kPnCY7`|3YG_ZnSXrI^{!6mV zu>AHdrn8jKK4;U3rIXB2UxTYuc-IG|UkXXQ~)9doGYan&LLstbV+LWRL||i>!{Ae|<{# z@)zo>Kz=r-Utd8op*$*4 zVYy-P&CeL4Z#p|7PEOO`evOtZuKx0ld^#aG1G1ugG-CVH&&bgfzuVwRsUDq?&T^7T zLHp_j*WbQHRTT$9atJ7$9+==#C&(Zo5^bE{)z96Q#c1ePD_j!|q2d84%?)n*E_vWk zAqsa*FUY7{1$)DI6(2e%-LQlamVUW9=tJ+K>%s#CzfXB#UhjL) z`14OFk8_;ybeGpO?-qo7M0s|M-(ArxdWy3d-NhApdO|i5H0Rgo=?O_<*#7bksyW42 z&~6>0$5Wb@SCpSUCmUI=|L}t1v(NFXSGe?qa@2G6r`H31iF@BO&~G|szx#^nsGvSy zBgz8NZ>is2lN_CrjVt==b9UED($NIFtx?k>@+vt*u*+;{sUnf0r+K|ZO=jpk&@Wf? zyO?^K&5lT?8FsU#TWoO7AhI##qZ4#0Q7VpSm1(xWykvLTM0WM9`zH1W09kPSkI&eC z{~cYMkZ4KZ{WgB^9-(v60|DYLzxME3sHoTN7i&a1BAbsP*t=v6EwS5y%92PV0-+1i z*=R^#yQlLw5GfRPv&8i=W$jS0{vhM{;fF6EC{IS1)rP(c!+~lzw3-Ir4lUsa8R|UD zoBkkk{ekO)N2nZ?C%1xQ?kCiJXd|q^HMAE?&>3l|v5i5N6Ou|l9Ly2|@3}t3ZPJIv zw_EyE9XCcH;A~G2;CjKyzkNmf^G}5FVRv->lZXX{RopM6ct!2C{8DXOw(bv zhJLlA+ge7?PN;u*jTlXlp+k-4Bvni-&ZZ^i>J3-lyo$v;rLawdDoT_L5qdD6p^|;! zP=0_Z?g>_q9vzcR63q2A-LgT?j>x7(l$;_+3XM=6v$N40mqa<4%rxEkInC9M{LvZd ztO8>Wgc)xvsz_o`o0Ry@M$_dGEavMC-C{i?p>aq$)uV!bbxprzkNgb`4?!vdVi_ zi;l}b{7icGDYNGV*MIz$phid>AtOmFIb_BDpKo3DGDyv8`g>812)}hK2 ztu$&hLJCK}Zt%9lw2q|8@x3EEnvxU|>EuODRw$fvLqwyC1~R45Ma0Q@VkP1*mZiXT zZDg9BR7fn%#S&GF(MdE9Cew`e{F1(x2-~BN=cL+WIz{*}q6^<0)daQ9nM6f5B9g|m*=G`@(fXXV8Bn5i9T}`l> z^63%6w?n+R#+!cFxMV2h=(imzFTwZdX{0yo-mb_VKPF2I%>aQxe!j|3Jvzc%UDCA% znHFS|3Z1GUEM!ZN3E8~F?P~gU8!IMZNS3N2BNl53L8FrdJ;|aYTnOBHMSZ@+s|1y# zC_QL-q`)>E`QtOv#ISp}!C6Z>KP4Xv+Vd621eIk2AJ`0==KIy68}{p--J6UCGQ~p} zsBoiq20v7o-$yOEU4z;6Q6CoWx#oj9=+A@mB=dN1YA&_}byIm&<%r^_z^&Hw4d^1l zG+SgcB1r{v*92XXrVj6Q+Q! z{be*>DayykV7AoPE%|gzupMSNS@*jgs;Cg&47x2%GR{e+1!l3@M}^+g>#8BX*(0Tn z)$b&Y(d_;MQN$u*hrGF8F22zQhv0uD(3Jt5B%_Z&_&W#GUx5q28~Z@C^S;Y0ZxZKz zHDvZfRk2&o-kvos1bBxtc3`UyYl(yE@d?>9i>B4OA39QsbW{>-Ltk5xGQ-vlGA&69 zjq5uQ2|{`LO-&F9Nv?3#qqM~Jp8Rx*Rz4b%PUg7P6)qW*>Xz->9XeOoKKd)$-eOtcxPj3oY;3clGr5+E+)6>fedsj=057U zo5+YQl3R1k0~_cMK64V8B&6dMv)p3cEz*Jrhfd$amFtJc!NWz~k6gc(Mu`Wa$;ICq zI|72iwmreeLsD=8nWm^j91c5oH`2oaZNDMgccgB~Sb{eLfnlhg`uNN_D;PgNrN6v{ za!!^QtWVIXr(gAveqqc|nNG-$D|}PaZ(5T191$AYt0s0vsv;r~`yIPC*Ek^wUNZXR znEw0L*e+IIg^oBvyhj!p>3jmshTWTMf{wA(-nsaE z`k2(GvJ|O(3_g>8>%I+M46zSN844OclC{!l6|0=98t3+eP60Cd#JrcNJdOU5TXHDx zA)QvJM1q#M&F-f9yq^c|%&D>RFO|ZX7Hm7soeO^_wUQHjcA?9g=$X44N0_AU(G2kZB~9 z$*dsB1*YjSbxciFSxl=I=t0TS({F3g8G7#pK_Rq{Z0USVK2@}DFX{Uz1r4Ug_L6i| zA*G>PcO=Ji64|nOy(Bw%OfeB`U%Z8MgcKHMK<7Eo;kpnzHja2mhC#xivq^p&Hw)?U z3BuLbor|Z&5Xes+k%05xn1z=6!cw^*N0omOmq_=TWzv`R^5BZ6%S#0b)KT4AowS^s!RdiIoZ zo>9MiGvt`d!~5THb$gFU3WRdF+M*{Dl2Xu}U*T-rXy<2VWb=al@&ZqZ$_(|(D}s{9 zq@p~n*#7bpjuEr3o)Eef>lZ6zk|Bi|2I`#9@8}mxtk0N!^@Q&AORSBX(PTCzpB4ny zW7{D+q#x4dgaGN0iD&on3Xx4?>e3K-DYV8nYx-q}nvT&$hL(=z?Sk~tDgD(OnpKCA znsk0dIxCP$AcRKPE$bg&()*I5-#?}K`6bDtr-=F*<0?j<&akVN=JFkgit;pP{lm`~ zCs8UVn~lK7`0vA{?OfDM&PUNmF|=c(9)R%N*T&vx16&_B&nmq&@!YER2pP5Fu6H*R z4}k0Ft`@kk$K%BaZkZ*~Bo*S{`eseL=}1NucDq4kNtDBkC%D}b+XbWoSx(4~Ciu;Q ze%&Lh4Ely{-BCP!%=k&g>f4_&u0;ARPL@obokSB$y=3|0J49BY6E#%e1<7ne=y!3j z&d1R0XfKz@@ez|x=Cqe9vZEQUUa@&`P5IdqRJWn)Qp!hD?E0GR>uZEg?roq4MBv`k zI_Oq!FK+K0ZEkN!!o7--cag`dlfQxW5(nO`&;`k)h?}|FRlo-q>u_%^_c7VaKS0*- z4mZS+cQu|f{o)bAbcgxD+Yr%XN??{NoYyEF=cIHt!q=OqXHPYu zvy@Ng)NfwXt{uVl({pW6R-*D^kR^HYqnzf|70Kyi{N^3IMTankokr#`d-{dOt}a>q@D{R)v`FX{D}v4Vp|&@iv-DJ6pIM^&!8fH(6!NU7B}o}kav|#KATa$ctc31=u8|4HmWL6 zQex}+AYl$4s6dMcpKVF74ej*;L`gQA9MTsL*T>W_eB1MZ9o9X*^TX!4k6u5>jKqNq z^8N-|d?<-DFobu>!{*9vx46#U!W@oC#@Vedmmma#S#9D*(2FR+%+-(>F9~fkAkidv zhnFd%=Z^`y4Nho^qmu6Of_4SjafPlb-136vsv$j@545J9ezC#!(Q`y+5XA(k8oFge zGMXW!p}k%qi&!BBkLx04%r_myXU|b##nqqRkUxIP^vfr>v~Cu7*N2q|to`(lWw?+)g?VEub!q=;{X?)(aoPs!%Rkar>R^_G6I8IpAaA*hHf z76FxLT(iY&JA7wIP99UvVe!q6g#3v4*H6*X;hdv=cLg%RY}R;@QjGIx>>H0!7`pRI zoKxu06kQNeuPvye01W;08hw05b(*pJ;T2w2j6Z)2-H!V8kS*dZrt5L7rF{O3>SRp) z`VIZAL8TeCsX-+ul~FuCA*tG%=<(8Ca37>pQfPFMA$8OY z9U_&z1Js~D+_z?9?!3}B73jT$LnK2A(7`zjmDBTP(D7RI4ZHrD>kpL@G?QEef1EMswDW95OUHl#^37(Je178{bI z32wPy{cc6|$zzmjXcmV2>ctazZaH>zlZgu`rOWa}OI#(o2B_c7&Be0sr8;jTrDif` z`q^3Jxrb;DYA;rpHXi)q`xZ!L@J0+MD2rh5O?W6yrnHymG#d-XkUx3CvZUhz;d|8d2+=RtTw3P8|BSG{V)f%|ECtgqpOPjqy4S2X z^xK$NC{&Jbm-Iek_T?k&#ezs{Gj!_)H5#Es7Y~P7HjEXEQ0Xmfp&&mksDHUYj%S2+ zF?9D#9QUcGZ$0J738CNOdWX;j*-N_NAN%0u z>i*{W-r)J@^*1;)&^M9r;cql=9+FBQ3~nA%*SLPqN)||&pz?TdVy_hs2D7X2e%L@) z6*?2c22kSr8dDnx0pA%ylEliNcQ_X)pB%*^$HJq^*qOGwO_bBjD_mz#sl?Sa?P`ar z3M3L$ju2r>v+hWXDUz0UvqNNglqU|%WuYX&c*;*7Bf15PAFnB%KA}7+>E2$(1C!3k zW}}$0t2Ji1!_+-s$xcoYcE#d{i<=F!QV8~Qd^H&NhMxmBY-|Uw-=J5%(Z}hisdY83 z3j@VM-ZRsG06#bwK1C8c5q*fgZYua5;TE>`lk;KqCp%SvA zQ6yNEqnIpw)e`!ecD+Sb6S6A7HvwH~y7iW1G9$Dr+Fg&%Qgo7%9v!3Dvi$ZXjOG;M zobKupCrXM*iPSEVNIa;#B=o!3A=c_f!XZ?w6!hDg^7#{#=-9nklb)O)X{p~WVjQ#^ zqPB+$m}@NM^E2qSSeu};fNSkwZi-cdh=kjpTqWszib~ZX;@YehbXO~qqcie}WcSNE zyiU<+HdGtJ!E_LHYirD=Lsuh$@95XNh)olUbT%DgGr84Di<6zN*YwL8ndzZTYGWu# znj*^#yV-!s(3!;UB8@~%=2VZ45w4A)37Mw7yuvhb;~%`iwub!l5ozJsy?h7hnCjUv zZo8y@w?t+Y)#EAsY7seug$6GU8)uPKl#gc!U$c9Ci8UG7WQ5GY?dljANK_D&wGmR+|3uoW567 zk52|r`CuR*+zHb-Y!Zj$qTudobcKj*X|r76>|GYC&_gAr@4ySP;|Z>K$YyDoYT-A~KEJ>}apnp!L0C>L9uJyFhO5 zZ&batB(r0(v7ml+2{OG&ef+3=V~AhQK2Wj#Kn414l&>6uYVO7yA4o0M5Ohv)I-z@a zjt}bZB!S&akn?Wvy2_!#7%4!9=98QZXFf>|subs(9PBxQ>4cC=SDvdFQU z9ogek!g_`2Y&5F|hue2%JjkM?cr=U8c<|V+$86e2OGvYrR+lB{JV)s;$P+YDM?9i4 z2B8?teihj~$F4W@>n*aFpwd8hxr|NAyrMXoU^k0c7&wYdXY8IGt8N01IB z@(n?c(b6FE5$P<)ZhPErL$}%>k{F)k+bw=zr>bn2hm|Dksb^B7WKVasjMe*c6eDym zFXBGaiPDDRun28Bt`7D~$?5+6n+g<~y zz?qni_@Tq;e>67R2Sk$HN+SGQ9>Nce&s)Y}t&xeq)iq|@ksi;{iKTwMyfr6@!3;Lw zP@Ox(bBE!6h~OZvC{OYjH9tQ=35QGt&G{wH6=Y+L>tnc2G9D9lSL`los;6_BH}9}6 zW&Fuwl3dU&R&?tcd^Ez#A}2kXLf6o|yCR5mKrjaEF2+=gEJIf%zTV)1q&S^{F_`TR zvomC;bCkZ>yvkJ5UoYu4mi*BviR#$Bz9gu@7#}2hR1$(cAoGNba~dSbBt*mSsERU{ zt{c`YkM9G?Y)(=o2jkk!+5chQx7f3_w=4Q(jT%j(2HM(TS``TCqPN8Cv8n$3VuFx& zkbAIbqnuPFh~O}*EowHSI4Wu0oJVPInd41M@Csdy zP^q9>EYRb~yB9jatuEQTyh4qqWXCfUJ^kehH_XN9Y)UXYZ0pcvh3mEiAM++$)5n09 z)}SY2q_D_b)4aWm`tZ|JijyiHke$QsT2zrEWKVao#s`IMqlR6EfSS(1tZ5bv`J>0A znT*{pC&;D~l(cl)9cJB|ehkWy{q!?@+U2 zvfNW&Z_!DDvj(Y>fy)eLYnc7(SGdd9)VqXos<6W*D|k1YmTuw8yd;@UBTLx@M53|l zCEcnafBKYS0;@m&j0u8tG9|0ZyYrS3__oHj2APf!p`l)^kV!$3XCzg5*OYcJ5DI+P z;97&o5`?p~o9HY}%Zg-N&@UH+kdutTtZVwZL5=2Ak59?RX`B$Gqj`Hpw>GFOiKfdg zP@J5QX%&o`A2LR zk(VWUqH#@4w`y?CkXFZ}Q;F{cQbj6Cb~L8HxS&~g6wjVgRGNObMP?PD+tF_=`I9s9 zk)pj=kxa)Z71R7&*R%cUoaFIiMyEOT%N4fWBFiz=lVj)>Tz~ThF*>H4YufW`tcecY z;C$4A&dW&W?BXUMo0Uj$Q&AR)!fqOD>oMzVdaI~T=C^_lqVra%xWNjyHqb&VeAm(~ z>Ki8a9%YvZTvNy5%fY1_kZFO+(`ZELB;!v`=`YT)F3@jwaRU<^UEP9*baqTWtH4-n zv!ZVl^WQzD{_!Wa*Dbm%DNl~kxx}p3sL2spHf-NEWFyV)?Ik`*(OQFrWIREaB1ZYz zIJpKFH`B;ssB$)u&M}G!ljt0s>KGn#I;MT~lErs#Aonu8D&@D?+sEJCi~s)Cd&8D;Ep_OFEh&1 z3H`+t?mhCs-|?OI0UqAnr3oCgT^?s7lP{lBRFWVizBjbjYg`L@T2Y)%ajSFIKd#A6 zC$!hs#0X6}uoK9D_n%IHM1`pYkPai7?8 zJA5VL2Zc%oS&#qVvmF!IBzC=q=?SO*{5gK{meqG}=v>CpKRm^}dq=&r5G*3qNH36C zNjk|6?EQ~c0&jm#sR*{F-&oRdl$1P-nj1FTt{c23@?lIKAHdjs2&;EEAO?iYkg2-G z8UGcZ|D(Yu(R^%n8@lU;>dVi`N0#L`uMuf_Alp0`baYF$=ld2>&6qqXSbp<@^zh8KY81zg}bNKsug~PBYqzxA=6%@jpDrT`#H6FX&py^owUCX(Y}d zV%Svu`W?-APxZwUwAga>ho2FnFT~8_one-1x{EDAC*-FSXxHps zUDDSM)3&7ZDbfdIH9?pa?H0;MGjKk3q`ZqAmjJGBF>Q-VN2ol~L(KA;=6ZwB`X)#v zVyPs>$r!ucMN{B3j|)&8BfNu%*fg0$ZecLyfTlyJ*fQMXVfGcuNi`(Z4fBo;bXQA6 zTB6G&(h{^f#2Uv_U2M;LGq~r6qpjGtg0+r@DjTI2GEs+EOTXWkaXZR)uO&*rc9_*} zz?Er4s&Gw%Yc1(~iY^qv$4SoCO$Z$q}Z;7>QCoMn%u^s25Tx zI*Sl?J)a>(z-)FPBPPhz9cnZo87aE+YXS*MM>I|{9pRfA(>SD-B$Ek(j`ngpU~J+f z=Xy_m5?QqE#T9*RBOWW!Q8Sw)$OP=xpvP6L&U+AAU>57)zk}I!sH!9>G-lgIrf6po zN|TH<{jx^SW?&lnZHJH`b%c%w6zOyn2PF8Gz-!?+8wyifk~8ae%+yXnOo$ z#v5W=UF2DFEACg|F`I3a0_>|>Izglw-`(g9WuC_lhUqc8-JqW=@oj_5D+E2=VjI(% z(t>n4MuwJd-5^vR(Plc(US8u|3{jC~g-!%!xrwp#T1Huo4KZ{A9}j7_+N&}z(c>ak z4F(XqID`U8r112sO{{1t6^%*izaW4iggAzSAP5Iu-QcjxhVJ_iX)xC!g{d%rJy5V^L$MvqIRl87{+zgl8*LSJL*7T-rvY<4;)v|HL`GlWBkA!wl_o#gbFOGKW< z?upXzw~C1fh(ty5jBDtwH!&%)N@>r}u}+dyBXpG_ygh^mxwfUdSRu=j>|~0t7J{c+ zuJKmIv9OD+PO17>Wmf`Kj!7pmHO$r~%FF^JlM=VtB1dC{@9D0$F>STXhe%vOGRZKD zC9)imjWf)8hiME1j~-8=bZxPQ{l;1RCq35#=1Y$zB!!3)F{uYrQc5z)=ocIGbd0b) z{U-kVO{}_j?^(UKrMz2xwlO?Qrb!GT3E{)n4~9vGHS^b-ZvXc87CMPi6hBDUe$D6q z$oRb53D5{FV=mB41)|p zk4i#Q3N?|On841G!-aC>`C zi%<#ad_*uEX4gk8cGE-()9EzMWf$u~nkhi1WYYq(S|hU@nMz#UW7`hbS(5Pxl@cW^ z$v(s^rU4cw6U=G_MTIau-pBoo?<^`!QAK3jcZ)4yNN@=VvZEQobePr*TJvx~-=YLU zr(~0%K&0Yc(JWWk&PCmSk|IS!HYydcO^+TGnB|6`Qj#iD2Gfcd^f6q&uVlKWrCax4TKe@i{mIYc zqS>_Mql$L1L}n#2I80+GKYfmNhUCc+?)nYerJ}3?yOm{hT(bV*1?lN2iSq0&H{?&A zk!OMW@*0s%(Yc|1d4Z_rlqUuCFK-cP1|e2OKa zWbx*UfODFYfBu?8G^~EUz;+(rcc}54yaFFmbmHii9ofko;UaTbsDRzB@lN24rM+5_ zfB6NIW6AQ*mn8EXS8qX$nS6Of_vRe0D*SFmz1R|jAfKI)lor2|S3hRc$kwPku*{< z1Uz0wJe=|^-Fig`8QIAMw_ZUy0=uQ#Ig}1~pHM!3LaKLcf4YQnMp9~YBB|e95_Htw z1yPaYmhL*X|FApkc8h5x>1>Y9+^wkKNR^O9+>C{`BS=j)%dx91*2GD;crvAZ`-;Uc zOH`_Fuz%t1Vx*EG=!CzK682CDO2))2w{KO;Xj=8&B6SuMpgw45+INr~LYHK-F~J+e zLqRGJX`n;6WoUGCt4-8cO7XBL)B9*(zV$*<$4YPbmETzi8RLO(M|t1-J%h8jUNZm3 zuNch}Ow+S{`Hp^T$WKqm<|A|#9q5=1mw)(?phnY0HEt~k$W+nOQ z3B?T7-~2>x6s|LrpFTm^n(ez4BGo7aeb}YQTE~1 z3w9SvvXdudSz!I*1*9|b@d%Yk^3xeYSbRwEyK}Do@C(V4&p7$VPY_*8Fgq^)@EyIW z7(bq4)>p{sDcY{7*FD92jLCrRhpN_fysy^3!9oNfz7b_d-IV zwCtg0J02i?x1qgWBUD8;A0zf1nGcNxB*8Tgm6W(MJ6TL(HNZl0C^m9{6D|Ns{$dS z9$zIX!U>Yelw_o1AxcWT-QVN;diR_A8(ct*#w4SR(3?S$G;~%6lekbGv)x1--EBku zZTxF+Ao57)@m-WnB2j6D%%EQ_@h*!-xI@t*+{ixGYi!TJi5@6P&J40FAe(Uf`{#t! zny&W9G|;}gMx+zUr(?SFchrj-oh10+$j_cJew?!T?hVxLjQin9uDEbBl2!1m1ok)`_zbeIGOYE;CNnTs6V&>Lit zM;5OgWEtUB{Hc(`2`WxFGB0AZGlI~yxZa|QJl>$&hw;6J+ImDHl3*;pi&6|ZL@df|A45LyPj9!yWQ?o!rjH+6rw9>sQn4f(wUVkTqUoWx zhqOGQqFezrd{-3>558@YX^Ko^{CF^iFkoq7&`gP|YrG3X6ljaevq4HS#B8U@5DN@4 zi2)q4$cO5^9wK&QT2TlN-x`EeQN!Jt!)8@vNo0)*I8av)x~CX7tW$+;x_COf6(t@| zo{@zU&5BWbh>D0Q-^GZ}&^cs2gf$FZf?%UDOC&MM_|AR4M~`s38f1bVWrW@m9@+r< z7%9Gg9-?8Qk0;e6MVAG5gRR?G#lIIF9NDru-YYxchLRXs5-Z>q-}O;1pCwWI)mzYN zIDLDP$poy$HZ{Qx&%mHfMMXVsu!GKfa5+a4X+I<^i6MP#sJsV1L`CbUwHCv@-nB8p z*auXZ5jq>SuYaSe^FH(V*P`C;#wg#G+I<*!5k5fUh^P7g7%4+=D;M^I-{GO3;lqi< z;bAP^->9VTwcIi3OJa8o&W5Oo?OK9Rq_YXZblAF&<8hdaq6BF$DOwkwlSJQC?=l@1 zM+fMr{q^2QjdUU-y}(&yk_;xe{w4@R>BFINf8T=hNS(xrsdaIFa1Nm~uI-Rnh6wR+ z>~<|`RG|_Pt9WUgvjPH@CWGEr3=6&)o?AJXpoZsFL{y`18p05e6go3(ZpAIK!#+_h zN+?2a5Lp`ewR%7H#DE1H7Pp~w9X_VH_a2$2F}beoc(7c32SgD~Z+cwCz@pVQ&Pzoa z=iaJ}vFO1MalH=L^$&MW1bc?q`_HELH-ScK=#qK=>z{oASoa^SLJ#Ba4x-Wj*XOkC z*WP_`OgyYCc?h>BWPC0d4kWJYqkKjPf{4{MsiGK*_!7>wcjb z&vf43bQk~Dz1>%$twW?4y3C@7$U9uq#89m;BoKb+wd8Opa&i6eZ9DjmVuf7hMFb+$ z9e09$_7aaF4}##4X%d5$x>&T3TH=~McD=F$yJ_N|hJY;dD6{kX0@1MFa2{l=TB}qK z9xW5mbhaBh=8|CD5NxN>Rm@;;Ca%?34@sPdWEMLVu8Eaz_5>;)qqTi|gTvb&tRI|B zhOsPetrIedhFI5i5m_6ej$bA*+aZ3&fGh^$Q12j>VEv65Gwy-+K`LUBAD>a3ji_I| zLr#zI%_YssP|Qw9rrG=Ysvtm^ScUe2U;=tFi(FkKZgY)o1?lk&v46-9nkjJ@{3_3) z=_P~%e>pfmm=FWqvO%UPx>OPMCuQ6e?IR)mAP+DxO)r8N_HB@%g(9Q5#5SIEoP)P? z*VnYy232L4^)=0P$Mm1RME5IPdQ2);Tz$W#Jk4pY8j7jvH^YS%)(+|&8f+~lT>T-!Uf}~2Zn>D@Bj6VB}YG%3m_rK6|l43feIy;FQ zSnH!<$27RQMHb^2T3~OYbHgpeg3O{()Q6OGS`DTq?uC8~lfph}Oi5&(Vy-Tz&sSt; zkI3f}LcgWITH=Me8_+V`ca@DGG!YwD%qX88BdjAo&RBi>9m|(B$N%;ZOrDNd{Nb-` z&o`83Pf@y~-@)wnpWxS*tbe*dfn8qdz9g}%gB%{bPQbi?J3JY{gJjQsgCFI zS(O5BYFra#8?qRYO-Ep28elpr2U3Yd=bF{`KeBqUiU&|JV2lQ|(IG{XD4S72K70WA z6%}afYMU!5b$8ENVe zNrkstb}uf_XHPi(-E*2Be_;Lg3Yi^K9v9epO}}pOQd6Bh!Z%k~Iie^7?b0#-r_T_s zgV3@0@f=Z{F!_AS_J{Ad`hLOq>o3Vv%j%bR2tBkQvneP4@+GN?sjIdzw3l15vl&SO zi@*Lzx9drYl5{#JEgY*K&dDA>CDlE)t)mWcJjQiv%+8?_fisSDG(*UaZqbs?W)Ljd z@tACqql%2pci(gU{Uxf*4lQY|q693WOz&3eT+=iD?boEqn)82uK{}ZZ8@SugMUNjg zOLo^V`s!=upC7UL;RR;Xpe84b9;Yn-{EF)T&)a`CNtRt_y5O_LQLZB*b(R(Y2$IdQ z?!GpEa_--n4`Vj>vWW&E3MiF2L%BX`i}|p&i-?TON`T~)!C1vAPml29TdwuK&->Mv zXusn8cRw-t?XSqfg6r=WxA@OHFl{FB;^t_-)8gmw>jmwi5#w_te2JbfoNR>mBjqmpx#CSJ0T75tR{R@9a+0nMF*&!JjU9V)lY8;1fsTN zS%&W#vdJ06AR~l^&5J9l&%fZ_Zyz%M-M>?JBThf9c>DkPJxm^P?>C>}E?=>Hc}cs8 zJorEU0r&bR`tl)Fv1b0PW%zJJe?7--TB4~KK7GXCM6vkuGtB8@+{Fvblg}x+=IY0q z;llyGRh0M6$jhG1vsZYp*`BXB`R~6WUc91pBg&ztxm;t%C*U`%U%W<59&rC3pR)PW zcQlPftBCJA$gHdQ5F(*nQNO;z&K@)Sa>&L1 z{qLBQrwnIfidl*8dkK;G;XC@`0h5{M_5b^i=xT72!hs9>yz&rwycaF9Qnx1C&3}>T zR@p%hovMzgxYq?9kV8@x4PJyEW>jHvm7wc4%VSDK`c;b=4J1oGysIr!N%s}+z*z0+ z!CDcT7Vm>p**k}CyTfGHN~-OH0*xF_ROsnyhX$!4TfL8*)J9@@&3H&`8(b@g5~7nT zbTUhtG9&h_1Z8NAE@cvWmnuNUkc}ioE;PLWn!hc0m%`A=3^q8wK%$cz3U*{#R=Yx%T#qw0TS{uO+K#h z+YNmi#02FXzVieXAXscJmuOp9+`0v8QvAFDmTV)`)u-D%os>o`u{ro81^563MkL4@>t<|%g zAuxu&sd#;?%RBu1C|cjt#(#%^{lOm~WQ1%`p%6-k&NBH9wjE}W3s$cU670}A(SrJb zPEp@CxyErHlmK2rAd=x(&h>Gxmm~@jNhd@Yd4{zbw^$Q1q4Stb<6VdELb@;^n}N0x zwqk7x2@&40+qQ%@l8s9#6zrn5Z++j&WMqR<@M^u zMj}Qc>s6`<2D#*!JeQCG7tlt$Ep{S-N}zB}D{Xpn9AuIZlHT7zOpKVSL~BpG?gUYG z=Xaa}lzqSq2N)G3!8DVIUQ=ZFZBI5E5!NgEP9o8j_qfI-vfM3Z?>?C1riNJQLo#QK z>3i0H&pg;GUGFaA%2avhkQzUzWd5)ID;$kw{mc6G8)I+x>{MzZOV`fiT4)*CVse99 z)`Z|h!@Hv}se?v0bp642my#YoSmxcS!h^7y_uW=PGVvd}PfE)eias&Ky%=$AW(nJd zs3M_HCS0Qr!A~lrP!tI*`kUJUxAx8($kq@2nJ7M{n22^dlPK%pWgp*-YY9IK@=QY@ zghYkX3T?qPJ>&(&bckQCajnNzhJMwGhiFt0n=M__6CD)ON~+{}iBXY$)riC^GY52E zglt@h;j;~>=rNNa%6IgQA{)wuJ_N93L8w~+XY?LB7@+ZV+a~$#6ru5QW{grLww0Wt zc6I0INd?zi%KlpcPIg#fiww8f;u`Um?TfC_6Lm&bW#R!0@|D_AMXVbr3aPv+gEi1? z8kE*c^?&}4-z>-{lL!C(bC!Sl6ZIxybVhk{h8@|1J6Q=d-q+0$5+$_^oFYFx#SVaRbrc)r9WY+Zi;F{j@=g1)0)E?E7%VDjrP$n&0y z-~B-T=qb}rr_6u<7h*PJ_VpR-AD>H^|A=Yq+77o3665Wbg!~lKU$DH4oc-n#w$I)W zO+i*gHb0&-{N{7A9O}yz{c=h9=*C7(N-W{`ncJw_CD8 z-1Dw&D4u@CaBA5;drj~GPr>Ai2h>0RKvQQ-K6yeu$%z{Ldd2qTTY?=>B{2Qq(Ga zUWf@Vv`hL`AfHtdow^k{Qf4i#sp;yL!DpW{oK|$(ntVJWE5*R6jiz6=n5rbWR!A-5 z9Pd2a=WkH?lEWrJ%sX~B-z*%?{xY2IER@Llme znolj4N}UZ+rl-AFfHHX3k&TDA<(Bg46Eam(Uv9}x&M0O>V(;;rIei1gtYrE93#!k) z#Q2tI6z#J!n)z!1W!$dwj1s z`=_rlzNOhX@Bup;L9=4>;u>8EUawtlBt(jW@??h2<+9hW7u2s8R9}6;LFK{Kj$%hhD6^{djZcLl^ z&4mL6Mk$YP>eLOs*xS{S-*EEz3EoG->WcM?HTL9;Y6jb%Ueb33#r-p~ zfug&I>_aOFcr6N^J(jHX*$OF=4l+LcH_jZs9e z$!Altv89_|({J420&+AqR19=&VEU`iv7yIIMr?lg3t{j`s^~9TPJZ(xR`+y^2JrM( zSJdkU*LyMcN0GTHg#`5o8+B(Q%qN5UW4fzrx=yMrCeP6}q3HbXOZ3F>eqE!q=G1<{ zR(T-_Mk&5msYt)rqN|E*kkPNV2l~Uf!l;9De!s{V=;s?$QISt_y6XkaqS-rwi4kl; zbvAS?cQ%y>vvqA~J4eeK9kN5r}%M1zVQYB0puK)2Wm zJJO2VUa1U-*l~_qtZ3^#nWw-zhstuY+!DO#h{RxI#3daRT1gt8RLCNsmnw` zaXXLPT#*a)s}O(TcXIk`)Nvqw@l54c>W7QId^IR0t3q z&E*O+84)%c$V&1_g|D}C%UUX3nWDd1<3qp>s&szZRj=Y6+ZAsex|D(FmGHAoJOs$> z(Lck3`#PO?0MeQeos-L05!k$1pmR&`PR6>mM-^f|KqLr>1ukq@ z)r%G{?jm80+PnHuDflJLf2DM)5FWSO5nZIRfERKAnn=LpR>&-Qj@2<~iVcLG7)?qG z)ew5Rx)rHVCY?3kcAzyT&lAHt3bklgS;LUeO1k-iz6+ug+*Rz=t|Dbb9TmLj?xPap zRnz1BPS5X>FG;$PHna3iEf+6xva&*Fa)I)$!)<%A*_2{vY0j_lDx*3X;g(y>w8SsB zcpvd~jTuj=PAj_kau-05^ou!pnGw2{aL0g%&dc|lJJuJ2ETM>irH8qzLiE< zCE;GH8f=Bhz_;z5{$NKH+DiA&ttIk!w?WG2vdNT}x>&}faob5MWDKICwk0N0hw=Zh zR)iZ}{gBquyZ*pYocZ5kb@+Q;|2O>^B^}Go-C%JmZ4Nmx@3s?&7|MGi`s;-RWhjWf zC!0+vC#CEZ^@irUL6;TT*wA0EiAoA^JHLq>p6@h5+(;dMm;9#>p))qaR*LR&i^@uY z7A!W{$prc>?b>6k!HxzP?bx1QgU&_Ut0Gz(T+UYuT zO7@VuoF^(Cq3Cw|pq36)>&T}Q@}Z$$*ODq2Ldtpw=)58uXu8W4aYx+n0oOTnUXT@* z7$g@#IxiN5!zDDW)<&w;Z7XrzMq?*K@a?_;O1NE&NoOW4Yi0;B1(`|bN9C2Uq5GQc z#Wl`bhL2D2i#dI-$%;&P?LmMCG49f>dkKb$J_Y8a`Ps|9qOD59L4NMB?7KLd5Vs9# zP~w(LVm2ht9re|gY%-%5TKc&F5+KTZ#zTMjv$pNDS5MA*K4#r0obqw@0B8A>*c znBGfeRyf4R2dm)lK4bRnXOsia{JWpo%zLsjT>_$DrtIvD$*1?ku}jPL#hm=!1F|x* zd45j2Y#4m1H^O^4raGx*hbUo~U}dO-();;Wr!l z7RFya#=Si!WJ7H3@U6emrqjic;&h750k)I+g-o!!t@@uC=+MUoV*c<{L7#=K9Y+(>ChE7{KTu z8*%c@Cs@%Y(r+8gusje!l!QU~)tv5n3pN!KY=tQl z?d4kHyQx_{JID8m>d^zTVI~N&?Il-#c?mWHJLK#i9<%++fbYnW%d0JY?mIJXA=ERz;zA2brcVuGCavy{q-4kG{S8g%%A`l z89aSNKGM=M&9g(AoifCF&eb1(!kYm`-yYjyK=Yd|diH>O|L`evH3Ua}*ctdY|kY(Ln9geqNfBXHpMVR@B*B=|oxa)WN zn9q>nrgz>D3;k+=t9M59yVfKz=SQXXm(P77stbg!C%gZMvtK_UHXHht!ww2D{%eCR z4Ze?rF6>RLdqeZ?=LCh)j`sRW*4Cp7h{{BZ?>BSWRY!5}5ySh2=EY0ejo{k4>$kM4 z!0gvwVzY+pe}91|lHYs8^wSZm@7_>8en9i$XB;`!D17Gxowz^uuqRy*`xLOE-rw0v z-3DcaPG*V%y<6w^uK`sIFvZciCnn?^mSURGygbKDPoZDaE?WjqACnI?n-}N!T1?O} z(`2I=gR>#4AD@#y{Dk3I&g!RUY|gigzxaYI?^*x&N<=QzgmNPI$MXIoh7WQ!&tKDZ z1)3V2PpBSFQOe)+)9kvEg{FOT$>!CD>XXON&gq(rlYe+hfBurIKm1I{hr*0jfo@Zy ziV~|K+>wl{(tL5QlO)BUu;URXH)w0{+ZEkP2JHf_ZouqN^z1LP8~!Rmn|l*sP0ej+ckaD<5pYD=_y4Xs4p9e*%U%c z=v(@2hj$KiPF_{$Jl*gBazTy0qC2Dw-oEaqZi7^C3bYl6aSZVegwlJyUv-dpM8(~e z>!Srp>5Lm^LgE4KL?lKn;VW&8@8nYE>jr!89@P+*KfVT=T)5FP`s5**742M%p6+U$ z4gm_KazeMJYkKn0h)~x!7s;ms{Bnyb2H2v0TkADk9R&* zpmsX!Ku`taPaa@#pcU=a3YAwBvx0uLp_|v3;gD=LfVQSv)F_?F0ZWlOQHe636$F>Y zx5!hZo7B^;dWN4ogl5V1awXNEDkt=vn69&)q39 z@zW*+F!}KQ$^Lh||1Vaa|DKv(@i?_H?NSCOSfTzKehgj3G z`uP$c9C|oqcyB=Wc8RG<+;)ZQQ^!4msYc{OD~G<2C^l#yRdvxfeU7&z8M0P%5|mOD zcXZHXe^VyyX}7EECK6o4)n#(y6Etwj4Og1F14E4n|dN3w0HQjoP z>pj_Eh_TSGH+bje0zS~VO@lTS)uSQZ<$}J|*sIq!JrdLR%=5Dy;R|mPA*xF zQ3~HQM@fW=$*wgbkaR;f8k3DO`qe@=GT~Vh`|%G66LqJPK)tpyFuBCY*^y!CBB!q(9mp9`4B=Y#1a1$w=rU(|vciodYP$FMh*iB301mxVawQoL$RylVYK?1pY>^YAPgud6 z;$()&#Ff6kvF91x`CB$`*8hRIaC>u0=qOu|<#wN*wF^V|#s2MkD$u(mzvxrDG(^mB zgsp5sK50T%ODkR6q$&FMcA4w_hyOc&r~Ti=eI2}9E<@KJlr+KfDR3=&&f|l zXaoJ?itYIlla*pxj+SgPLT8bFxhA-n(1=4!We84CkiI@b!9|bjrK1)@AfKI3OeBew zd_+02Y+t+~7=zXsx*RfkG@^NP0ojD|G#4~y(~3XES}{X+HO-rAq0}i$adv{XF)6sT z?ENkZhI2b-_46gFOh&`_{sXibjTt;V0oOqYbSsgp0pyc0*}$@S`HJRxLpGj}pG+`D z(a)D+4DCCV&53;nCS&;U9{FiS^Y)VZVvQoACnt;^4A}nk3Xc&9M`{u8$qGkRLm~3y z$t3?bm~1}~AS8z&gWoJ^ms_&oL`+=4|EInGf6AYUx6PaiQ&@bx!EN243Vp|XzJdI^ z>wA85LfCdFt3-|$cZOk&$qnu072cN=XG7?{6latoI*7ibyIK&q2|iG{gnC5h1!3!J z>hlY{8Z!Cv306x&WP5c*eO)K(jm4B1#%i=JutUw}#T%SgC@ka8AEQ-I-vs<-CE;R9 z$pv{_CEQ+;eYVYBZg|{L+ZF$mwy2^)DTm)~A?kOFNx`FRnect#;6aOyezgUqaodLK z=_7_`16=0_T@;MtdPRG+B$@%khZV~oUNQXq3uu;d7U{MGs^k~CB!q(U#IkvQfvP5G ztHiV%5L|HIvU%|aJ)AK9l1yCDu)!)VM5wA^s6l@-JoIsGe}`(k+cS@eU~wKh`zhjGs=}KD$5eowrjNm)^O^42NvSCiQT+`J(#dwAt6li0JzQNZU`mIFY zcFPM?Il=-_7gAaF1?9xzR%?_QU`k8ux5SVON7l8V3y3YrJ(BiPE($qV06Iup7OzrSa0cSPxaswTfpY$ zSJd-0WEPW+D28dH-kYV;Z924sKHdrCmkx%;6gk8e--9Wtqqx~rt#t2h47>PJA)_Qt z`dLKwyG$E*IrT)6pqkwInXz1&9KG&Q|v!l@ho=Y6l=F~PwMM`Q!Dr`3dhOSfvc zDdzm}`*VvsaOdll7TK1Qmhf?d;&>SNx@Yj|Crm#-p}Sn*dQDb%>hlfxy%{a4~*3vTGRESL2pRLoj^7ll80C^hlQFJd(rvaxz~ip{HYR8?Yhfh{VAPlwbm zFYuvc_+&~p%IOzd+W8hU8j_DQy7Mbs)8m>BWpc8yv{19@h)-o3slV|vq~yHK`hc6eV?HZl znzQT?e!)560;4D%JY;lM(OuV+4^Pnu{x;db=mC?@AHrsfJsDHKe8%cr_En=rvSW-!52sX9#r%&y z(37L0X8h$-GCW=5@a=|vE5#9Q#7iTE8!fu%zDuNzJNByJ#RrvV5IaIAuT^^!{Q=Rc zbjcYeAP}gTVI15<8xtv^&5g(s{3W`x-ra$l0$S6P(A--*Wkf=cwTreMFiO z8DY=(+poy=Moh%kpsO+Eq@=%^6Hvrx$c95~5$V=zd>bWcx)@T;Mk$fFq1$=5Qdc1x z3dJqn*{IP;r@cAEoP*>{^exVNY*|u_PKf=2)>)>XOxgVPEqXL0G%I{BXAe6Vk&kow z^_=>8yQ_#FMR{WwJUYQGuIaW;TJ$cplXeFY45q4%G^;^yYC#649Z$$cd2)!$Ac)Q- z6wSe07S&B0oz4qlv!T9NNZj_{^_O6+%CiZ6y{2#d2Y}{5vgi|uO<4&yDIeWOxtiv> z#T3Ff-EZzHr@A*0oE|nw0BZWJxa@5PechwAr@LN)9ZKf9mKKC53;OG8*~Di9lwg`$CdO`S=)qXCAzDq$O>0jK@+7CV0 zVL|BIq)THT)4nrusJtYfrUa?|;aSlyS7I_yI}?KXI|4h@-Yu=OT#R8+OXyA05E8gu z?J6S2QV^wXwg45lrooP9RQIR!SC@EaB!2yBOEwu3y(b^#wAWXXY?x)luE7k)R1Z$} z?&Rni+Ih1N9FpNFt!(&cl$9Ci=DpN%fcE2|D^VF#vC@& zzx(~~_<2eH_e=5KVxmjZu@I%J8WlP(B(X0@mqBNm?W;?4HKLrBNB)YKxU;gpNzviZ zg%M<;IHgDt5S%uCb-C~6qo-lYYqJ8@o7c9ll(ycnO(U9O;nQO+T@tE*d zQKNP(@~)Slf}%VS8ijxofx zrM+5#7GqZMP~AHrD-AKqL3Fog#F$LeN{i{)_w|M;qvuOI#b|G8VjaBnw%W zeJz1)C{1xX#9c3OoWE`Pm6>ennS1Y%alU zQt395Ns-2F?D{=T>aK^OOpZ#`@k8{tl34Jr+v}>8%~6?Pf|XK4-{ZH980W2c%tG(U zW@EBJF7KxSo#8iYd=n_{Pob}AE;eLmC-m1Bv};Fs?;h1jDHZsO71`+t#i*b;zeE`e zQIk){=-toPV5$LbbIgyX?~)tvOozz-_kZVu11;K1gxRZF+1~qOzSiKJ4X} z`{J+<=)45Ci}Fqq4yEG6>yrEb{5j2wpV=%tDjh(SQJ@S)DRe$0pAJ%0Pl=o(^yvT% zb~M2ZGNEqlTJBv?|=Ob*+9fMp4mTqjcTvB{_!eRPZI#%_XIuU{(t+L-1cnWuH?bTi0^ue z`!hj8Z3ESbW&OiTBBk&~lm0`QNWb0^V@@{7iCs;q?!ef^8m&M$ zHMmVpzwQ&kChn#HzLV;O9gH!VWBu|i*@;w#RzLoPI(f)w;<@_nis9o2a*@3C`^FID zLYo=-dMSvd7|_L-Vm6fdxexjfjemW9PP7vSCzTwmcf#8J9Mve}>6R<{x~Jc^On>_g zRpnUzJeSRJIHQ^=wl5Z_a)`-ws?K-R7Yn-DGkow6tv77mF3{D0JkzwRH9={N8Bm=L z>DLRCDe(0ciXoFvACe6W7)w}Pa`C$#2(}U~eWy72&6kYM3hK)hQRNgTWeUsMWeYo+ zw`(xqS2g4V>_Ah$Jtx{R)wo0rOR6)$(uMUE^Y5<6PR2ynVe%2>S(V5<0hMLw%%E&W zfBuq--~9;1AW?LZK{=W0LDmLS4lpVbO+j`4Bz*@8R7ZQg!3<_(mD)?CZg+g{z8EW% zRk-bnZsSn|bTOisRAN?)@3|e`fwB9b9OFG0yW{zBV=Yj3qxkOn88PAhT)n27H#a|b zI!8q3gru|Y5Os{c{hH~MG4tR3iH;%n{^e`p)hjN3|0CYy1gAOs$FH!y!Ffxbf=g0a zR{q)bwAWjyG9uM!w^>UeW)CW;B*Cs;(wr{{8ltW^{nbPI*XMM7#rW$}!up!U57)#9 z`Q#LnwbU02bTJ_xRcO_+xm;2`d`MWH(=?FfVvg74h+!=2g zG9@~<`;^B+VxT8gQJfNWSKBvO>Y6V$#+_0B;!X%Ds5MBme|wi4L!OWYmxj!=l; z1NnF?t<=VSH0WN^jfUVnu5J&=5~2hUj57Mg3hy=9ppe1cN8zky874(%x=k(Zh{;ew zRE`tUOrnvvxW73?*QbiGP6#%+Wx3UwfR?DzK)QW`$#cQcH65|*@lLQVCKqRXj1XO) z^g%;RX}~8<(2gI3L}vSKL%(jNrDBf~rgqiJESHK~8vLQ{Wz$I*s`p;|LTdTEuR^%f zEc@`z0q{_D{tuU2)5XQyaGCEljmN2&-btm$W@O_kneEk4@Cm5g(qAt{j#3%?rbT6$ zK;2u184S=!oGB?**ljoXI*?5(F+}tp*R+BkOo2Gc+JmV!#MBLG>DSF6p-pMBafMrL zFvB6SZ-f$YtHUB=)sl_m!rHI4f?z!IDBKxJ^7lUB2-##nY+Ip}d@P;r@B21yTzdaQ zpCA!|_8pOk-~e@y#)V3#qOv3_b7I$mkZGf6Va%nLd3Bw zCias4wP5c!k%Ja37sPw4+TNGt??aFQBoRHWMT(jn2}smm4F%emavi>7n4fxMJTQPWGiK6<>9>T^^| zipWa3r(&}7^11T@I~ZU}gWqg%+ctSFD)Mm!zDwPw6c~~j+;S}*f=Pv2E$KIHia~cb z4n4{y?Q}@h#mw%hQ@`ZdQ)(9zo}$~6?pbBooonsKS|C1#WEZ2vSnr%}Dzit4dLQ>Q zR0<=DK4OQJP*}VdoU7~US1oonBCJ;U-I_!sYVnzXmaa(f-r>q|-!h0VocKn@(G)A+V=)I$P zD_BiAe`%wMC_yu733%xiYoaO1rxkv)#;rT~y^NBd>0*lFb|_^rRY7QLLWqLBBZ5`Z zWef7&F}l40)VJ-PgrbhgNJ_do@*EBu#BSYIHoGA|AHtV3)f;>hFrx|isN6GD^GOb& zqq*E-heK?oj?gaYmo>sVb(gO>|K0a^Q(>%0?XeH{ElbsGR+R$B}6I4!lG9$Dd`Lx28I$>$jgI5|~*SH#r(*dz-Xy+Z-bbz&yezT=M zU!$ub{pws?tVC3nG5X|F2B!n+XV2JPtR!4Ql~kuEm{N-)x~+-6Ae)wQFm@pw!g4gC zN4J&c>i2(PbzWnuOo|OAlghJqC_6X`6i{dzs4o}jd@NOfaO*k7U3^w64%K5L#4!#j z-o!K=zLTT>c%=QhS%Hpsn-0070v$a{7wEE-!%aNW&mO(EHWuG3sb60b2Q%*d%QslR zp}E+iheNWV1|%_S`|=#@7{ZG6^S79LPq_E1r*v=5@hYb}9bgJgj2b&CS^V$cQ+FdC z{L5$f^@iB@G?yDmGb%FhexH^k5~u;y<0;KgKXUQ!&!H49b<9RQ_?J(a|LY$a{N^{r ztLMyLZr&N&ySV22|Lt1}z2f}e{z6?Vj5$Uk$zo>gUF^<}2vRwU7WOXV-oJcC`|261 zw>>7)A9(#;@6SgDsVKbf2s=0L`&QLE%&2!OxZ*p95_P4J zn)X02h!!)bh@mEQ^1JG6AZe!CIo--ro}DC)QBP>=BPxz`3w5p!m7k;e*Q6rq$WW#vAD1kDdPeox7o2@{#`euM&Ab)rf)*Vz9`b39 zTW;`980f{xP^2HVBcF}2HnM&80vAfg-#kXUZoii7(5C&mCSoY2h3M&RhP!yd)sIU? zUp^&VUK6tcw$f~0zk+;-4jnEUG8JjIEjG(gwxT?pq2iW)y(0Qt7{kLHlZ)QmHIC5K z1XVHq@)Pob676M_blrZnX8U@M8B8foO6r#{SYNEkN8==GlxOSv4wW4G5xGEQ;~Dw1 z*jET|U^{Ph(R6O;R}0#CBNq=H(U};iq~m)_)2x0e%KIZ;zt@S@G*=6$;08l}G9#-r z;VxZiOme7O-4dNCy5*eae9PeT&zOC4Mrb?azhQe~3Edug4J zV>^cV4oMAm6fpTD6RXmn|~`2YT%o)b>KJfpk1#I**U_xKv@ zUDNw*1S+C*g)$u>7|N5GaQDX*TG*yOM)ksdYM_G%` z454#L%P4Wf7%TCpO@kR$&r%PUw5cd@K!pv__mjdNA!ZTQ3hqDlI+)F1QY$#ZeNl( zb-^@NGPaslT*OxNsk$uEblaJ4b4-z?@gNoEm?|x{%JJJ8RTR*4c<=A<6Dm|L`uy07 z{_buF)&W2GA1m~W?l$&L4!8eBf9;az4wdI$s=#w% zyVpkv^U-^RVkFe9>}RR_B}Aeq9m!<0^i7A#EV{7xZMQEzWYZBUhc(J@?9HqNXPux`59#l=rT(h=rjkq zUV?_C`hzm*jFRX|y2^=tAUKhjsVJ3GlV!NohL~m8EK3)lUQl|20(!rLT}!t%H~7|} zjd*CHm33OFAl2AiK+&BKO-YxLRe7D~(wQnOp=m^~ ztTeu9q+6WW<;qANhTqm;tYi`-PekY)rYwZ+;oUx*XeVFV5!XzaqqV{{a^c;jLB{xg z;ryY$bq5XN)}z`*W~trzQ6*mdu4uAb_dYZic7bp4u0qQ%&7<4vrQ)5`z@zmyz56c8 zdpx=S-@hfy&zV1agEAGv`}e4xp3uE{!FHKZj$!lsoc#VnijksuyP|sfnCeV3|NYOn zI3yeNxQ)kDBa}%Z_uz@Dq&S_Tg2xPUOtI&&p|nC51>Liw=1sx{Fd22|CY*bIRD?@vt7x7X7cSfjP958O{AE} z;W_SFslBIPuW7H>DLG39EJ~9NOWbOK&nKLI^N8ln9BpCs^D}}TQJtP(OC)Byk2g2j z=mnEEO0M`}j?TrH5MyBV{m*Q#HnO25cDIByc%19dwvbFU5BYSK-2FH8ePft@Ib-#w@2R(ed@{oBFpbGn z6hfIG-h36EFyCWvP)wM8{W+?h(_UZGtUT4jN93i#R0VdNv;4z%^k&M* z=OeEE^*g*7Qr*9g(GAVz94MIm=2O~>=Ujew$?(Y&h7YHJCLd-ZHM^s8VDcPSH*~8V z-9!$0Zgs`x@``Nokm0>SGGPzt7O&}Q#p!Qsi%{M*l{vJ^sxHFyWZPd;VxDChc5 zf29jkM)yj(#hm8tob2IK1|yjN^=FEEPb48N2KrUQ@XIqcKm16&DHuPQQJl>Pi&vcg z?kCi6jI|aOjt&V*P<{DiMt0n(I}TF0)pFKW(XWXu? zoFm_zp9h4b(%`n@Pa5AVaNWT?xc^+KV%g7E)K^PT3b*yx@tD}J@UCF;tEW(3uzuMy z{c6Jc$16;gvwCsP@XJpz&62KF*x`uw`~~{-3A3ja*Z=D~dNpM5aDrc4gQ_rPi5cV! zA5B^R`~&l!*9;##B%h|hxyZhgrD$m`R@m|BK^y5a$oewD=%ur!Vf7POgIkDZ) zEVhKG$ufybx1~X4nRJ&^dTFTVT>f765tR_H)#(g;PqV2pc?uv(lA7ZNqEg_~@2aE5 zPNwAJoan+4^x^jY9B3})=weDf%kj;c(D)<+PDQ8?-U->-@whSiW}N!%vjggG?-aX^ zbtyk1A{FR*dqnR@G>*{}x4sm_U!JEZZ*3>puq3)3-z5#03z*RWg2Qc^bel0Lq1sC| zqLj_owJtqGPYfDujNHyr*D$&unmB7P0}+<*qE)pP-K*QKaa|-&Y+|>r@gd$a)Fev6 z2P;+K5Lc|!N7VohXRdG{G5iA2Kw_|wL(Qnftv9%h!;C~g@75jJY>ZK!cDccOxlP&e z5bXmYDzZ@_h`*f%(0g3nrDU4ZY^nI=v%ko0(+?@9+RU+KBLk|j! zRdg%)J+wK}{yUG#3-ZYr9Xi_i5+4tT4QICY8SWsUs#R1qbsHIoNQDkxy|h&{(D%~DJ;a-ot$lTsz@s>-JTsI_UIy`vt30e zRUhBCN-2}9Br(Z1ej&76o1{e0$8LJcw*k;_EH#vcnX)$nr8vHk4<2Y)BPSk4oer(belbX_%cD zfV^{PD;v5tRy4}>7ViSZ=?OZv5(k}YX%{C$wbDkkud5BNS7d{X7`;$0v;=U3pfQCd zc5aWQ%O;h0UxFdalq5#d)2+J{seXHPl66ukD}f*JeM-)hj;hjU_a5Jg5674&!9CV| znBV*#b`==3PDHAY%==c#iUHdDn{4C1&CT!;J95|;5`zn5(+ODt-o>NKfIe`4y%+z{ z-Yl%q7D8}@R*4UVp1zLcV@tp4B@ZCGEq7<*hVdfQ)s1|8@Uy%RPxU^0uub%*^}0g;Ru1O2j*jD`@%CKGh@ z^mVhBZYh)PNk|GM8uJ+CXIPuwKLy#8C3cX5mr$taJpH;pT#`}|lazk?p|QCqTqTsC zHYUxn4}W%9*JO;vW0Oi+FV%5@>>Z<_5?ICGNOiiga4RjTgTBARd$8*=>?7NgghMmQ z#wUy(P1*eXf;c##9A%P5*ww_4QQSWx(<`q2^oH`uC*-9iD?OX%m)O($xcNCg4lsEq zF4q{zXZIOCy^m$h`o%SNdXK!41EHyM)<6Et;@Mn~UMa;ebbUh6=>0_5nPZIBcPvQn z-h31q?DFwc9On&txCa$>p(`!NLqzWVDn6uw}iR#29ym`B3@{eB=uV2xIG1V}#`th}J z5g*-WaBqa_mt6npXIv~X0kX3hp;?2ju%#!u9F=+eW{b*)6tfX-wGo*~jOZ$(I2*A2 z`8o5SulL5b{lQY{RH5_)ugPaKvXQ2nFX$F6*<^|x73eIZm}E3>7yGJ&(jH$oC_6ys zI>mo)3C$g+#NBfaI_W+eLKhB|xEmE{!3dhNLKz9>*}i#0v||QmqXS!dS1rA9XjkZ5 z<5o-B6wqSK5i%|Yyle54oc{WA%7LQW^eC%o-@b}x`^1v8*HnTj@BD`M}_g_RJJ-S4}X>mPq&@p6RH#C>O|2PcgO= zwC8LncrJIO%}y0NJIG|MNaTwc0=|v-?UMF-fy#!W;|w+3d_lW(48M9x<{P?NW5yZz zXoxK|u6EemP``Q2=6p_w8ighwRwxB#G-deo6t_5M{>PVO_Z~C-=00w|#pIsV56|iQ z4Bu?YPNrzzQ?IrdV;Oz^CFQW=^7lWY%hAyVG=f)TvnjUJHx)TI)+8l3wCe@l%OP4) z*BsslbV{Amwvx`(u?G6sM0RoreCc z`59w?Y{b3aJYxR)zfgVg4Y}!XPLmC6>hx%Wcer(;lqiGNE%U#=X8KRx;@~ijKT|#ZiqV;3_3Rb(RY&X{gU>!;{B%O_5r6%L>mTM+ zPo9#MhOD&ML1g}?pIDvO&q_b4-@Je{CTx*Wboi+-raDzpi7iv^)q zbn6YHZ@*+Pf%zX_(D#mF_JF~|8OB7kZCU?(MN~t|`$MvUW&P7Dx{V_rkI7C(6tjx< z&!CNJY;RoS33CJ=^m&*=PVEl1)n7 zYD>gOd&d?K8@hFe$}}b`v1Ng+6y5cjfF++)Xsb|0;&Z!AyVv7rM=~$}QT|;xV zB5I3{22)ymR}(@;HV{KdOsrdF6tNdwr_w?KF@u6^RM1{svAy1)wLN-HQL5w#g%ioh zssfYAv+`{~XSpQ5<@Yf#EdJ2={dnq4cYAm!qHD=_#L=L~~~r({{AU$&T0MQm%Ltg6>mD^f)*N2y&$Lee&UE8#8qy&<@cZqZ|MlRke!BkocYQ-{VTx`DXR5A$AY4Y8-a z+G0i{OeQIf?Zp+%vV|DProtDFod@seR_&f}Ao?{;{q~Y((cVaHGMV|vLuIOxDzjhA zLP$F8#4T6aeBAu}J5U1qNY@zu%P1dr9lAr`LN;LVV21Mj0ZpdVjdk^SF;;5l1n=on zoAh`ik?x7QRr%0IpF5=L$}Uw?-KY*kFRX2uC-HrKmb7GM5M(Y%kWaYvN0iV(oKRn~ zd-uq6!{(}E_+U)GXeds{xW$654Hzq0$`B913PQY)q)*ocvf+qgVyNF<&~>0OBBjd$ z!5`^6Z_UpbAe&0C(2i)~x3wg^X<>gWcI%TTxSqZi&q-Doh!T!uMk9;~xF%3c2Xq$~ zG+Rj`)JmjnJG_<|4^XkAdAk(j`y|ILYjkC3FPDTUvLQPhp+Zl)*<$jF!Grr~)v$d% z7jAS2M<-Y%{vmTm7c;TTWv)0}+lldWH^#jadX_fwd37dcW5gp7;luu)4_y*($448B z!r_{pkB$oe56|Z)>zmTQNCm-^3?GbXUSD8Nrm)!(vr?o#N!K2lMo_TU?%S^2wx@c0 zN?6V58bvV}piD=%?m*?(EaIc3oaNMSuOJ&Syg#73zNXzoR1Db3i1KVK=Yqv0+l!WL zG6bNQPOw>E`&JmxCi!0CQ8Hlg8e=p*bSPbr6&Z0?wY-G|R2--0g*~|}IO%x#rlWXp zMp0?DuP^CZkIe;fn@=lLkZb{^3$ke;NWb}pfWjDq9uCMWL-Xc>zE{{mxd#IrJWq#C zatxxa&Zk3SyOr~WGItEOc<8Eqj5IDHMHqV|W4UX8R!9a({19hpcLuO19gZ$uqJU89 z@9a`4i=wC9HrR3?>%}{ba)~7OZGRl)9Vc>tyH7c_tbX{BW(%Xo59P)Xqac5JMKLKw zL#GV+ct9~RY@WSgd)*SchQa4wFqpvd&#&+atENm&URm7MQQW_e&A|+Ex~p?GZ#NRu z@(ZT4-J$ip9kHEUAZW7b1e=@W>Q*8TSqX~j9k)Lb-$kb1eoEM0v3`|)AMerSP%vG4 zu46BFInPmb=tv{xJ!UkeI%meM!9Bn6Lvy9MeMFVx`>x(0R zzeO2n=ht$xo{f$O7w@)Cb#4jU4gIE*F%jgj4-u7*Ir-|0`q?YI84B@W(_xAN6#}{( zGyLo!#?4v0STX+mjP}(vdU8fJ)vRBW;-`&HRX90pxmM6>S!L4YFwNsUOOzT-=v(@Y!;~3ry`sIG6UZ4nzK2$Uz6s>R z0z0t#1+u?7XYu`O$cvAw;NFmML{KHCzk1B}+0V4K#+VPtp6-;;*oy}HEr8k-xs)lzt_zj{pj`VH;noMzjg z^oWyRKcad4oXw@Dx_5%2L**l?2Q$L*oW)OXP+36;9)&^coP0LHl;E}-LYGXGPS!|U zLU+BTxPOKU?%*{^dVP6*f}!)9CEfK}V(-b&rKP*xF!}lkVROae=M}?G9#KqlHZR{2 z`v{?Jmgwd&C`TdVLKVdXeM+It8Grha zVw@d?aUJyEN`dd9kgP7}g8g%j5Cn1i*uBz1f8ohh7TW5oQ>$-K4X0m7=Lz;{$c^SCA3?jGvsF{m|O}~Cf5h)Ly|AX zZp-@Tw|MT7pTva1H1G1m?;00ApsOKvnC}g^?~;%rzNv{`-GLvD??%JNAd=y7AQCvG ziLNH>G|;!HU%V$yeP7{ppiAsf;?F}=x8|A1x6Q&t$8lMO8O#W`d{ zicu*JR+C|DCZ?6vr(3orn+_=^8S9^3vz@o#JIW_dC=1Wx`!_@*2OX_7)<_%LR23>l ziU(8r`30-jD}mV?EA8bN?wHIGZL*}Dj_-&L4`%fsDR_e+CO?>`e7D7I4p8-*UtA<~ zF#hT>aeK|?yh#;WkIpLLS;yo|rKjK2up3afzJ%x%Y8Z^6M`N zmv5*yao@_>>GplSg>uN`i-%CxwAV{q=ZM~rjRt5VI$t69^@%ro^8!OOXq%%Gw8dcV2tCo z_|e=pQW5JG2h7y|Ky0jx?WP5l3HmL5Ow}-TX2OnS6vxnlzDvSIYuBWUI< zpRXw&KcpN$eYs2|j}2XCs2<*@8pHbeOPs4X`SuCTn-{Fk8;Z#QoRjXO%`qwx$e4Wj zlrX=b?_xsx)%eC!K7N1-Th=ejHxOk8%QeN&fgj$4=4EbhW2`yqM!r5 z3D`l7+e()~n_kWj)qs9|N!J^y*$jLmX{OH6u9o3cxF=ivaYd%A53EHhg4@qLdSP02Ek_l9zo(_L=BmS`it zmof#RYl$|e91Y2)BVv8U>UBeTHYT4m5~JMZhh+jt#nTHa76p&itPSl{QNDBlF<{1d|bb{z)a2bZzvu=BBP<(D$FRC)^=tH&4%r(D|9s`n~u@=r2E`?XL3xYz*vcee0dEv zKhpJa!$gSIM>@;9TKfh&8bD0pBkE=)Beb;`B5%_I6oSLi7NZrq9AE}Xy5Pgn0w5Yx zzu6>{-n*;5_bnk9vZ6RL`5YDswf{T`F-MB3j0$wd@bNvYiC_y9AytS3HRRfkYj1at=7dQFTOwusbkuIcLzT~%a-!Pg!;9pcwD#n~BI1>4u>^tH!U z8KLuOvkrvdFoP4u4~MLui5}2oH!B^=7_z|#Gsu&{Q*Lqf+baTs$g#r-S!ol7Pru9Z zzOhj#d|eB6C%5}ULv)=~Zgnn|=jd-Zcz55kHqs7r>lOW`miW`%L<n-SvY&K1hk{vdPgt0mtu7cwbK^>wnI;|$8=vt*D{v2)b zn-%TlQZ{B|Fd6il4m%#BT!R@-v4czkUY1vE->k5M@;#M<_vrM3M-@XxPwu0`n#B*V z2$X0emmIB*(-HpzQQ=Wqz42(is9&sb-BFGG=+`GXa_1-?+-Gn$6zNuQQUyyh`R)qz z@efk_=-s^wUpcz#Ij+?drzhA-i&5qs-RHZ{OIuC1SQ3LpX-{bT1A*X!?b7f8^O}`T z#b%w>j0~J7fA|0sYqpnb>}Zq>zm8D1BGbtYZqrgeJR{T#w&xoZ9y>XqdT@sBSFB&2 zgPkyXGNL)ZB&Y&HC*d?GR8fkwYr91iBZ|{8>=3B8tEJZ9*9*Cj?C_8~GjvvBvOvG8 zv7;HqG!rA0Q-o$oUuy=BPoZ0~eY+)_P3SLI6c1)>U%n)N@R*D(t5+-X$rL*-iOoi& zE`@j`e5Z(L>{w#J?Px-IR?%P2h4r0?MY{u=x^c(!`*4hRpTC$g)otrxYAvaE_O}!< zlUn*pinEx(08`p`Byk_CKpRDTr}Q=aum{HBp}7a7Ir2}&LIP_+v!B1xy#3)U~Mz!sQHV!3aN-D5n8>OL-p zVdV^_ZlZ9d{^gUg_dN#wod@oH2;2Az>s^cz(QSe-$UoGxRPXP6#CSXpZ@peAqT8d6 zk0cy+#OXgirTO_e!H((Y=frHx=|6l%SiR-q_djDFJmvIPPto-%-NF^?XXlK5^Celg zVmsHA4~AruN?41FOO`*p!3<|)!-CNEWV0bQ*9nlHbd$!?U%h4V(>Y|ty9emBz-XIc zj5$JXaYH*8gC!pg(b?|Sd*n3NhR|*3mUT)nQa9VgeMeLp9TjFU7F3%Lw}j{tH{GvR z_@g*$sUS#-P}G5_4tTIT+ZjsQOCiY&LMM7{T@0Cg`IsUPwDTI*c`=>^h1+cCU1aj* zR}^K-)gOMq&K@)U^pt+Nq_3fRIKf@biGv~5wk-biimvU@MMXZy33Vi!miW5Hlwpjp^iDRLJupAqniMH&d$mEC0r}7-H@hbKMs(t)L?1^czoS7--*dC1S=H#Q zOcaYi42FC>7KEY(w^`F~y|l)I$8{~C?;#s9dVCMv_h1yw;*xglC{NEQM~3>%C2D$) z@qNqUPZ#9(MufVPR$JGRpPo=Ze~x|hgsODZS01Gr+O48Gt;9sA3dD1;bF+(?%+971 z)11&b2?m+5)m`Jm11yQ7XumegxmE+)Ec-vQ{CHG@w-Vfx7|9h{Hh{oIUZzQJ&oj$CL&kEo52 zi#JMiruCNS4W=5%1@5j>#VuXnE*d%X9nl*i$yl4ZXg3Xux1Q(iL&=dz7II9k>DEhp zC-SGzc4X5TxE1YIGkkbLXgeVYY-@BrA{!XG*DoLx0y%+OH6yk)em#3 z*%{fSB)To3Qz+#LU5l%Gsq~$UaGND6pD_LQ5pMC8>%Y837kN5BYm80i+K(FB@9u3% zX}oKRT4Rm9xxd{pcY=##!!dSX-VL7go_4#KK*}YiN zp09Dunh-PT6j()QYqsYLMqhnK*t})_(~7~_J?tRiK?hR?k55o;%l6Hh;&jaV+0SgQ zJ5+?(Z@(qeYp(wMmTWjUy437srG{)Y#AGVrcrCtJ)2)*<%ZqPE=Qpt}H=dK$`0W;Z z@{qHC{G7NrXY=x!n5aDUVoNrekY%23)zWWT%ydRI8zys|OP(%;t*ZSu6kQ;j49Um2 zq!DHr{pB03|N0s|7zrP}bLiYAzPd?1nut!u^1ZGwtuNVVfKJ_#+xzqT$Ett_Lf1-h z(&%@wtK1>UxHVw4tpuUm_B&B`N(|-h3bcB+5`IW!j{A%2UczAwVcXEIwz~@SZx^U+ zQl6GHmvf>PCucS+>E~C}^BPm^7_VN$?K-ENO(6QDyWB!v5muK3QwrATYAv@-o1=0? zXnL~g1Z`ylQ`X??R#=3ig0QVc3uNxrL*Gma`@qFwN49up2Ne{S#I5%Dx_c+dPUkr) z6Enx|mV4vNis@#vi-X>6c0ORoV{8H4)mnt+zhur*a&S|5NqIVkzNWcaW2R%-L&C1r zDlzKX8e-SbT+NACY+0eS#Euiiv=p_aIGGZf4I$)|r$aeF29NgvWi`<`y6Y|3bVPS` zjUG;@P6u??bDHZ7*=$BW6f6}+%Z+t9!B~HYCq?vIC{4e-qPbjQh9jYTELRc`Q&s3( z(=V5}#$$&A6du2AQF)#=pzux)F!sIZs*FBjJ{w|igihj%-?Kv;^$26qK!-h(S+O%_ z97l$;52MiKfbwh#-G=&ng*}-N)=MHeT1R}>OH^=?$>N{}6eCSH-(qJIRB))=(!9RF zj%VbP9N&78YP21`?jg&Cr`flOEuOS-nJ}~6dPP(P`E(!w0PTi;m0a?BqMS~PatiU$ zT8IWQqKg7;!PUK_iIs}x%@utoF8*vZ#*Q-4sHSwn*fq3^hWvDjn_uIcdOw{gMpTxQ zjWQV@I!BpZH0u#!P9=lN-x>h1Ya_=)qSb%8wmC+0mQ$Qe&~!AHOT3o=qI@>N4zwhl zsXGn1oL7;)XCe3N|D|@c08t-RQTnKHtum31+s@RpY7C3GwH zV(89>Q@K>O4Xy@TK)+a_2ScKF(o1k2-%E&<$~3-iheo9=kVmf*F zKR;*wyFU@D`&5&R>d`69o9A5p^<0oiyRZQ7P{ok(lSk;jC8iWAJuGNmy~5mo!sLNv z{>N96n{J0x_lLx~#SZ15VMYbTY)JEVj*pt*lT(_PKZ`k|sE+m}edFL@jJu|{@3@b_?dTRM2KVT_L(@}z@i~KuAUkbDzFpHTYH7>69-S3OEz_h|Z5v$Ir_Hy=%pP#>A3vpk@tpcv zIwgLy6f=sG4#hPd>ib%h1(4`#crHhhGwW*?S$}uX| zZ09wzUw@6RuUJ06rmI`*a6mbkl1&E!v=2$&xp>RPU#>a(e|*dOPyf!gHWK}P$3`F8 z7Cn8yyZ3!pwFwUx{>F-xN`_A92HhRm&iexgKjQV#JM{2`vw!@G z+|POQuiw$On%MSCfBiL+MD7GV27C;8k#lzs@@+W^pUyn-S8D|;va)YsT`e` zpd+TxY+k-b4Ne)I4bh_^s$WoFI)+b9Xr||KTSbIT}qiostd27#I4Q(E0aG5Y)~#!o7?Kb+&0L1zv(Z!n`7%69l>OTX&rHx1d@JqD*E ze6vmob~)L21TIjV4sh!&{WefNnbMxW|S)RG?i)*z@qx z`jP_B)Ugnrh-(6~fB2fo!y)ZrOTTsKvLI|0bjvL|&(i@ZL+2IQNU{3SUh`)R}=34^H*rUrCIi5WIRFX&fJx-70EJ9)_DY034! z{e@@-(h=J|r_f9BX45eE=38cu3zpx#1QhLhLr`)V&C4;lzy1|@STg_V z8rOA_1#)AZ4?sb2GEQ_1?ncJ(u5tRNQ7;m@TF{yMLds3#Eq7M8BNQg!} zik>_yK1aH&5N>Ls^-dEloN0_A`hcklbY_VC4)NxbyHum{Oxm7KbZapLY*k@OOTXO` zx(KdAm8C>LZ|YR>j`+@zO@|O1!AU#GR3&~}S^Jzuw?o5JN)KK~Z4K zjL^BnT#gC#mqJQhklXp7z}F%_(ME32yKsWNfh5SE+3^*32jS@Y6p5b3fIc91VhHJm zyL->LuTb4gUyO$!o!dT@5YR=A9aMzA#rF|Y7<|(bx`-X-a#7S4WfY<93BBKUIP73R z?CSmEtqU>0_VbO%fO0M0l~z(MLZ$D^-NZ2}Qm{+hn=;h?d8SHXX2GR)l$Mk;VM@0$ z7xtBBg-hSFe5VDm_b96fU5{^^{QF^otR-_)r?1=<#vQ7Pe0o0@2{eXQ-yyc&9! zxW-{`!nxti*kOAg4@RC2O)SCA7r1oy-9hQ8pvC?V-A*4aO>5-J}Yx7$##pT<(-H(z#QzzTy4; z5+Rjn`@ve(KDkVZk!Odx!})zhI^{R*KZ8=@i_w|Jt=GbjuS#rg2+pNvm#SvkVuvNM zljK*O8;M|#0aKO4R@%bv(gE&RUp_`6eB&S02hDjmFM;tE29fvdRd+i4_Nj4qMJpff zDT5U+i|r(*52&oSNsb@*^v zN_qy0eN66MgGJJ!1e`MRa3 zEX{I_$_s2(kd?bzSs=!Y{A@~CUD2*Rc08fHKP4YYdrrO=jq)4LfA<&K-V$5Kz5n@- zuztS4b{kI=6<%r;FR5s!C*Pl|(44dcI zsKJQ5QY`=a93KYQyk-6BEoSzR$&(rNPtWN4l9PXWioZIicSG`VmRc>E&~=115ZspL z{0iqi+4zjn!zrO&vAtT+ZW~Ndl4TjeJ4`;3V25rcvLRnkoSl#jBF)7W?RCrKAAd!r zt~vj==jh=86T$lqQ=U-GCg`lExt`-&arS4EnMA2Zg|8F#YIl%Hnp%|?DA&_&8YaK` zhUt?rn`c*0mXu@5_Qf@^C>WfLFjf|uY+N$`(|4@ib{OB2J$b^}H;>r-ns(hW`Q}#)r;f}2^#kMu$_|+Q>M?$`CZCPizIevw+%b534_jG6=TKQr zF)3sr^cybz^*ef1>?tezF&$)M$sc~g{r~nQ;rtnI|Lq52HV|{kUCw*;o{MYxcRI^3 z>gXaRxv#i%QHZJg@?TMbK71}uP$l>O+qV>%BWQzL*7U8%Z&$dwmsXuFnSAjnY_I69 z8&oyK4(tu2=I%hNvW#+85xRzMUK4_RhI~?C%EbPDr@DG1ON*ZFx)xrtK6*ClR;6U; z?{E$6d``rOH{dwj@a%Mq+gM81QvN{@@et|F_Se z-V%C8KcCZFwWwl%9T-fO3rBjh0#%`OLyUP!!F9sg?gRPB5L;?YnX&lpd*(mSu_;D< ze~3^@Sn$W`B6rDrZs?i=zL!XAn-|iqHb(T%yob)R-`^zA>Y#sCAHBC}tLfJZx@G%r zWqB``Q?!eklmGD#sP!u@e^^out0U9)9b|)#`ph>wvBwo?-?UVpe9pb!KE-O!gPw2lA79Og^1a-XAdk-+!T5=h&jA zzTPsp{|H-HLh#tUM8$^Ya)q5v*uHu}`N@}zrk3^F71iShsQN8e-(NHS{By#3Nr49G{N`Kk{pJy?KmD1@znqf|1_UC-u%ewW1RvSn8e|&=~i(Lg;O;lz?B%W-(VW)Xh`(mN!gH$BoL1koB zMrb=peHs-~5otq07b#Tq60Ldk@U%AR17@kZ=fD^Nd=m(5kFpsmh`u)@4U`>~;Cfu^ zQe3Rwho&6d@Vk_!oB0F(xf;qqOtpEX?vnZ(RT9)u5Xi1072-YxY=7@jH&{mmugE4t zVfe1Z0HBPt?2l8=M943~t)8r=^6BXrpk;Eo4SMYwJ*D zhE_|X_wU)7aLl?fAG-@Bs zt`qy2AWq=uBYIGvttQlcT6{p|xh%{@hTk+qB_=JYa62#-Tje5ya}M8hgkzdO>a@f( znM|39k)%yk5TpMCvq;@RuuAhrC9=UUrLzCWXELC%RW65Bt?_k>?>x$;DsPIc-K{TD zSx%ADx4y!-?`jmpw!>{(NtuiaGf2AG_@U1v7eU|kcalqI$>bk{2=3W=-V zRmhLgYr6-ikWhrQF20*mw;O{;^X8bnzgv%Y2h1p(b6XXtAij;zB*QjJx_ZtDfy5@t zPe|?4@IBmPE`=w7T-C{s5%_V)L}o3 z9zxeh2UIHw|Ju<+6ojTDMol)%r90$;q;16x?;~1S(LyICc}$%?4fwu8mzBg}Z);RJ zz-AIFFPvtfdBtSv3$7z{QSiGu9>xR;lFV**;yz+&E>KQB zF7fMzzD{&0m9U%65ivq&QVOMvgt>&|BT)y+6w08E4g5#df29?w$gyR1&>jaN|3nZT zd((-RN~QUhves{p+nCe`H_Xw;=bM%@} zr0ClWY;qp%x3_p1yE$FCF+Oa)y#}64k z8j(#awm!I~<+I?)AIc&Bw1-QcdpWb9@sIDMBb>aOiwUaWW!$x6|m$CV;}^ntnN_Tf4o! zJ9?jDkt67e)8BqUSwg$6sb5{lqHU7iEe4dWu!B;FB9{xCceq}2`r9vvt1I;60df77 zKF%0Sd#?WdB|0~Fl{0v7PeKbqPdi`WI?1}9{KK~l%AU3<$jh4Rzs{*1of1|H`fW!H z8TrW&LWj;OVr&Raz*HkpEulAP)6=dT!%v=IRn7YO8~Qe2^Mb)Ak8q1~mM^a`gG#jQ zVHXMQgoF?Sp@rdBpU}U3P8{B2_UVk}cR%8(7=8MPxVm8R(+j*7x46l&WNy71NU(FW zE0BuMuCUrV%14hGo{iW%{|To?4DSut{`3;c6K3C>P(OQvo}SUZc~09Z@**Sj9y^{f z{OkeRFWA1?kl%Yip4D9a@q0R-V|0qO)|%i0b}*I7xR-Ro7#c!q)9sNPq;Q;NLi;$QzvEKaHJoluNR{B}*d+%S0Z zgnX!J=MAPT$Wm;0*j#b(`yUC}0JFPz0)E>u{`yO1U!Bn}x47DqjVr?XlB+*H!|UQk zxAL7{@Lf8|_r-gwvbx7Ym2x&LhLbXQkavY_A&XU3HZnFmobH+Q%r5n0tYUNRS!y1Nlokt65q{q4VF z!29IuahS?8`Ti^NkqQQ$?ICqLT;Fa!_fa^+9c{Dijd5Fvm=6;&Z+%d2>?RC%;>h

<0r5ZtnVa_z0ATsvrt%Z0mimb@h7zlJ}>`-8X{Tzh2OHpZ6bA8Du>{ z66jEaL#E$7MfoQD`_^xuB+h&4_g9!okep0N#tGe`3<-3urn#QurKVejf6Jbn66G49 zG|6;8d-j6as|^SL@;%yCI8WbQ{TZK3QD#X~dh*j_T(_n^pNEEFR8X9rpd*Nf8Qz+p z$6l{c>4@Ul5q9>D%Rj#ctx?4xhrc^!{>Q&yd`@Wi-}#1K4h2k7Kxav-yW_T3wnzwA2De^?;YNXHt}w!3z-P&zO> zTNi>2#t>Ahg};lLOPvvLHhF>jLM&478O045;RK7z9SVP zc7@bo{Bl?H-Wz_rGg#wq13vmFYv&}{@f1Zzv)tgFLPdRKxD6c|K@?(qeM?t0I2$^+ z$4y6;MG<2;2Q~*dQb)z+oqZ{qk)<_@~QaG#$7#-i1P>hIUMYjx{ zUa0~-rEB_bd|#y8@O0fy3+nHX`vVHk?j)!ov_PZd81K5iGtq0CR7!r31yrF4xIr%n z`u3g(qDKWf@*%oh#l*uT6fmwoEpJ~}A9Nz+9`)7V8AXNPia>&}yNK0Wr(PEbIJPsy z2V+DR3{$@EAP65GY^5yK)e0HqK{nMp{GBnVqCjBiRuwYM&_xo8!?vcHeHhp3j3XM4 z$R-75wZycN^l*f)H+_7(`nxCj2cM&l;N?V;66cEgVhK75jg0@S-+#Ypn|M^9^gfyQ zp7z>96b|u`>+v5_H^fIo;m%<;%{>LxCv;upjTtL63+3ML*hbvmIoybw&>Fw(Oi6|C zHb~2KN`5p!y1o7+3?-ER@@`>>hr zbtZSOt^b>BH+Qv@!N{JZvz@Bg&h1#nu4`~ACLIs(n+;xUeK9?ET@i4dUZRq|D{U|S4Y*sAH{!Y$S1viIBEXj{d7W~qHYhO;*v^?y)X91`I8NGk8c5DvfB zX@B_IuolvHW}VwcKdZ2od3VbY2=10m=)rw++w5@m;b+=8M4XULMhM^SBCUh=U1IAd z5RJS*<{^#MtTs60j*KOw+)at33iqLiQ=(CZTd(PAM|w0yY^M^6K%5X7;ajX#L|KYA zHC?@xScWuZYaH>Yz*QSeEBZ;OM~??c-%wsGgS;ooDGmyn>lsdj&+*=e+Hd2{w_k`R zJsi+oFHoZ)(l(UW714A=6nWZt1JZ;^yiSPH6d^jgvL!wkH|Vd zA0HoZZK4lf3N@MyDS-6*mfD8i1S*?UJ`~V#jM=Pd79lcRNOi*$C#VdZ>H2*g+;&YO z)Cww+_e^X0^JQg=JoAo!`;?EyOEa}#)dSZfP>G_MUDK>Ew3oAHVi)hobl%ec;_+K@45QROT_S$!|$JAuHRG5S_V&#S-*OTnmj^v zGa5Ufn84<3MLf-Ln-$JSs5I@(QG#x@q+7ORpFJiSD4NoQgU{6*(^~Xk%;4EE!faUn z`kr>}C_aCLqNaSmK;|PPB~2|DfAs~CUvT}`pJ|$$`XVXog(uPsTDA!8McGi{5^4;Va3nE&ZVS{wDAUrm(7U@U5M zKz2L`3!$+$TD>TY_HLVnLowD>Eh0+swosti!8n-(u@+SKG7U#E@wQWP4c0b=o;Oao7vE>@G>2O_x933$I`Z4vJ zS8UFgs5GT3TZ%6}gUyW9n>mATzaoiiuK)TDo#!Oe1ELHzZ|3Ark0@WhMihs{nL>|q zx~mH|=S$-8A@L~N;poEq5D4i)jIZk(AW4qwto*&SXr!c|!gA4f^B>vYD~DuF+az+9n*_(qMcRI-~gP2o-G$Ly5{FsyA<0 zzL^JE8-0_;??q*OpzHBFji@&r*7hdiZMo1FsQzOIt2;%8w>|nYQMWDQVltl?~qwl@a!yvD4n;BRC{wppnkiy?TsoU?0?v$Q>$6Yq7iow@kF?>9v zUA36ioNl>BrekF6X)mv6jb`-aW9nCLh)y5j*H@JDmh9k=Xq3>+uQ81#8Y;SZMSL(t z;1JTWd3QqGy3)` zrr$oHdH0gp-`+x;?w$h~MMw|MdZN)7UFe~R z`qddu#z-aax$neBaXMQqS#a2=s3>TY?j>hoCg!0(B#_r_;Y*TbxulJEsW1AWgWh6z4Z8tQlmh||D;$(=oj&63v>g^@uV+N;3 zh;m6?8uG^nRBz7^<3nUKr}G8*P*A?Fhz2^q#J%pjw}5n*vc$HM^kjmPj;?Hje!1^5Zex?2>xb;+;gNddC_@CMea?)+TJA36$^7Xgkg5*$H;Fz!;6z9yJ^yY)yH& z0ujCw7002o+P2tEG5PK(-T4_V9y5GY&@NWAix8t4x*i&xNK9RYxNtzlrg-p{))1lT#wyvVJu~O{PTJ(XLu#+>hO= zrYDR@Y}n&TmcPEk67{mZ2)(_|dh{SC9wxg(p5Goq@9C~eEiuat zRzyURrF=gJ9o_SAe9CeE?_ckoMW#9V@dVLsSiQc)=`;WuKB-v#tu1JeGlJsD32_z{ zNM{VzxZA#j-J1H5DDOM#%6-@0{Lh^ZB_W*+Z)oQmtlR6Lh>t8v_e{n@hjV{2bKlQ| z?o^mEx}M%t_lc(#k!GZm0o`ndX#>5*R1Gps5!Pawj`YznS~jfS&QVE%PErIGQ=8CS zSZ;_$2P9dLPjzL3a~_=(=v3{6O@tIxp*_wtcq@8cwhnZZ0K*U5@@*kz9YR>Ts=<2| zrhp;hE>yqsPTY7&wCY8Q(r-}!XTKByjGK4TG7szdY*HF7Z zl~p*?>`A{q*5(c=c&2HHkB%8VJ)*mK$KusBdN@Y*TwQC;Zq4&|_1Sxch!DMASA6<< z;ZbBq6O_6+=$o<(VQ7F3*LuPF?G;|? zTZlgZ*IM$=9uY;B<*)CtUXUIgl1>MRZq54Ln)GBub2cM7IwqSc+S!J#bRZluO^Jpn z5`n8$tX`jEh(aS!Z6|vju64*b=ydNUN!}E09YXp0%nD-Qhf< zU96D#07*wz8=`zjJV>zh2G?m+Y-m;;@n}fM2zNBg4Js?3-O#pzbTmRGApp&p7SmW% zIwU_%X|EQDd_*!-l<&@2y<3t!I$`kS0K1%1o?T;6eF%x)p&gwMVO3I#2iC2vZ%u-9 zVdCq=Z8_~jazODwr)2+t=Kr43;2z|n+t;l36XITTj+D5j3HcjRZadI&6c1B;>ySl( zP&R1NjNf&lgieuJf^VxZR!5^EiD_y~ZOK1-Onx+=et(YlG5OPjK5lZ=!@*Tpm<~ev zU3J+IA5M_8c$tzNkFm=OmM<@nX%R&6@-|3MJn*LPZq3e^aKg3@nGT4GcrV1jf4I5r zZ*cc?p#7c2Kq_dLE9hw)Dl1UA>M?$IfdH0nwZ@q~Y0DcN0@Vj0c<1^NQ^DY~G3~{I z_-I0Nc}}ymh(12sZfex@fc$uhD=ScnDDGIkye514nD*Tn(a95JJEt=-O0{$wgNj8k zH|(%8ZYK-Sqaoem3OSgPALMLazoRWXR2-qwA?Y+`^~+0SHYJ^8*s4SiC*V3n5+nm{ z1yQ1CR~6Av)6FW9<3m)`vi$iRSxiaCNr;eM&DgxYLLWV5c#^RE@dZ{5nSA*e+76OV@o?*f-ImaJdBqgl6M)GzLlaNzMIOul|Z^ZqUM z%3`aE)v?Yty8c}#H}v3c>1&T67TMmL{> zQrOBc`0^RDSz$#=dXyuCqFY?Cd~t?M56BM3Jr~vCni6LmuJeJ(J4k}DX8RdA-^ZKp zGmH15ss%FEbc-3Ace8K^`7OMv-_RoV)*!P1#p45nbEsIbe)*QR;Z7I&KdlA5(_T9V zuIb30JYsM<>am4>Ph#ai(B6rMI?y{KvA<*b5;q0(Ei#D5wtnl$xupZXpI3U%|BBwQ zm?*l%oOa#ZPVM~Qt@k|TI737-XrJ4P_IiaFjwnvXwAa@-BZ;SzklP|0DvR0t`WBZI zMB341C<3<`nwB6*0XZA z&#({rY}=HWRn;50qQG^9u>X{6y0Q&8&$dNRj~G2a#y1;G)8ULlDTS?9)bo<;(Ft~b zg^Pz|2YDZ3tm)=6>Z=kpnV@5d!0z+3La_8lUfFn&5<`SV+nN6*mGp|Xhj-Fx)GF^ZDq%jUQGy?q2PiN_7=T zXHq`s2l!C(@gXMF+wg2elLEF=)(1P#_pGbVBlMoAVY?Q)P)Ermrn|nRJewins4t+U z93|rd;RQm)2<`E<-GkZ(e2~-{Z!6k$g%DA2NxF`9(-4m)6?#R5QCGe*BbTsG0xpD_sXVjS(UyE)><(HF|h}RvwQ9 zVuXk2Xn+=;dQl>LpspknMfGk;^7xc=;FBe#YoDW&W3+ zu+f<5x6hE(lEv8tDjy=64$^`sGSst>gr-!4&Wn&nRU49nA-*kHzq_Vu!xTV9(auB^ zZuX$PbR-=7?g`~DKeL`2Foxob=L`-r%Ck#68N#nAXC2w$2(w;byNKcEC%AHr^$I1x zxfa`)kbV{CLVNxVfn@({SXU$jiV{T!+bmS=UC ztTln{9yHep`O$!GvBJxgsEBs*lQ8uZI8$TFw*QzTqCwFYzMih!&}~{o9O2d_Vl-j$ zQfAJ;7$TR!v>(CtfAc6Iv8}`0wL!V$;4A5CfqYGrB5BI9Q zJ~%3tn5v|!>>ZZ1|M-ANNU(;ksfmvsGdxaM{Ph={Ol}!rgK=8iv#o{(oHbofSFmf8BR}EnVFba{pvkBGPGuCHIME{z^Hv6KdUbx0F z`0^>mGzs1+rLc8PGg~2KiqH;MmsIl&dN^hHXo3)i= z^;_zVBs&^}L${Uq-b^o?Ko*Vap=jzSutg zHH_Chwk*R5yK|(cheWxeI=jY;7^ynENYRm?I=g^$KyfmlK7UWwMQ9xb*?{(aa-^hN zj;RFZ@jEkqb~ONnp=@el5@*@P zX?LqNG7E)^T`y=CH8M@GCLjszx+a*$idchwLogHs}SR!osPhI1deu7hmO0n z*s4Vp1N0z4cp1#7-e6mg(i$XzJASo74Tp4#8G3qvrlBc8>7b8RS%lrJ0Zn``4B;%s zBVV}9G~YpRO{(e#jXq$%HqqEkvoS6lK&C!~eO`A{x4=a-mHq9Tj85&5GL&1?x$ zai7&fWu>=Nq(VZ)v!j%lm7GWO-#1CGh+3iB6N}N@JzmI0vFeK zRF;Jx2h(8IC8jm#;gtL^rGCF4IXT2F=d^X#hhcyo57Ai&^{`bLqFbft=`SHfA{yl2 zTD);P4Xn2onGJ}?1=zNS*6$F(!7SSU8@+x{>Il(Ql;>gN_`40?e?SAhH4%nL_yt|* z$WIQ52a@vqnr7ABq?7*VHK1>;zoxFy!!g;>AZ)O=I?A^@AL2f8&quD`6$po4hpt+uhM7|8l_e=D6 zitr7tX%TT6VwDevP%Z;qAZppXyGCU>GD=9s3HA9!FeJ;c*^0;`qZBj0qN$;Ha)fW% zzUXUMzrKXHAU_(=&Sx}hi;@DFq^LX&_{^rkA$lTHz*Bka5K%Z-*}5g3PDzgnY}MiF z4dwY9l?_p;pj)+Mrw4RbSE%s>VN1&MHOcWYT6e+I5l3MPlH?@Q5yIPD=#EtS=J45% zoe|(oLv?nIMc-C0bcXcw7^MuGejQSg{?8#Z3VI`xL!}ui`}p1_R0vt}F5Dx(8SmO3 z{G4sER-m-rkwiQVqNXNN1=o1(Y7vN+N9hwoQM4zf*fxfRZqW`ifllBG7dFF z+hCR}Ix9&}#WUtCgOF8ex3ppu+u7yt??(z`>8vj#5|cD<%q zlsz&nOoWgz`RM^t*k0~o_WTe5qi5GEn)y21_c|pzDrhdRk)tu)`88^KK$3|avQa3F zU9H%>zkqm5aWbJ>%n^BxuN#~YxN3uKJn7+>_;8G!&nVwtA&QU~++HqFgB;&B!92bV zCy_Epe&ak4o@N{3qhsP!&|F^iQ-eN`#ow&&I*t2!WUo%@I{q`brQSJY8a{ihy?34b zU|sF+Um?OY;fA%hCkfg9d=z1q{dce{prsrolL95v#D4fWvQ2S^e}AO`}PR43(wC-B46;!%w2 zOuvDBc%r%W??QZd^4SXArJ-FcFpVM}jnKKg?Gp9=0o~5+jaEh)+m5?RSRs_>t#>INII&k3OyPS zr_fxNh^QYu`VO;M<6ML;GHku3dcPof`WfSA6Uvuw=_)}q%)@9-v~<0+p_|P~pMHjP zYpN@UN-gbt1IdWVw~wH$@NGwVz6!`V-{LxnN(1UiW*Nyrj$5y3H;(kMpuJk+yu((( zj8dJyC;Q?{vdmCkT70*lE+zTN5Vv08Wia?i-{AUSiok94tbcvQ>g^@z^RJkkCS3jN z-*7toZPUWR@4losOsMB2rZ$-M8b^xK4b~=%zdWXXdxbR(U1=CRe?oqoF#FR_v|UCN zb=WQ@Djc@PkJQ_gx_!`bZ-SI5$)pIbUOL)d+T$HW!x8Z)#%xwJ zvl7!*$b7=!bVPTx>ba~93*?@!a|19#G{DrdWE$itui?p;=7u5-VjZPM1=+~=;jw(|M?X@%6cNp{tg)8uXlJX z{~IdYtp?F_=-~mA=chDpU(-}Dc>0KRDw+M|7dEr5k5Ya}Bl_{*|97t!V9SR5`R7c( zIts~St?l35p21|RMZ6o)y+>HNef`a|FC!hIzn9I2pVfUV#*axj?iA@lfoIL* zbwG@YV?3cd9XRsPT+N71KckpNEdKfn6h{mnMa=&En)vWB(yuYKL8=U-Cwp=L&5C9n z0i|jLk1^a56zEiAr zKffeB{hT;9R99=#qbbeVIoa1=qRgD@Kc6%B-8ZCp#nr#RMrQ@qHbnWDI7{%(5l@PM z1Kc-&ZViG$;p-){A76*)@@=ZDF?6e%$v^*|G^x4#(Rw9cp8j-U^3B%c&(OnmAkVx-4F-vdjM!bm%bRpE&g&B%DFu7)}nRXM>>ZKmLrtNy_4HFDd8i9<{4TCsR}u6ORJD;+7FDi>Y3{ zWd3s27xDD8r;LN|KPM6`&Wk+=jOh1oOZn!UW>E+Ej?5T+KB0bdfzt`?WdINio=roC z*avx9`Qi<$^99lLn0zt>)8M7Vw+@sKGN_HA_~IG)QOfEszpy^PMhp)bJ{nQIy+lvP zC~px_3ckYD4iRZ=Rboj=2a@W#Bt1DHk~OQ>?=eE71i@q~L;9ym2gIXvmxdaGRa#tA z?_n(OO!Yok%kG-|#7?vCjX@>_I*)_T=cA@TcH|-vB_xwHFrN371pV_OWM5|(!}{mf zlo!jbgyRnjL^O&93EgsqDhBwb3Z{o!!1^thRwCkzC{GY{fgxJ8co9KU(lv%?GC|s! zc3B1eOQgc$zHT7axTfu4_kqu7%f3CX)lPfqw^_m7BjRxL+@5^(<`UgU-P*l&-!>Lm zg%8%%RT$}~30QLz7;|SNAaoS8(+_U6{YIrVzH4_U*57=hmwmKzYtf?-I#tvcmv|AA z9gVT&nzpfEJn?vdN@PgKk!d*TEh^IEW3VO7)fznV;>MuDkU1` z2-{)WHWVM$BD1WA&5J&M*Wub4Q+NFoqeDm)VpOFMvB7m1>&Ub~MPSPsp>!DSp@@nc zAw#f()QawUhL%6ZgYWfrf)Jxd>b_KzH2d?IuJY(iK`m$0zE8H+S9Je z(EX0K;XesrfS72M;hVabMudbc=kCxB#0|BEzJukuJ-B;M7!ZBTySKq}Ae2OBIZ`{? zc}X-G_KSFpOtTPL(HeA-2Q*#T_J$-6G73CiXAw%$Z7NLF?(~zs$7h8@hYK5uQhhY( z_BjYzL2p6;g&vI1c?8DZgcjVrrTa0LDcf6&+27VZ@Q7FwFb%X6JSn#F|=G#bx`#O$^hdFk! z3|KMYaZN`woq%hx4Z&a2dZJ+(Bo0;2#HZ)|`tASkpAXYxE_;2cb0Ih-8RxjF0-fw4 zxVx&tRUMw-eTj=G@cOMn=LxRsh=w_?uCT2{QzpLfnt)d+@)lp*|uW%%+f%QS@ocVSnm>rU29Rp3@Q8$*@%>3szE3!eN)q}s_^eBA|7YGiS9;{6_ABJ z5oNInoZ~bJnA#Z3s>F2yJB|6GPZ8QU}v<)o7WyIx|tUb5&NB8me( z(zsqi*aci(oCMn2y&k_%7zh2%!}pT64w)B3MS|Zd0zPS76@7E7m$tfnkDR!@y!UVl z*EHd^3%L~kpa1^-LPUen_^V^g^%6ZEw+m@|H1PPArfSkAR|pO3YxXet4myz z&|SW#?GlF14sq3*Zn;6|G>m4BB+I|Ng~1rnZV=Ic^mIgaJf!^f7q0$#hRo8SPl}?D z#Iud&o=nhLFv;9CC+t2Oe^0kpgpIvjTw}YK^k^L7VyouPxU>(mND5@q>$vt$E`D$G z6cXrYW-DYmA|Bp{$@_Q*TErS#E~zh9M3ZCE0W5xbiAyFN{nJ;-a>n(qZ)w(s!ILLU zfA^H?)en?a&iGVw{nL!Y|MolV`D@CHmg0*i#97em2`TAT8yr!H@hnT~^K05wwOc$w z#UrtGi)jq5F$}-^nk3nYt-(BORA{`Ba)~_t7 z*ComEBhq0OG|_E^X-jMc(PR>goYsZ~O)6Zwrk!`_LQ`K{_M@;vur;Qx=$0GW#*j`< ziE@ism!W`m2Imyfa7=cT;kph}+puWr0qH@3tJ@x&pW(Zj=DI=;3v?=IuGYxBK*f&o zY=*5`WHLZ%i`lFp9x{4pq^ble z+A^TSf}xeZi7%fPfv@U=2D)7=={5~S5n3s{l(?$IILq*hZz!go^~*WMm(S6D!TJCA z6*)O3i5t2K;^_ppo>MOx;&B!hPpcU`drCf%w2KncSgNZtjM1nN2|yGl=xl(DEUs?) zNkd;4OM$lnl@EZD=3;}$1{6<@hzI&6;AMws3pglU#4LaMg~h8SD%Bs2@_s04+jT8^ ze8S-$o+F!0&nXY-l<_cQ`NNOQUN6y!{yXG>PmKP)t5M#KqruiS@#$wA{_Y7h)eWg+ zKYdO-jHSEjK=%ccR&=WhQ-;y<4%6iM5S6!2_mCg!K<{@~Br;W)^)gTvcHQm!G}8|6 zH7YGoiKksJsopNhzy6BRBgOoWFEO3L$%ORqfG7!*2_XXm-ZUF*X)$%vquD}wEy;+{ zqY3rfGenXEG@}urfbL4HiLjeXOf=%?`{!(a{E6y%jr9-}8F3O(uhukWLzHFcZ8vjQ zUs-Hh)7ga6|MM%lx9^bCN5mOamutGs5)8Puh2oIOS3}l+`jNVdNe(6m48`+9su!=R ztBm4FLG|tpok=Mk4Y7+kUZlk1VK`JcPc#Y?otrg$?|TypU(LAuV+bIV(qk&a4f#WgBRJ}6vO6eIjS8t8{89QQ_N|3|OCdm{UkXl}q;Y}a61!pVR8lJ4w` z==3RO{+g>Fu8@)3E7(8v`3!5O?>c00z`^gIqg_L{SyNrsh$zC_8kLSP)fM%k4Z%-I z&gj__sOL0`mgHc_=FMxGCddg@l%TZ6bq19UNhW=W2iw=yg*f=G=Tys()zB^$#HUX= z`sdFPU5hJctY5DYX-Yf4La2gxoP(>W&S$tNA;}V4r-?@r+d(`U5oI!Tpp~MXm7rsi zQH0Dg>NhX@;FSn9IN<1?zC@W4*UJY)q%f>2|%qcM_Ek5Yi(DL(;6~@_)V}d3*wOg(}9R)12%i=lWm&j2k{7QwtX7jz|CR z?{KRX<(v0x-d)j}h~e`S%<_V2QKNK9esT(aO?|lzAElDSX+*njNsdlPhl0(^H`J{s zN)x0LsKJ@Al(^9x-*kRMGu7ETqyl6=mg z!SX&H|D6bLnIr*2Xu3PKU;jG#lw*%T4>IbPFSz*Em&h#J*Fc9zOmA&}>ggj)n-*KQ zH~Jy5yVrxOwFh$BHiT{j9cbvbV0+!A2+U01bU5dbY1Bub_TeJNhLg=Mfr|SVhHV@z z^0$dBw;$HFrGH=7SllU^x9{O@VeV|Nv9h=Mq`#$$&>s#&pD?&}G2Cj zi8#77&G6PCv z{84}EcU_;7Cqoxr;QLdg2sgH|yY7V0ecGT7->*0J7Tsjq1w{sZEjGkS%RCREDy`jf zc#Cji?{17Ju4#iVt7>r8qVgF`BFv?70guRJMy?uXp?#(H_^(^~cR|NvwdCP_l z5$g`ub~l8ADB$mG-30?>tZ`+D6aA^)JA5C4uuXmp-47j}$IkTWSMrttN%WmH5$nJ- zHDNp&;;pyw&mly|_uW~k6t-${ZTCR;^V1-7qNjcct$Ue)#cyR4oqb^3{J)_K?L0Ek z{nW~S#AtPY2l|7eL(2a3Ka^4K?{okKAJ6{wx2_QqY*pi(xak1?y=JD{M(%=$RBt#6 z6F6H3^ofkr-gGa>KD>4P8R9lEV|R}$dFx=|I|I%kvkW1E{6cCK3SFgx5j#(V6JM%u zZyJL$?!%^&AdIt}!!;cui}6+9u**b+)JJ3S-UhjcRDkW#ksy+=_k_t)Fr%5W?Z>zg zDvfU;3J|{!^ph`3-;LlYT~o z=|gJ~v4Sp`@no9z(eD4iTHpz5_m;80=~G)3yPAUiXGm-@oS_c!{W>o2cp28Ku!qR4 zc)T}8_7fl}ZxvHpij$BMS>!KGo%mu*A5qC15PrU3=w^Z zoLQHla~!EKVd-p`TBQ(7Zq9o7_l=(-}1Q6Guk zb)jz4Ds-az;JNU4yKo?mHNtsp-4R^!eGp2l`w5IhCNTonuPvbRH2m(S3;v@deAliu zh*;se(24e@1sUoj_V>g6&hEom-o3=5FJNu2rS7L?w-#F|Z`kUl3lj_<)(Dj)+$8Dw z`)_*h!=zrTo9K9WfQTwU34CMvnD1=|Ixa@zZ=R!Fhue3HM+&=H1|*V{{mmDn(j4z9 z+Uq&>qNVuiIa#5ouCAyrHw?b{hICMK`9FU_6(fYRbWKA%9w0l&o;_yp*?{?mOKARbSMN6AeP1md3Vjrf49A*8}}WhgrLy9nIT-1M7-jIt0@ z*#rLt5`05>zGC`czNCHohPuf}C-I#Q^j)pa?e9cJ60=%R&nlwfBt*+vk2h=TS;zGI z$83Im1L+i3UsA8ST~#A`DL}w7Re0Tl{M~KZMgZp5B#)kQ@ZBlx)f(SaH1j?=%PUk? z;JqPxbcm#5@$*}n*^=n^5yd27{qt+Amc*k&io=5H{d>CFW19vwoG|_UQ~dgp`48tL zhbIVSuxQvO60l{b3G+YyjkYV8eD#?2`i#~2GNhb2 zPyXa{h9`onKfWS;^c*GDy(2cmbtU+W;>)ApB>v$7*L7Gt>GU}8TwU0-<7tk!9cJy2 znFMtpzHF&HE*jfBv3g&@ubV zOUk)H0O_MgB!h_N>Jpia(W++oYDV_t3BtDMA`6FB;c)c^?*!d)gPNXj_)nkFzI(~y z=LPZcF#?Memh$3)wl>hg* z{K)K=D|DXh)_smzxO~F+tEY&% zMh{a|BJdVerYYZ?(X}bbFri({!r?tBh$kbkHzQ!3N617Xq{7xM?Xp3o3DIz?r|r%5 z+r3DJrh_gL*1x`B_RD1`Lhk6Ny>qBI4PDd^%#vjIO~eg;x5uPWmD5!R-v` z`zN^%8tU(1<@Nz!u5ade8w}&4-+jmAt3#H5{)yF_ONgTTixSUGdgfjznzsg-PdWU< z=V(_`U0%~HTU0VYWs-J2!!|yQ>a9UUML>{V&9TPfL~nAmiuhoRiWk`I7_8^(Dw0ou#CY#>9h|#b1A6`Ran=yWcT76fAzYX7XRZ##}GZgA7~N zs3K+a@>iDcH$-W&3;gNoiumX=4!(bcxmw_zW%c4E(_!GzZ>blNpt-unQ}m|b zCC)^s1ng$BYXbVdj!~(gdjAe%HQ8hkLdCKH@pu58*?Z>pLap}Dqf+Z2QQV)b-qApB z*Ljtv)GuEIUqia5Y8{79e>LJ3?cA>i^qX^l@sk+vMsACPyVuhDM zj^XjBEDoC3Bm}i|>yobSkW$^kmu$6GA(QB%O>{AXMy~P+22W_A4I=W>YPTwMYq^7B{ zKCr5zB1dUKx7h?>{~+swb{fn&P!aSXL&|;%RaSJ>Z|FL0gM_@;tM|eoF)lJ(S)+;= zv#zjKAf^B9euIDXKj#o>5(+r$J}fjosYt(hy+TP$84hAnsbJPNW;fLll3h|)7$f&I z6#ucQ+V-BhnVRj)&>#KS0~)j+S%ERAL4g#OZdHdaYZxmK5A&VrO-O;QYV20)Z)~3i z8pupRauedP6}^@@xP(HTj|?4X*P9xBSocL7x<9V7$T%h%CYVi0yKcj0)$2%ouknuu zDXuKBP6nU568N?Y8puJ6S*$|P(>91pN_3tF3rO!#aE-yX9c(**+wXT9Q66h-(-Msa zJ=sX&s+z8BQE7xslaM&-w-~wJbl-Q}g;KbtrYoD^)41y^?oFt-O4B`!^u3#jr;j%8 z1CTyIdHGM<3qQHd{194C?C^B{jt*512O*SeRpW*0*U27BXZIq%x8W3G|GoG3zmA9o z8N!7LrzDM3aEXRv+haX_Pn`&mk{yU)DcJ}2Sc4^6(XPY66RjZsM)CeJSHIihPYtw#?- z*Vub`i!>yJ*oAj=tB_8M4jpA@1S(d2cUd94M~w@7RngU5xSyk__cb`8TwyjXs>twF zg)H*W(XQM6?}bIkdxwZK;!I&yC0>LeIOhoZ=`6u@ZTQ_$*tN?@xKU zWsNnaKh)nBW!@X~q`2|e3Buvb$UZ@GyLb6Jn&zO_-&Vm`v)}!Dhy%TU z@^--(7hYHYFepQHHbajNh>HD$x!#~=svC{funuGURWCGfVPTdzY{ z(0(WB9uBPS+Ff|a{wUd24cW8LnSObQSp{A-KD@Tg+jCTwW9pKwvxp7`Upz4@wg!grG7@Br!+&Gj|)swFx& zA;~Q#FUY?622q}K@yB-zzyFTO(=qFp@35PawrYsR2SiDV5H0PZBso5U zc15!Zn={TK<03@DRxtVgDR#NWJ4f~YoNC^Zo*tq_hZ;kAs2GkG>({>Pv3=>fyX z0XDA=j_~D-u5mkj;MT~J9Y1CGC}RGnUw0t{yKa&V(k3AUW>XTMJmKh{zrb9)X7S6C zWLmI(d(P;0-x4c}NMqWIbF3UPd_KjjO4hI5V4Aq^uB^i-zaN2_O@|&&@bwZoJVJ{# z)g1D}h~>+7AvW1ty2gPzqbbP z_sc3CtQj7r}7AF;=S<@^lgbsgK6%z(ekBC&w)t`T+T4@HS(=fS`IZ@#;n`V!hZ9$|Y zhXw8B3|UOky)Q;6xs$o5$kVNx9u=vvWfM017`oMh>T*T1sTh6#Jw?%S@xOjWCP^qz zqJr`B6RMZL(sccI+_RK#Ppv+@ubt^a49oUUe z$|1D4rTzEqhUR+FOD;94NO9c;-`%`Bl@tis1!G} zXaDz4WM6*E_))~{hjS*s|D5uNAL&fN!5^NmdG&&7oiP6TgzoB`)!S>*gGcDp(9Tq-O8Z{X{gg| zO>?yf1uh|sDSL8)G#h+8LdPA|*)=jApi(gF4mC({>jljk#=m<;H+#$KT|<6+L^SNl z6++?a1@){WJsQwnFG)`xQ=G<>Z_jaRgrcHdyMUQA6`q7B6_jt@(b$33*2t0<&GRD z5`in%coz{L9-wrv`3rF~+4IhV6GVgPCUN_Y)MUFp$SkFK`=|ST9YGoEKJltTj|07-t6IDhz5b=6YYjRIF4Y}T!wI5M7VdM~FG!K3 zoz1D|4Jwg=mZ76CRuO${a_7h%A0kXceZ2uCLnl&wf~#2c9Z)A8*w}eE5^@`PdyDmI z0@6vxefQb#I*s9+Y3_;h4kJKut6A-CbszT~OwQVyF@-h#z86lSQr;Bi&Y7N;d0Rt@ zb*Mo>G9BWpl6F~#?s41o9o7&(Z90dJ(h$4e)imo8HJpYdwz3TRGba%mOw$4pN{6wM zZ5phT=tP1Go%Em!Hz7*27!zrOF)hyY?_Zj5SVs2ARfe`UWT!{?)f$QzU)Qv&mS{94 z8Ar79HD+TGk;Bv-QfaK|ka3K!TjG-mR2Ajbn)ql+k|uPk1lmdyUDctp4A)gS zr%-zD00l(Fn7EMC7c;!jyRL`mLH=PJ>cLvna72DQ!mZadvnGr#tD5xi5UL7UWVpJ- z%Zy~2V%Ih8Vu^DqoW{3=2N$&Mu5&?W?mLhXN{0p8+YZxq2o)ox4{Y!#CK;zhgOqNz zpkB2hrde5B7mSh7C!FI~s=fdQS&h-1oD7&;5O0Ji3zDs=-w4ZiMZf#Tki8 zdWN?UyH4A!pZETQ^+K@6kmlx|zNxuopE4Ob$YDKEyY)!O&~dYMD2SAfLzmbRn9Kbd z6UJ1Y_;8Gt(9YL5B=Ka3@HNdUEu!fK}tMMX|LwAjVC*vBHRtC&6Z(=F1F(`6i6HNxH>`#hiMEdONoXBT06?~ zE4ogRWC`ANc(0LBpn?c-S6be8xb`;u?EyukF*=fT^9^3b#KRb~F0qE5RuTwDrmWBh zM@otRyeB1an{OaO=hF4hlT_-4SoKNp^?#rPE&Alt zJCYCQ>|G-IokTc;EJkGGlXec((8{AsRcG@A~IM~z102ZJ3!AvBd7-LedZ zyy*Z;FuiY0W4mWy*WBDr$hj$mdMT7ZA!JYaxHTbC{RGHi+YmXQo}Lh?j^(R!^z?wV z(9~CJ(&GtszQQ<3ayY;&mzYixB|%czbrzir(XqwU78NH5WiVBXX(7szK$L0&1w$zx z%>7c~g&-P-prX*V^}D3UZJpq~1rhbO1p&UFqKLlB?}DCJX^C^;5E8yWjnqEuF9@Xe zbnA}vG&Fq5MT?G8bQbi^&iL@VJCBS7w(Sr;B0Uax({9uD{&C%RkHa(_+tO7n&Vfo2 z(rHdRU(l4@-oCI!)%AO?j!;ryyABb>_^!oTh_V=|=noS9ULQcvqRV|<5njk$qd=g; zckaUaAht4&J86gBc|;Ni9AsxcEXlYDz!F+vSL?kXmH+(56zMvwamZMq z6NPOp&U%uAA>HLWHrJl<^9l1m|Adt(N~>Nj!tO?qkp^oKNroPzH^#vG{!;?qRAJ-q zM?Rmn;fmXxo?UvELZ*2?0&+JeSt0OUjjP)p6?c1q+9s;+T!79a;yiG*z1wr)3lJ8w z4l%TNNj#pQizwju$~En>-2Dw9ZX1n6A3kI1hUDaw!Dk1w7njuUudpg-{PhXduP?Da zCmMx>#^&mhX4RtOg#7tav|q4%T`_nzX8H3ARB=o?9g|KZ<=gkD@iA_7Mb~8vo=!pt z&g_ik+lu1Z3Fcys8WvQS@33t|I-R0&6$&J7$OW$1&@M`()^ybdFH(v}$3%HVG)gI7 z{6gJkOrA}t7ZvfaK*th~!!;fidCGT}w3Q}*HigXsCo*)>QePQFWNB9&@i?cxye68S z1Ua5?xTeOn4w>YrJjRww+C_~Jj?P9*fA@&)-34lTjIToBh8M^@$D2B&YNi467VwG@ z#nWS?w8$)B^YS(8^D>Orb{k697pOgM&fiEDTw@tLf5za+Fch}Efy%WN_4zfP3|-{J z!#LD22D~#=XYWJI`bbb;%+aF*(y698TcRh2LZpwAV{EZ?0&on)v9H@t2Q~ zuERTvsXYQi{r(z#a7c6UmTJ~9`SuHxE?NF`Npf;RJSjpdW*pq*-b+-X*}OfYx~_uc z=kDhGQ1V~Xkv@9F;L#|UR=3^T{+@PiZ&uU2OiW8;l2D($W%1%FcoaU#fF(ZZ_3UUM zO-J(R3FD`eVEoyCes5vyKGK2S*DLS&D})HfVYk&m?j5MNy4xGt&$eg_j(odX(9G7L z)lNTHJRZ@!Kc{QMVN9lZ2>j>~U@}S2v8K7cpj}&%$rz;T4KrKzZQogyl5RD_lQVdd zv-;t6KP?G`YF9Q4zIuu;uUVdLP|73Xf^<3#32|PM9u`O}?Yg46nBlFWczO!mip`rj z(a|yaQOx?Mmo#0<^mmVG-@ayb*)sb2a|XvTn|Bvf7ggX2AB;(g7+i~K2z>JEYuZ{e z`sQ&c0M1+DqXUvjhRze(_itETSq4ugRIjf|PbX|%zJjOW9$PB3K_z-=ryt1@xBi=9nLspr21&+us4Ui z2hmGhJf_+N^LOJ(PLJ{R5=V+oJ< z^fZe(DjgDKG3{ba{^S%vNp)$+pPeAgg4NHLs6hrO;^_g&0NU#-sw+eK=n%|?`a0}= z-n6t$OENts8RbC=s2%mi3^h6+$~0(+SOS4G(`_0nu~LcjY%eHNcD_TWZdibg`v5gV;ey{ z8KH}itDy!3qFJ$e@fPv}@}mM@Ht5k99eHFH_n69H?CY*CXx5TsI--7J1?Ee%pP1z|h3~ zT9*&6@4L}5aFd0Qcg#?I2l1o7f1kXd_mUp>ud{*O+jbx{aXtv?03BLajU)=l9T$@n17v^D0=aWTd)v@$ zYVcs{3NK>fJVR+oayp^Ad{5maj84Y1ixp@cG`W$dx!w>@2Q(MgSeKyUz(|g!2PoCh z%q%K4)QgsQm|?1#XfQ!3hZliC?cJ920N%Ek+60P+Oc;NDguS|^ZNZs-ge1b$!@CC8 zDRdeV(Y!SvVv@r#N(TdHb$&&&>3Zyz2_X4cJ#f$q1$6%85yi-851UN%85BNb9i5mMfW6(dm9H*VyiV?<>W^Rn-^y|5%)=|p04Z| ze)AN+x@7TgjZz@uoMe~>PODZV(;-@U>dQIxra{W6XR|i6>yBtLCK)K|vr9S>hR+Xi zmlrI~HssHqFgnes-d|G9T69(*BZr7GqFm8jEkg&k?J%vNcy@qW&uJ@#P9jvE5FZTb z&d*q#t%%1%eCLVth-SIK$q4D(o>$YO;tZXMpjX{e8eE?*K-W)UWnZuQ;PFryIv1F- zMn+MXrb!9a{+{i#*V9{z`{WKc4 zCk&2rx~c_ZXl8S~$jA<3R=-}LMiX4Uz#2`Q=jb$|+srX0A{oVjG9e;#90!Smuyo~y zuJlA%fzD*`EF>|whWdJr6GbSX+Xm+($)wor1wsl$9O2drs_Pn+4iLVgnk{f5B^@QS zS4;A*pCPLi)zT9eG2Vwvhnu=e?3xWi-}4OJ1w`x~ijep#RD@8j_dclJKje0L@pzPn zI{41Iy`2QeMAKbevwl14gH-Z_d8BS!%W9z!dt8gR0 z7Y~hzKjd`^9U~(30jJgXH=b`>tg*pt;JAfR`jG1y)(=yb*xKMsM|^llGR!F7o#AB0 z@NvQN=QE;%LqxN|iwHf;$PNaSZ{A|aNpeg1z9BgpVapA6Q(=3vqVS=6=3I+y9qGvt z`N^m+ygY)MX5KLP;t_Veq*>Nsv$G~7Nsh+|(P5U=4m}gboe{;8L!=5uyXI<6vux4X zfaG|HThCa%z78o$hY{-+?{GwYE=34GNRLj*j*EbEi(~BOn)0F{Jvl~+mg@YH&bVM! zwE{gE;ky#=GYM3-z|qxV0VqB@CLPAK>jqO9gci7}!aIqK1>Py*g9*a6JtZdK z-rCuW>S9Co_=MqS2Q-)GtlwNi6yJZFi4cNg%7*0VnBvhm6mCM|U64}=@8~ugOw}Rd zK)!HI+mDVd$-xQfM6mwl45xAi&yI;A!|K&JZ5c3v#k0?d;+ECREA(VS{^$_9oKwBM z#L9%?=`pMqRErW+M4ZMr(;|xr>A?V3)!{Z*{U~e?{vvgZE@JA73(EJaFe!RqySA+* ze|$$*}NW>aNN^@e&G7uLhO55!_I2af0p-=L~b#v<<3~RE6{Bh0um5AvmO2(te%iT z8mH9lW5ylMZ;)E~Af;0(NY+*xoR>%~XqP4FlPAQg#h8eAl7=W`A;DR?)rw}>FnD%? zUCrqlkE>gf<71@Q(3FC7oKn5JLPim`ZLwA{`uYj9YnCsrh!2k$JQ`A;pHp8~=ptw{ zh1AHbAQ>vU`GU?wWXB`S;xZiQCldrMLKo!66Wr#S_4`Y#4OmKH9cnN@MRFS~8{{BO z(}!yTB0?n*-gUUfB9jE)HHav|)f-ekCOL?y&aMzTCmuvJmvcx8q;_&O zxb=*tQshsL@SAJaZ>|w(juf9*jP`}HBVzo;3GKx>^~!_;V?VCmCjZ?_nL#|P;`n>l z@63wsqXqaUx^l5?kJRkt7Opj<$0ro0gHYJ+BuM_lY=>>~r`)fl1issw?D~f0YK5L0 zpkuXzAZ!~>zTZQAv!R(Sp>OKp1u~5T?levj(qdN?T~nb(2MmsLnu{eqitu%Zh*RQ8 zidimbRt>&&Bqs;N15LZJWCsPlt!Y*rD$|(jIo2suBxn|El1Gn-bi?ZPJm6CMFG6lZ zs=PwwX`qI6z3d{*g9Nf{LT5PX3tL2>`<3O*;Tlg@mgwODgQtg>#X5v(>7MZ)32eDW z$aoikBt!=$7;1MDduQnCCYa}uh$JJK=1ApnP0&Ag^BLv)CGo)t*@0s9>pO^sqz6NU z?5EC3;*nuJs6Y=gT(zLBAUhi2s~R;J6BUZ;-5Jf=5syPim}}f_{lD>kM8wlE5_^YW z^P!aP_H=(w_7h3E>uVed$-yAhh(36i5Fa)^b`p*#!p!HC@8^gpx{+{9zI#Tb4E1ai zlAB_QZK|6QjB`DDEJMZ6E?1Z~Xv|zy(pf<=4CA)0T+(eibTKAML%eKgqkEi{A#u)k zRM!g}iv0KpK})w-<9tLi8R4rXn~Q6V7sPpvB!I!ALho|a!zS+TUkpUhqIpw?L%}v- z(BCu4{oo6@CpyyGU^s|#gf_Ug33}dri{0cc7Axw*qDe2=e*6Xka*kRe2`Mf*kd*u z+GT}xj_mO>28WXQzx_xjawgw>K|b)zetJo@GWfP*^t-Q#*l_vpuSlOhXY%}z>h)Wi z>m_X`$R8gEbkt%K$RBxz)DjUTfi*59(I}+S1vFrX?+=cmkEku*ykYV3I()|u70|V1 z_|ykPx;LG37(js=paC-oJ)9 zAPR(;{REHREcijQpeNvX+K{qoB|-^I)es*Z5Jw*CG%DI^>}5y~bv5nAG5+Q;&HJ~s zje@QtdHfhPWqemHwzrF??(#(vNOuqjTSua?;x} zish>n#j__wy5#DQKjU zxUR&M2AO3ynp<&)#HBO>6C^wRsoi^x&SKil3aN6W?r4`aU9~}tPnbL#P`#Oh5}4Yc z)10V~w97SJWAUvaefk;sP*E>x($g_i74`Kx+-D|GsDu<$XV+w3e?_8JT>j-fagpP^ zMXH#%Nbt4;-}A_Q6W9gLhk8NVkT)QczGJ^-J9o6J4bB8gnXN0D#fI#QFPJ==P`{ns zBD1-!?u$i5S9ZuGL#H;NW~I0ZA+d(0Y=|eLK-Ccu>FEI44ku&MgOuj|Im=%!P~#Iu z&j&33^bj)BjcMMWG5_g3@nZ zLiepjrZHx-#&({l$U9c12^1ks4f=h zgDG(q;Tng|pgf<4;!*lr2SnR;sKFQ|o8ZEYqQG($nq*pF*BhJ_xXzHAPH~$B)pbL9 zJPBjD>ve$5@34hQ-`TpR-GopEwjn1{A=4C{2)a!hWDVAY0!4-{q1+nvyvMc%8O2~~ z>Z>JQDuhs^hhwA)l86d|$vYYJU#`Qn7O506&PWe(nu|+}2}WS0C8ln0zL#Tl23ZV< ziiqxVhH;AI@Bk%k?`rNlm`e99X#YU0wdlv;Ta=@?Cxj%R(SqS)o7(h1obq-AD;@RK z9OwV>=h7RC9u`DJdb6f@_9Pj%PsHMbPVvXDzqx$xJ=oqHBzs-v-JF$=g$>x2cDV+r zKjA(1IK{iuy6rSf%UfL+Z@chpi*1bdO{34YePWk0sA5EvLNl*OPmd6;!>ral$V1&| zS>q_&!@}c*4h4<~W-s55u|XoGL>Cz6TRpcF9Imn%?NkH>Sn z9+&T9t-&L7(#PIglEV?*>>6i7xK(;I!YpSP6Ek=+p`9;qtw86B`f`EHiqHWs>z(OO zr71E|*s2bJB@z%CnJ8QtWG7PhD7V%U9~_WPGrHA+`eGeko0KT6LSX3O2(t=@Q`P&h zyz8~*&LWeXXq1EVNMUKN=D}3ohatJT4v5F;0ZJH5Z&F^K0^7DX0{3qG!f=7g}OgYvL!Larpfc%wk3L_MB$1#`=`WA3i6N9nE~r=KVF@+L9bj zi870+dWW;IH{%kLU>ImyWSU{?71iY$J(-eCBFwT1JnyDKWD|}SnBM!fwaQ&}8qK`jk@-(G7yTt1uzFo0=aZdXA=L`=O%~Fs};PQX{ zgv`fCcYAc>I!E^C1nEnvSxuD1bgLC46DD6zS^xMeZ7ncW$HD*c9e)0fi@#hl{g*$G z=N*^-;}@I?F|NTNnlN~B2%81fs=^qDa27orqVUMU0mIXX^{eX;dF?#$I7eq{r=^sU zqFb&ptt5Lq#az7M@=veuQ4A{Q@DHC8>%fj){Ou=Zzswo`?i;3G9Q4uwA80Jj(p;Ay zW26cra%*HC!yLK^uCbVMgRv3$)5qio8KPTp{nwW?twhP7{Zfb?{j2b8gO!40kYVdE zN^_ez^}0hP2|ABy7fY-cBzYQ`*hzs-pu4)JDjoTg$7n3kIPaxZ>{!Ix0^pW@_*Mvs zzthFNxqgd~Z09AWfn*vqce|+9eU0T73)!u?`uAUGU666?qJ%%xGu-P>@YZ2A4TG<~ zVDkAibieL)l0SG4cRCcm_4*y#Hx#VRbqKrJPw5i(M9=Ozr+q=`Z|SffTEiY#le|F2 zd030wcI2w?ZAmjH zyA923fwM8`(E+39BbGn^#OB&j93CKaN4E~m2N^}^Skaanyev5U-7|c%!K(z7!0M-$ zRLh3Z*I$!l4eOT+qT^HYk>~nPKhT(nZQ}Ze2E0(jsqqnqzyFfRFSz`-pQ&4k5Kg+ax*EqS|b__&A4*&24v1~D2pO7nW zJ|CgN{nswqK!zv{(P$W$<>JnyYIh$7xmUL;L5BubxW3mFqfuFoYgg3QCGqho<1Y`f z^9A*?BR@^K{W=j2gvmFLahofaKVAeP41#Prz?7cJ?;cUTcuBePM2WhQ==Nqh5$8mMG%(S( zSY015#!->cRZE(yisGv;(C&)WwdCN-AyAf%g^29DGT0 zwZR#S9vw0Hdc^vtcc@}SeRW3H#pII-Dwn-NPvK1!no7IrSVS}^pw}vk{U*kCZ*ez1 zhyCUag4RP``S`)t}yMF?Rp7z`K#{9PxA%-a#}Rpa-EqH&u;@lklLJ?pC_h&gjzg_m~cG z^fJzf263PC)CN{;*YpXlG6c#PgG_UDs>A)^f({u%_gH5c-n8L!&^mOgI)hB3u=yK@ z%2NbBFw>VMG7B0pq=G(DSZK8)%k5IP#C{yC=uO7q=UiRmj0msUnD7i$72X9GFwXW5 zdKmAiqCm$XWzY){ItsA+vc`EIx+GfNax#nU=H+~k-3kXV*>{_RQAGqZOw!9#TpwPf zb%=j}7>Ot<^n4_7CCzv>VA;|FD4pSUJ%BfWKh&-Ot? zLdgeS#h&1Hn}48#Zj-hPU7UXUCzS{+_^Rz=wf!w~n9xyJueM`jK_8bLzJIY_;E7P& z3w+-J8$sJ)t?N7aE_BlS;4hhFC<&%2@lM^K&Uyq^KrGlD5-UhJWdAo@cn-8ist}tj zmB5xYUPeTN9(m;~w(9W02V?K1MIQ_i#?n#spkpo`vt(biFoM;kpKAJkf9vXdwMm+&2x@ICPQs zufo#KS7BdgYc6e3X-YiFF{|JelX;F#dxV_pO{@LA7DyPP_W;PS#~Vi}<%l7Op)K#S2~ZC6Urtwa4Lq9{D4-lMXtN1xta51ey*o!a1wu$wa6yDG>>WS*mo z9A9rRWgum^rU^JYW6{Gbc)6OcmxH-5{mBw^5(RjGQz3fXwzw|TXny-_+OW@skfQzX z-{CrkE{Z-Rj1Lg0zv*7{K17~t5tItzBkQ)5_@>>)w)X|J6r=R$h;%SOCLXh1VOo!j zBATli`q5{M4h84`_g^6&l1-0DM={;}ih6EIj;7e^l4@>H2%>`{hR=?O2Qha3o{K-e zz=$}UoLbN1pT0qfhV|Pe+0#R4=B!@UL_@Z*Y7Ptw@=+5qdYu( z2wc0OnYAQ`2mQ!u@0;5XQ`zc(c7y{7G*o9xCjaym=K3wmw-q{zaZN+BSP(yc#_@ms z5@A}X=e++PFPZ$e@2P+OnU)E~L4<8eT-(QMCk4s42qP0Oz_+yXIbJB7akR^l=;(+v zb95U6-l9fF6o-O~|L>ph=_$k0g3bH)=+OyDB8U#h#D!x1r=RiZlYSm$!6HKp3^l3Ozbx^4$~6^&2k!{U!0_3CUQ}UTs38cKe&Y32qh(5 zxk45PjK6$NEEin<Nl@gy=@tM{y0S1yM|^q!~2A2nA2|Nm`y17+qxos@{GI?Y+hdm zw4+EFJ{z<6;YX?xw2Db52k2bxy2LjMp#A7+fzU2Yd0HFfH={`?7W#sHdph@?9tXq? zeoctm9p;aApzj8e^n;#V>%h{?8+4I}Y0MUNEbhcq`05@U8P)`(S+l57SxP+W4=ne*2l1cyp8Xctg{NIq*sk|i>~}!+ z(Rf~ht!bC5pppONHEh@R-dj@yBFfQugxM@ z6nnksB~H*T8?1Gh^&*&X`=&wg)L4)SDozoiVRL?ga}mlrWRj9hCm?EUV?$!*x(Oy< z=`nSMaWTjL@)e@IqMSKwy}?+4GzNnwn;xNyg8Trk{`GHIIY8^av0xw?Pe`UIX0@Qc zTw;Yl>o{!KQesVm={k~POq>^_k0<0OL&{gLDK9$G$44Zi44N62|N0}XPlzIoS=WsJ z`FCWwXZgz+G8+*UF$hI^G{mniIRBqNVpJYpj}$i)fUVD@Zb+Vf!Su6~%m3e>u_Eo6 z-TU`J=$a|1_wcO#9+Uh7Cab$f`VT^aB+j&0XSow#aF3?>w`!n2EydGYhiwIi|NJe* zRAbs+4x}}%4$r7e0xvu;?)>ef$L({f6t-z-7roB~iSH`f`64_!GOVlR*<0k`h$Jzr zUtORdJ>ls0PoeAZ^_;7JKPNhxBFqZcYV>G`j>Ew*o@O*>Z)r9WgXdG4_Y0iq`n^*k zL`*a+s4p*w4o*4v{R!3Ex2#`W1qsr4L^4Vc($HL1LMb00C(Zn>9Y4GCUavBF3QQ;(z=NnLQ#MM?j6O!gHWg zy@z!3I~Co{S|bq3(k>R*&ZCl;cD}?H6UNU@u=7jWrA6inUu`I7OS~L%{Ljy6uimjb zt5Hdx4^nQ3A3fvXt5d2MztXjmczQ&BsHo1)SiftChGXJMUzgN&?{(b-sCcJ|CzBxA z@%!E9y=(nFezCg~z3uPr17zZH8jzgsb_aTUFR3D>dhsil|F$3HEf@toEr&nL_~S z1I|u3ocA|e={=R0-)5L2c6eAXMZmC#(6MnAR2Jjg9=p^ZxIF?9Cq%Id)DR@5YJ$G7 zY7kKr%wYY$8Itu(`>q5MC67?rRgNS1!4%_t|9PfAIV0>Uf3h%-x zRZCQofDNH8dXNQ^h3SFkLWl8O-GqBhfbF^-Q*`sKZ=+=Cp$6Ly@AjnMgBQ_xid|Q| z-%N$*U3}k>SNNvED~T#n=xjKFMza4rw&vOX{&qHePi&)?{mqHhgDSG!-*oxx} z*5Nr)Dwykh=(gF~AhXbE3M2!C$|79b1qp#QVRR)$n67NQtbMqJ?;iv~=wb&nQ~20* zo?;-;OT+uZ)>c#?=y6I!o4bP&arOq`Iq}iq4ZM{*?)IolB4njmBwLOVckb^ zSN`MgdH0(H9Y}NKj$iX1)nzru?SY$CkN8zCEeK2aW zopN|jx2}*`+!JE#uBjlC6s3H4-$LM}LT3?XU4;oPHt4X0Kt>v8J6z|{SrVp>|ypyT}? zxt3H@#qw6yLS)}!C~Kbhqq=bp|%E_HSMe>o*W>x!6%#n5aPR2OT~ zM^6|%8&kbs5|0)0KmSB)Gy+FF7!qX#`RB*j>vvrLd_{5c2pL7VdPcSC7(D-i!PIg6 z#}`B=&zOEaV*b}3nZH<4oID~LC14%S)&cECkF=Xki84WRb%kktkd|1&>DzXQC?}bQ zj&(eYab1V0JTigi;u>^8JjweBrN&lE+Uq&!EJQEsj^=6xB*dd3GE=nk8Lo>+4u`#N zvcz?Y!LteLUtiLe!GNgq0fVoOkls>VZUSF(iy!k2h*4RDZC1EO5>Kb-Jle(03mp*` z(aunb_csN#*w-fCB~ti1UC>XszON+BxO!m=l;$F_|UBZq~x?flYDo?53yyWVy zZ$WERalqj}eSxwS&h>@QUV5mEf-AdSgdh!}R39a5ZXMJ={+{=}7N7nZ2|{G{PHiT| zM>^0I&8&~|{ggGy|Noi$&vr?Y^Gp-GO}PqrM9R_viXeM>cYFWk&Oh6k?HM*m5J2fl zeN-ryCia6_s3WqnK(c2N7lC4>A3x#YCSH5qM}&KI86okYRiO^TTsZptLV5a|1+EK8 z#FRod+^`!%!8(GjIQ`vcWF~G%kqV-4Z6D*y>lOX=I$Bf73{_MJ(X#sK9n(Mjj?okr z-@Kx|X)u!t`i4POoP7Nms(Z)9U*0kP{3Gh`enOo-A~ctD>ml)xbFz~Y^7$B3#7*DV z3$FegW5tygDMP@Zwg++%?YeB+AZJfF|N4~0|M)isH)itLIiXonU#_sdLz|5J{EXu9 z98((X)hjOl^dmm6(7Gg_&rrFKBKg*notf56`Mg5QmdihV!}`i|_Q$W7 zJRRW%zw0^*sj!!Cxcs-D2)ek(?{=?)*>xtRLTQcgVebcxxCit-ZgU@+V>sLIb*$n6 z+m8R>;G$o;J~)T12WG$his?raY-f|*;(=qtJwZoX^x1bkL*tH}xVD9w80fB-_)swY z>YV1MAE@hsJnv|38nUXwu4{xgm{As~VK$($g7WDpc6p5~=S;smr}_CuF8=v@)T57h z{9nFA^fkdpd)e-4$>w5(nw&6sK4ZAJK#b1FM;*(bTV|inS^ST`(GD_(?>K=RkD@*7 zb+mbtvY}u0m_pI6YLwR4&Qm;j%IMTY|MW$J>pIGhKcSiwI3#%`XfA5XM;V(Ruh8=u z!__rQVL`-!FSj6L&oV>r(FG? z-;+IlOxUa$eex7nU$J@9;`%Of#0QI*%o#lz(Z702Teo;|P~)ARU@D1g>O{d457bqj z;NtZiT9ZBilfi?xGh(HM;a9u(#Q?zvO(ZWktIU+c0Ym)-oM!POyC{D-G zAGnQPklN_T+jSOO_wmE!Ic8Eo-_tKQSf32Sg+v4yTUI9Qf?bXlgWcgGV7nfnvgieg zC%D6C++Q1a`X6sdXLm}!M@mVR09gc$)r=q+kmVRD15yNI~kgm?vynT~Ml8d>G|uE%wr;D^-hPz1|C z!rdOi4?A99{C6?-J)p-WCO5ctK#w%-yK7vCYGY*#5`mhPh@q#iqi9Y9A5$E=9-#}$ z(@`v5ixI`NU|1~a>OTIw(kaL+@}s4UUd^#tkS4tp(Yi5>&8^}$rh013w20rSjegcb zhA7zDo&F;aFmfIhN*jc*3|$}H3RL3C1{dv%j7Cau&LNb+l!{@s!MR9r5J6#P1^9rg z2T(CNZeLWz&nk4Z=L-k)gWxPeXE6j|=T7nOkF~yy#_rr)lms`>Eo#(w6oVs<_FM7( z```LZQ8~S#T{dyyG&%Wvgmi8{TMwT>MT;!E86r1MDO8n3=ZLh%MBndYXMhl52u$=n zP4U@;g!n%o<~m9(l#$Q4Y4DC;2zS~dEB*uF=7UtkJJ5DIu#3Z1zT6>nJKmwSam;KH z>ktk?HezeldqFmv?CBE3@ok$HyKd8%misXmB+3N(x{HoBLxUY6A{|2N^n`#eN2uJ> zUanD@i58eTu0<||$Ve3fUxbNc6(6EF^Jaxd?f+iL15sQACVWb_%_oNLVuAAtoh9L! z3wWRQG(cuK*{r~CnwSi$HBu&x!FF>;B;7zjr7)o3W<`)1GpUfl(%wX>WImr_vd9tL zT2@M}2wg+FSSP>Y55Q`LJcM}t?>v9lr8^4rq`=iRZjk6K;GBrD*xR`5WF6-Q8$HRB-bR%p@@aux zuV}9~$f}~4O;Wg;WmvW8oE%~&Mn-y^s!9kwLmSA(Id-we3z=Mu(&0!(zAsWogc%w6 z%xxP5c0Qo;B2qtnz}b{|t752%EVK9wHlRv{T{UU1N-@~M$L_1M44cR&m)XHu?>(;W zV=bCA0@B1zWvmA^!8LeUP|k9icPmtxM~9xO1lu#zHiCaf$F8ai$>EE=a9PBIywV!B zG}e@B^xhMgkKAySyyvoQ*Hob=1ybz#oAJMu#J64Kp_k?UnUD6Wj=K~F}wW{GV)zVA?{XN(`8(!F{?y;zZ-J!SIz6zqnpfBBK()6bZH zJYx0jOZq-z^7#|o;x((EYO=F2etko;u+0A9E2@!TXyT?ntk#faC~0Y4UC_5}@_Uu& zJVT-}^BGdd4t{ra4Qhm`JZ{q`doQ1mj3ScM14#@OXs>P%dW0z>ePHj|{0m8hcaqC~ z>H6c=;DgtDfy^spF8AP>?eJ|IJx+^?K!J@(V_%n)Od_aiOGoGD9lQu)b?U;Tsr~dg0k!d!sUn7e-r(Zv#e)S{kOGjQ9?)&XLD};^j92ZAH3#ldv9}@x>MrG>A86*Y-Mzn03ej3uX(um{r<;ZztkI>sXD(~g?&>$XKlLW!G z^j9}{)E<1fZw(7R@{No9*z;L%f54QKguYGzEo$dSFQvk}o**@n5INA>0?au?G2!&L zpCD~bSKD|gy|=zC5S-`6sUa`YOe;CufK7 zOX%%^Kyv5wq}d-6?)v2h@1mIdR!q0JZ;$)G5P{xuQHNzi^~op9K0Qf3`r&RDYCE5m z#P<%@dW4ZX%h>((0(?t%d4&%-sw@GI%nif!6>@w|mUk?^dxIX05-riQQNkm$ zjPlWx=Jiip|Lq-mRK!8CIl$Y3pPLgOuG=|r*pE2jt(KMjq|b`Q=H8R zT_0(;&c|>fZ?SFE1gX*_KqeY9>@+WeNF(urp>B|Qjv2)Om44MBB*<(6eoeEmoc-}R zH~-^X$}hjBEF5Hp{_2|b%NvHa#mvqrPsWh~VjJ3vYrNDbZIF2U0NLpr->nIv!i)kg z74~=Qs_pe>2l*i4sB@;v1fp(}M#ZgtK_$Ad^ZRGM!`G8CH($Y>JWt z?L`xLlzw1nEyd$Ulp{@hd4sho`uQeKYUmw)iwJGa6}?0!2axz8``BtO!am+HMEeHH4i-CDRGE_%69hfBi>mgnZmFIBz2oFM|%7T1W#v@?b zh(d7mH=EdDNNCP3077Z9*$C-7)-T`TMM+i^kzV2~1cT54*R-GuiqkQ6af9`m>d}by z)g?|;nB3#tkbEgkOkZ*jeXmq0~ayvHLb&ri`h#?CvZQ3hP^uuTIx zi|CKa$fpLo=s*Vg&5}UH_}K||b3?asD6LR=1%6Gt_7t;miUIEsDyMoJ7b)92z|pT( zxS+_&JUUurc}!RGF8Pi||K4t~z?_|v8Be$BkTM26C>>L({Lt-?XQd=UnHXGQJ8b8W zCel-asTiFWY<_-?*9D3YPxX0$%0%=P4KdyxuMyH61WIs#Ncn?JHhO<%(;}*(_kKsw z`QSEsdz5VV0SNRhfo&Li`l~h02V|DTF(nU~P~v{;uG;}d@A*vkB38GrPbl=TXm-I3 zVjH~Rz|1OCu8t`hGAi-=n>xA#5C~qxYmGe6i3tu2WcSbJ5IT-z>;ze^9h z=Le!oiumw#EW{Z4L&Q2#99^Wxh=A*(>p=XAfG8@)PfyXr?m?`tk5j|~5&czV6wcbk zg06E^Pfnp}a85DQOVA~GB^lNYL)#-vPBs~n6@unsMe*#6uvs&7A_<9nMA@n;ja3`H z@nwiz)LhZLy`=B_F%X$teB6)C}_w|D2#!`KBj$K^Px0xN|kj=*tEwsteM#k27cd;O-g6ioUzqn@oW`WT9Uh|a? z7I=l+A-s{Zq?_k$xlnUPP6P#6=x1-+njmtt2{ArB=;S#Z@IjJ|D>Pm|LKX-* z`YupCp3=N}hdFyhW+KXK6Jl$-9+_2SRhGI#E#10JPCN-f@gll%_@3Z%bQ$^7_lZp7 z|LMJ5>EZbGo*+$(g%9p-H22@RR|yl>tmfScVRS;EbupcO`5fUbZUB`_Hb1_Aa?b4Y zM=>h(<#ps`4Gsa=zD3B2(UW;Hz|I+ec8;(sHm}!Fd@-6Zc{-wfvm!fxgpoB@e|t&! z$tU>hS2%sbk_bGCIG5TBFbNwx4vlRHg$F>e#O)%2}-zRqv4n>agf%_lcI0Z=L z`O)W+nZ_<|kdrg=GO+&sHP-ite9G+0=V%(*iv^pvHKR|T5t;>kt5Lcq$cpOeDPeQT z;=7l4k?rbX9&B()`9Hw95cz{?_DkFZ#L0l>yC0qLBA<{gI+RvH5t+@~g7P8aRh?H$BzC=wS9QbPbfHZPvBXkETJzSIyQKEzE z?p?%$jE*Lk4SF_5Nf-ID+oZjFJdVQ=8Xb-uFCHqO@A*u3uTKc70N4AJ4!WhB9+>za zMR|+ef*!U4Pk#u$-;XFCI*IIFi4gaMM;QC@vhiKBYW@g{Xp^L8PiYBl9d>^)?(XX-v!K|zq)2<-7XnU<`u!#*j_UJ z>?=h#3nSS~RF~nB;uv)VE@tW-E3HIF;+4(by zxh4pS?^bMnxIj!#7(J?}e|i(Uiqb{bo%sw`U*meo_~T~?zoB_^gPNXDoXv2{OX{~9 zif2zTd59c*FVIyKku@)0vU;_`jLHuHZ{85A0i0% zXdJtu56K6q&*dwj=}6?hHxGsJ>At+0@zaBJDw6;P4{krK6}FCX+iUH z0eOa7EwCM^(S-8pgzoh#nnjN;OcYkDNEM8Uwmohb@K%wZo-%$mWw^SAVu}!^%DH0m<2yt-Lz=JyZG=>KTjOeXEE3!y#QV5& zS6j^KDcLyR?NbC$Svth}+s;Gc;R5u3dp zqkelqFe7GPK10|w_3IVjX%}l`RuKGv(2*Z%n;JsS=#x3vhUT)tHyd0wVfM+C`iHlO za!N5btbcq<@!3bXx3BQk8Ka59dW~>PZoYYwL?tGk@^s{1#zMgFT3-)a@f@^pgGA~a zp|)PPF?b-VROPW^`A~WMP;B8EVlM!=jY^^ z<>qfc5p=$b{q>z^^7%(p^Bj-FwJpt?OI$Beg-$7bG5+0Ki*5SoWvV2oq?8TYK7BMt zALN&&$9Py>G5Pcy zzp2rag8u4?p_fQJ`s9SXRBV2JO~@vcr<(P*uMpLgY&0U9YwU8x=IshQSfq)IV|M<8 z@p(r3YK<@f*ZcS!t5r1p_fS23%;?Dk+qAT=E@)RZL2fAo(O}+np8R}{3LWSXrc!iQ z*9=ZzjG$Yt(eo!vpH*zW{|U#4@h5YJ>m{}~=rR_(LMvRorny>zF(_r?0+Q?G91_1T zWeh4;yZLZz=}4So7KBNB-@`@c);tI(it{Og=tvM995_gZ+Kc0k3f!ZRkh{fU^g7*8 zzgdB1c&>tKemiJrX~n(*&Brei@AF~)1B+LJjo$Oszd6!+)f|7hxg5WNrd-a zf494`Yd1?7J9I8Yt-~Q`;Dc25^r4`ik{sOL2YzU5&`bm|P;O0_fTN_!h=ZSFc#T zTtGq$(Xm7yP#+$sY#;2}{>mutf5-Jgz_4m4o<3#ze2VMc zd*`#%Q3En;EYirm&oBX`Mx|s-aJasY6vc$jsyrGdw3kcN{G7?tist14nQMmi3THLh zc!U|p;;^gxxFjfzl5!VB<|BcZ;3fHNPF4~rkRkDjgT|bUP+`r@cUKf=j}fAeb&ic< zWD{_Y*3oT9S>v{^v#J$?uW_M?99mJ@X1Vs`{5ck5XE$k9bA zJ1G$^G90#e(cQi0J$u!Wja>pLb3=dej^z)R$UNKnK&z=PGlt~?J3w)MPIW$ExVfT! zyFio^vzlY>DiuX~UJzU?5cFh%5FNt?it`zEy+Tha?9DZO<5Ajx za4{hehb$&!lQI>|o?turWsG)KdfVO|lG*+*9bLDctR8f< zF)UYfSF0ohmAIip=n6A3_@+gT#<+Hk?|c+c2#4FmsB@V`yE>r^*=&OF12PxXudb1k zIc{~y&`I)1vKTBUo?T(u*kO!hQnZk{_gp%K-xx~#;9~5OtGqGCX z29Huv7$ma-RTXi3bbWG|aX1InvvX)R(Jf|L;Jss5E*KV3nB*~(kEir+FQFKtOdwc` z-Ncw>oeNwW#l}*4To=V*-nMi%ON7cPPN%3sB?kpbe|1H_^5{tgAqGY%ow%AJQuW$* zH}oqPQMJ_FK`BI0k&jFq^C+Z_j!YqiLk!Dn>embOd`59H1{Vv3;3YZ}v=^5+o2XJv zPx16ISq9xrjWjZ%d5J2v^%HfSiz$b*0$~)x^$o+SL*^<8jAKYfupUf~sd7}V@IwR_ zR9+CeCH0#HXw850pDzIn*S@E>OSa??;Yjiv&ipl-HuN6-ub-k znjm%u!QG+T`Qv%8Sj1@Ss>Jsjd@oSN)|Ej*u-M)rO^%cS*Y|iEyL!s#nAq$b=nOqB z2}6ggqjjv1V7nIYVsTeIKEvc8#?X(ZWb-LXM#@xhj$yGuO{ZuRqBw4A7nj_Egb>I) zC$u%IpD)OtJVVQY_F{papAgzLJ{XF#QRdU}ddkyaXr;&r>YVW@`)P&$Dw4BkdBZfggG%%~pE7?w+h+G8q%A1rDz zN2#9X)fH$JMfgU89|%^UMpZ<^w+XXS;)j;tQizxv(z>)yp$$IHIbCIUMb*i!70Ir^ zzIX5Wz`aVC2&%Q0D}>%rII8LR`JCp>OZrYRe)fc7Rxqqqv=}CK{GWp^uG*?{y={vm6QDz?i!YvNJ?|O>opK$t{r}*`n=EW;E*N*u=e2TkS zpsFgG-ETUw=_m%32!+fvzNwS=%`jZAaXxu_yFh+E2G`Rs2Sldu%^Gi2^jLNWNWJj5 zzDsK2q~I+^5L%j7ZwaFl&i?TWWY>V`S^V`avYOzUYnnwzar%g2Y;e}&+9kGAj6Qlo zK2{7@mt22$LGk=Knev#k8Bz??udeBr8@z}vGDFuQ&6KPX_}-%Pg68HOZZMRyDXR3? z)?wE*UMuoRg$NQ|jWCr#<(}sC4Va4l<`Nrnijlx>dSp4q6oO&7N`Vtm^no&ro=sz6 zQLC7?XdNQUqQFo_dXo$-SAYJQVCEDf6;^w8;^K10+X9!HnF~7lQZE%l8N^ zjR8Bux<{0mNh`;4&J5S&e)E5x+AE@~x) zu4nwkr&LqP=I5J8jdJ1WJ=!+feVOr?{H#Jqk*xnbdXy(*Z|l;b5h|m2Gy*#?tOvYx zWalT)Typv67s$N0wY7wp#4A1ofxe&9?7D&c@l#HJ`w{l?6<2@$iC~Jo1B>7T5$^Y3 zJr4${e8BZ7+-c`;p8mqNmg!fYGkH3Wc?0j8&)YRdisZo4&@H=UV|Un<+3zL3kIqsm z&vAW>=$10zh7e<|hn{v_BXtp(iFSxcZ=wy#R6xrVMCOOM?|K`PdHvAhg}}E1liz(s zk#{V=zeZOh)ObvJlG9%f5M=+w!`%Mgr9ssli(p$FdIx2P;W7uTXmL!f|9N z`YZM-RpzuWUmS`E|F{4@^@E^zbQ;sGRyB6hVov7hjD)&L%p^ke-Q^NlRfNGuOCGhg z`$_y7r3lVO|HbttiY1hcZ3J-;Vd?`SGjU*~umZ6QZ0u1Oh^+_}xoTTH@98dZ!iBTavGbKo(1+c8NJu(%IIv=y8ES!BEpJYebRb>w)sgjQ;W(M?A3yD^TMCi6c0LG%zgI zh&(E|1(Ex#Oos1!yj0M(49yUO6`YUuM}QB3{A?BtF;?}?^H*gCS!5CE9J*LADV@YF zpsPFzFRegV6}T=2JGcRqAwL;omuqa>M^Ox5rX_wDb}g=9-K06B?iqiF$V}{(sL=>L zN=bxAo1)mMmv`^ZsQ2gw?n7g5BeD|T#6r=WOe0;wxm&b^dkW~=zfb(i>pv*1EiLA^ z01lxQcDW>=G1Kav@9Eb%55&TDSgc|fCQ}gw+peJxtp`d+6}@=imxkMd!?-5NECbu) zhJ@+`AKg|&vau7AY&MC`HEo~vn<$R+gN<|0T4YgC%&J{lnVFQ41|%dh*SOU>Zkk%5 zs}Z`$2zCHG{bBwv`Y6P80yCRpN`-4XFa^^0alc9d zB|^s-Wj|QVd=@Re1`9GEb!?5hX2sAFxzoG-Cd6m+pvr>Kb;!{OhK_#SVrEmckujw* zp>;y4U5B81cLiC6&R|&8N!KEdoSWBt3f z4(Czh3aLEZ)h2=@|2IOPL-L%@XQOCkc;F%8gXgwp_LtHZx5)4vI!rWK-|r=L6QjC~ zj%yAAS>`eLr|F`GK&4=_?S5P2al9Z9TPlo?lpTabYK<-w!*YW#Md}bm4S}vENI5Xn z7Bk5iZdQ0FQB@xGI#rDD27%BTx7pC$tkKgGOeyK!UPb@pJV#dsAw{GSUN3Q8VaD9-3De~J>%xz{(^q|8RMzM$pXKA!{wh|K&DZXGtPeZG0Jy| z7P5_9m)K3iP}?- zPsx2B9;6a!C64a$iecl?lMxIqA_w_4g8Y!T#=}7>hhZg$zvs|S?;g?NaV)pEbFIM9 zEt+J{md0zcjtt~v^YJc)b8pCh%*(zLA$wnJt`XSv65FSP5-qNEhisdJ^}-W^j@l6w z_S7^X?x1=ch(dP-h9=T5HZCS|?YyfT)^-Rr;p~r}66zIw9Wc{^Y@A`+o?&h2uivtH zbBQ|ph(~|;gzm?0xp}!__WQ3HO%)!AEHvH4CChK#FgVBf`KOFOnnmyRddcO#eoH@$ zdGi1Goc`?#RT9po9+*&}3baGNW-8&7dQCNxW$#Rea8s*@8&pPUf-j;fEiDt1Cn)QCljP}xR4?JlJ$!X`Qu0ABT2ugV=H~V#5sd0bGn;L z)aVT17BowkeEJ9}75V815r%ZY5e&-?XC0dtFJW>@E?ZWw7SVx63QU=$jsSE^$NUc; z<8I#3))}K`vq%R^K+;i6y;SJTbM-IZvRT^1CH(~s^gSV7uI(9p@g<{)<>LSR4pEfv zz5e|O^sk8KPMzkR6M9Ph+!kph8?oRWa&*f1A3sOAb{BNCvx$TU=I8xED%QO zJcmG#n$eS-<-ff^RC8Q&LAxFZooD`s-(%zzH!m%xzdhsTzyAfRCR9(Rgr-52Q;M?+ zWk8fA%}+mY@vko^KK_i+M6&$u1;H4C$T|DtR}{GiBdLFWOM3&8-#*3Pyyo3M|Ad;1 z5`}gDow+VB|HIdud^+apU%uhy#~XB+9oxh^i>Ki1AHF2h13_y1&~yDS-^28TYAhJm zU}j_7=7MG&IQyrsahErkc|^3^RiyZ4^EuLhDn|%=!{xvH2qsT_^)aV^_!Pff(Dx3z zUeGNEve`-8OSXHDk3#OiKp6VH#b1b?{AxUl9oelNosSfVGl{9d`bUM@|I)?$f$Y zhzC2aB0l}Q9iu*)p`%oc&20NuE({*QJ7WAdQO4`9s2?A6OafI!6GS=%ZN=8 zx-#+n)Xsl0hN7esyOt5T6=DDHMCxR8F#>oiauZr1GXr*ujwMU2e!%-}^mF=-rG&mG z$ZhfAcj&s%8YyJ7uTuu41GesWvGhVFL`iD0X@%d^*xttPDkU1pq}-46uq^WHcRaa$ z^sw(+g3w42g%PUCVQZHqG-j0JnKMV)s775QURMs~x%#oJSY~Lu~hoJVRKA z4+1kE5xNe$*g%$}s~opkBS#gX?(ka1RQB!RbQg7(63ohC*ZVniXb3)v*nTN0S_mSd zXiVya+!HGt9&6)4E+Ez~#vE{K#coV)?Jc*i zM0Yw@GVVFSx)c>IV_ju*;=u=GVF=d6xcM~xw_pTHVJ4#}5BY1o_+}p8;tbo)-yz}`}M0c5JUq0U7w|(sDh=>LgVi2B4d-^sqTojQ4DrCTQ z7T0!2ouQ`%VQ{#*J?f|l9eulF*F4RWZDG4xuXI{h9j=Z0E6(jgRDvB2toY)0e`g&| z&uv$0L{XAWtMvSC7a}Cyw^zwDcDrqq_ka82LZ~ne*@*K$evKTKTz&h3;0&jK{2F`p z6YG`X@qhW8%{Sk%d0mq~dyL5xW^7QIh;#(4P-V{g+i$q~_5xkxk@jH>u5a-|qLoQ& zdQ20{Pfx+Guw731XoBn3_@=-A$a{p`99uN~GJkmQ=pa;uG#*#iyLP~@zyCgY>}XTm zSp#hi$+sw+Mph-b4c^LK#PA*NbNDsSoZ^@BA|ZGl*KKgUK$WBDQ7a^_S<+oB5ZR1u zs_3pa%zyV4S~Xn$>kkZ8phds|+T`rys@_L_l8z~TM}^CwL&z5GvKHHS1g(;vV=CmM zO7MX5F9}1RP=-&jmkVT7pbdnrNJ7Rq(d|eMF12rhXIQm(Cz0ASESD*TEdHD-ClDIy zm+ug>bI$(oG4^tSs!CKIi*egI`m2VZ0_D?l-0}?<|KrEVH`JP9QXzsSo0inCUr=B7 zoc%9ukFnLZkoiqOA9Oc)%{r~+NmI|7d^7Bv04anITX_qwDg4x$k z@aq-z>jhqB=mLhDYr0h+JDr1D(=Ym1cxQ&Z%;**i7@hIxAHPJoh7crrq`3S)|3cT4 zod1_k=->Rv@)AzI{sepRn)>ZEdj5!Fp3%KsF#hrx>mRa@g)al1$#z#-$ zbO5*YlJ0ViwH<2uh{@v-!{r)LW`v<;^J>N9cV998WW@5Dp9yMC^`xX<4P=$3U$vNV z&TzA)Uk{*T*K_p6W7;3SVezJCd_IlbbtPl_-MZ*cUAGK)!@gWHD?G90#qps^Io_#`*4=jFooorD5lM(3P z2ztc%KYoc312R`!|M?qMZyHn4eBO4?-aDUfuVGukw2Kkd zshcFsR+Jw1n&P96F>1xlUvDU$p2ecsM~#AOYl73La)dP8@fbej(*_s!KOrJtzj<>( z`Pmo9<`v6p#nb=y?-<^_WcAHUn%a`hr({~v+$=zqOh0`_clDa}yA>*ne$`5w9Wdr> zztgvDoxYF)yKWf&=66g^J#YWFzasLxoraK-GI!m8BjKHee9H8b=M*KN4k&ANA5&WM zNKNc6-caAHQTd3h&n{SsCPaegvvE^$n|MVkd<<6o`iU^cQ zt+9Pe5F*wiQV{wcCj#Z!WAf=3VOOkvyuzHGAbf`~W$e;5c1M$n>A5A@e2Q>(PvH>~ zX$1Y%H9=OGX+f|Sp$z#n+r^hZv{$K7N%Q0PT>SGb1Udj_T;c0>7xJM;F^VzB3}poU z)dEZukoaLh7DckVioZa}Xm2(&!yW_?2fQIj?c=Rqs!aBDDH1&R|0yTo?eBjO&G|qy zTNs1f#`Y$rR`70*!e(ZN42fik5)*j*e-Q8Nz>?+A^Yd^G+xb97G{pOW8I^=Kwi*uu z6ouG^qa5(jq=+Z8AP#`7`yCOs982+w2)iTboUAaob&DF8+t`lup94!V4h|d#aibzd zi-vH_Y1@Ss7>z0vcHLuUV;DMul(=<=cRo66R3*Y&`b`_hsYp?x!A8AL3Lepu5h?_R zwk3oRDa0Y5$})IH7ildjPV^aCH>ls;ytPxaBV^#E!f9_l&@p z?B`=4kn1~EZUOEV&|#0B_z+MgKGxT z6M9cbe&ABa@RP7biHYm)mTMcf{L-y|wGd#kC}3Q-AT_@05XPV@gRNU^>!P#FRrE``6Zd$>GzmT;{$iUXDR#m=sba8}C}J>! z+idVDA<=u#nPOPCs8LDi`{cyn@h+}^1jo?y@t`NwZvTp4z<~2UW=MH3lM;qL`b>|D zq|*>c;TcvNf>g&yE9_8tfj|_|f-nrxb5|7_w~0jpBH)JOlNE=ks<=gZOUMJ+ww= zv70WvgT4MHYPW3c$O*?#+clW_?GS6b#={7ZXho0_JCJ*D+?*u9BwpfQ8l}G`0(JFh~DxgJ}Vk%C4|1n{C!SdxQqIN)cvqC?9N;NZd@2-&Lm~1}76as-qW{Sn%zGHRK zp|#j;ibxer#Z#*d5&1<@A1u&2N`=ICHNL%NFLxV8e<;>AeBkxoBUFwo3h*7SsrU9a zA9Vk{vOZXWIXR6Hl3~Ar`g%=!d5y@&`; zJR%50QK3gUc5y}h<`Q)pmFCL#bTG%sGTzUl}*3Ksle8GZHz(*K|z}YC>^R5V|#fP-G`F z+KX41^N$#v!0N~AME{80mG0sS>pVi2L~I=Hyw!&3A7ZefkySGtbq(y`uW`3yk#G zdKHsn{c$p-kP_c_G34p-9J|~Q6$C|g zc0w`Mbc+qn1vWpwz&v_RH41dAfKUVN+e@hCOrB1ue|n3apQAI2>zc?vS2Fo-=ae5m zhWd)dcds$iS?n|I=g99i1YIK6i zKxBq&Qei3;b2wZqbbNio<-h!Z&nlGoHT1vZ?x?K?CSQKe{PWZ3B;*ZpxZ(0&e;}AL z6(bKI(C?!}-iJWn&mF<`lCwX4h4LMJC&(sQOuz$hv7p~`32)EOd*(CYt|sGfjZq5M z4$<~bN^bl83MrFNF*&+qlHvNAp|ObI5oU}mJZ|0G+JD6^i%J$FWR|E9eS_PEqHP!T zppiwS%t#I0^#Ul!AB}PACH2p5k*AM1`=>9EeZ#O=vH1QaLy%}~P*UP-Pml_&w`qY7 z1nh{zAijVeO_9bjT(5A>rF)pD(_r5%_jbT}clR(A(xE)jhFt5J{pNF~A59rrOM9_G zRuv}eXx?_1X-0ps#+*OG=z*JWe@2c^P=14L0>$G;WU~@wBDm<+mt6ko2b|3CR`Te- zentJ=H-yP^&VPGG^X4t9@7^(VkrtOvPtYm8JR57)KmLUE8Nv_P-ZTB`ORBSs)ptLE z8j+t(VX*rSMFItNm8E%>C>ho=EW0@G(sP^2AT)Q@M^zQHFMj6gUterpIR0?~ZtA?C zJf9Hr7TB)E4$-qZ^5UXGTF8R(tcvR7HgV!)@|&E^$&+VgkEdl99a7kK2!uiii7XU)R6*A=EH_wd2^h4Ap&BvX zTwv=ay5wj}chkpsavOcL-7utaEq7?swu^8WS-ms$k?J^9c@GyCdSlw~fIJ$0c(|6Z>*tQA%(*ekUHC`+ojUcePa8*w{7lQ@P2ST)(NsIBUq1_kMZ>e+xr~?Cbf!I zU9F%vouRd(etU^5W|&Ok`W80`%ExoudO=&;Xn@pN%ydpx1e%K_swk6&f;1P{2{gAF zh>-l}r8Y>dqlID}V}Z2^xS_)bh0+;>E*4BiqjM8QL_((SYKO;T+lCMfIui()0Yh}I zQ3k06ZtM3e0s)(xA4EcmbFxxln+-$nQCSxEI3NA^ed3YpGI`c|;^#`^Rt8JoSX7yT zbt(8I@>FG2M#1iu`X@9p3^W%vc&YwfP0L_CdOD(*jk=xPv{%E%dNFu^eq-Tr+7Re zn-nbn?OUuIGkH3pdHEJU4D?Nl%qL`%G3D8ad|t5n?gth>ub6%HB_O~3p^oz@$c+5_gmRWK+-&eFr#daD-@NAf zZ*Q3V<~Ni@%kp*0$?reKty+R@S^x9`FDvrtIK{Lks>IOXJDW`TJu<7vPiK*;bt{_s z2qC|NKu7dBa%e+bs17-bcRV%2PPpcKkLzQ6tWZ%r=2kbfmn+nGN`5j;_E3>S7-`xn zx^aYixQ4gUZgCe?z4Ms}5luDGlJFSee*ZHF6|Eut5T7F^VIByZf+skEkR9E-6{0Hf zeH|$QHelu_WYaS8JcY!!Yx>KZ7|Xr&i?1zuHU+z3SldXy>Ibq%PZ>Yb-2C|m$mV3T z7`P%$g_%|02l~Z=e$ik~&KZAl5`{KH&HBf;^i8BtD3gJ+xZw9kT@me|%;{66Pcm-) z@{-B#zD6`PUI^^+hN1E3@d&%TK~|^CzB|AC^N(DA^OoZLIc6m3FRlo(AfHbWGLD5|y<}Jq1nViDJZAjq z32t3ezkEZpY$)avu!8*j48f3!eU;Y6bg)qxx47iyn^%Z(oV>63yAf#LS*nkoQ=Syq zE?`O-Em-R`ARpaIj@))| zgNhyRtvQa0&li03kM_fc{$fEeBc@+HN6Uuw4{sPcnKU1fVifFvbCzs$8hN`e`DBM7 zT3)(Cjff!FAs(Qm*++5T;fb?j0|*(@LY;FDW?T5)G5X{g)oB@*ltm3XL#d9{w=a>^ z8PhKx(Y?Du&t_z$;QG%$;LViLX~D2sfU3ynW2BDnM5T1!s2}i=YG?%AO1jxq|YOIk30+{xH_L>~lh3AwL( zTx;=t3?x&9MjEkmu2Mxt_vQ`DZ{HyDd>f=vOvj%-Am65A+z$>Pld|rj!iSt6mpn(` zr>_6SXa1$@)oyU?IOt(uXcB^x3vS!P-b*ms@-I!KIoS4=7peDn7Yk^q^gYfAFT8ryE@v9+ao{)Fmm6jj+1%v^+Zs^+%X-Z6K z5W%KJOs9g%Mjv0PkH#4y5P~G1SGd)ZZfz+ZpCWumzwQxA6KsQR15!GMUQnE$P|Pyi zs-~|8%BN?z)fLO1Z>T>11QXV5t{v0Q9?`$O!Vi{qy^4!fRYjr8PRu;)Pvs#Y-zvq= ziu=dvLt{I5$Y!H>aJ~;I3U`yjl$J4KxAi*#$)3j_IjXxT>jUJ&%wnj(jt}T>i3soG zOx`1U6^XML+(3WRpl1`5@_2vW^|zkk;4?`h8CFf&_{9U?ktNtDutvDJp9YRRWp|uE zyWP0rgW1NTtCHXwY#UP^y>*zAbIO@y^Yc4`$Wd85gly4e5d=sVH@9-i=;=6iJA6;` z>XNSRA6hZnXfJ5rz(H9oiIB&!3>AqrFq$1R7HgB&%nTMN^zeIc97SO$;cyf*wmZ5|Eq>59f z-B7<%{vY}?A)>Et5R5;05)<%zqFK~6-A#k6D)N&N^bOsjBb!f<(jNmchtu+C z{vYs)~jvxx2@SeM~t4Iqh+)j9omDnM(fxW8XTsapi8}vwZ`GPKGG4yz7rhh zHmTdhFY8-Uci8WQA>$?B&Iif7NsGLK5h zH9{MPn|G{VEmG>$p2sEtyo@I9I<`)O3&#joLO|o#v-q|>t~lR2L1Vg8ellk}W`wv^ z2yD@wn-*DS469Xa33`D!Il&a_2t?kSWE}E1J$JmB@AIWTLW%DSYDmicc1?e^im|N^ zxp4dv0`SoFA#FUFIkH5`W+NE-9X&zZLv^{YK9?GX)doL+GVaB$!Ww@m8~-8$rs z#u1792cZH(VEpk@imAbNL!?Cu5z&KPkWNc~y^IKST8(5?&|h65M<>j`dctt^j{0qb zK0QGjiEk~s64Wo=K{3L24b`(}FkG|v;hKDQN;a?JiQW20ZRy&>L9-K6$fCfv(di_A zd`ed3VAs^|*68UeCW}R(w=o?_Y5_9R9HiQcR}Y;jBtpj%vG-AgB{U!mptXT)(B;c(N)d^gR?)Oc`k3UL*2~Y&wp%Sz*A|8-hDnT)7pt5nM#M zPv(eVf7RHIBGYi-DszAFdH8ctm?ie8t%&^3;oV!h2F9N}A@tqx@7f8G_luv@Vvi!- zIz%5MRvdZAdb{<4-LVBDFrk0x8NzL=oqe#1xR28ucIZ{?_$;yAwkYoKt=-$lZRbvi zVFfZTky*g5YeZHde21*2Xya(#UE_VME>&4loK`fi-!gRUJ3YNc&1Pt02|h;`(7e1r z&(EpOE9w_78MYLZ^u_qWl0SJ$UJPvBtQdXz3G_?qmkWxgkD}|v>jio?!LJvn`D5~Y zVD-ZVGRrWdF~T^ys|7M2A-qRVrszUqn+>kn(z*g_G$Wrtds$;n&ye2ULRS;gFXDlH zt3M!72EE;m0g1N(RTzfl70qRr+UWu_iee>i2SQNDqC{%wuWrcB&QT`Lx#-cpqoc5(n|#12&P&4&8*6+xQ!Zw2C)>mxr{^7B)QlhKYUA*8~$ zb^INNe*b^R{om)p5t7r-wKA>am%J50BV9U&9N=>Z3;;G=L= z$nCvvX&P>c6orER`Wn~An#9ac$xlbv#WmgaI(CTfP(+gWaU0a*{R0OKf3P3k(kOY4 zG!<%;CrU!Yuxt=A!_3A=6Oqwjxdd5~O$yx5$F5x1^Q?W{Bzhh@3%qD?tM?SG4=kWV z*aM2fR7^g7jBru&p)wg082k9oQR^ld7Asus5e3+dB|n=oTwUM>O?EoPE-&dDPjPYz z^w>=ulc(nsa54T{Xt4v<`o#^ya=@I;$Yx`NcZ8v#uRZx}j0iQG7gty-K{&j%s4S11 z@yQr7DiR=(fEE`Jnmyf4ynnCSg%}A*5P|mPC2}+&KPeC@7SQ#pYlPVr&{9mZafz)5 z^7A=vb;ICdlA5Tdj2=z#-3HeW2$>`3sV|n8lShosBA=vR*2t>D-Mr=I=S9p$?+4IX zI&oWqi@t`+q`{v!$aj5RB|aJtn$+xWlgKQ|O|I?frWMc#&$|OrC6$Ohl#+f6vio_&$N(1J~a|0d5y2A_;a}+eIJZolOD{gs9wuir>ro+<&1$ zY@I^V$utCtvoUV5rtc0=jJ(+^D@!7j*0uRw|RArj}W*tLoe223dr5fsY z1LKcp^zYVS6#c3uo6WH6s~8%AK%g*_DM}4=H!Fm$$fi}4Tndl3hv>w8<0uMzRc@ki z?{*RSp0OP~Wb+X!69*|zw-M;Q&6JeT-)yi0N3;j26?V0t@1Z!ICEKC<=UZ?NT~%bW zVmJRo2zNILaZEuGSr)}~?^Y?%a!*6a=Hu9j2@fr-;T{A!a-4_8#sh>9_wzA>h-+Eb z;;clM6+#X8{=n}(Bp=qT=*Z*<fe#RN|dM$|0u5jwYB)P`|sx`go|2nU3H8dPDx~6Uw4x^|t5q_n*?eddbi$ z#-BXKUcO`TW>Mp$2BDJjO9e%T<6Mpt7*=%_ER5V}D4m|UxKa6?P*@vz{!9z8v! zm_q$(fhxBm;^Xx?xaeGyos_uMnqlq8&L#-g(O%V<=>%O0x{Eb(TtUC0x$GipWuZ`@lMXA-bfAmeCs1H`r#_^I%ODh0q>^u-LXoni7cI%xs!Rzjqxe z9M^w)K`>RcFca@rjs@>_^sL)|Y|}IO>IX2&kPi)6w5shn|e$_hb{rPpR0MaM9|t zzuDjhc7DrS`XD}e6(^ciJe0{~0o&{jrZS5i0pBH2;C+SGp%=AIUB)|W1XV_1H*1guW?a(UykqDk z)yXMBcGz}6ngW$)@v{X6 z^sX|)HqtY67MW+brbd_;THq6cjMOLY7p(OVD3Qs|PI>NU-0iT2iF}W>Bu`{=iXqf<^arKh+Y8|Ua zol!oTBZEUIL3??_&^qV`%-IRWw2bR}?_)%=f%e@cF6ihLI}B0a6u_L!5Tc{IZsR*u zGL7fxY7+Wk3&Z?E8#Y==n%U&Yp6y;24sIQGWprLS;sM_g4{Z?+vGYYex>`wm+r+r^ zQLziYxp%$=ze6kTwr~%Hx-qx{55mL(-F1TOWE|hsQOh?SFnK53KcC=M zE1Z>Nr(v@4HP4%Y?D=^UkEK$a>@>~>^|?(&BAx+XtMsb7Nt-_Txcz+~W~C@()h zL4}_B?UL;5obs%qy|}@yo5%`tF6sd$BM3I3{Wf)C6uxVa*$6W&!3~74^~!hq4gAP% zKBQMDQvgc}esQS_xaFt%XssoJiWC+R!yMwzr1)M2`o$7k6D=tV5ryw{OLlgS$)LSj zVTugf#eK&+OE!rf(z2RUo@Dfk16Pp1h(20qv$TL zaMn;fnqZglSx^~DtN#gc-X1r2^0O0+IoxK&twwU#hn?)Iy?yNVj<1}$nZDi7UM`VE zh0HX%%#$UdU|21&jg3~M(-}&8`m1FeM>->$P4@3WZYdlhSvrQ)p%DlB6?bW3TH@Br zyUtp_c7OKKj!kNTYZ}m5O4*A518glFZ+E)ly5iafT%>~`BvPuqt)+=T(~kBbJg#YX z7OEj-EbKbO2k*=eNko~@+j^{X;cb8%E?bl+BcU3S&~oF92^2_G(r`Tmd0+q5OJOH zKAIqi+n}Dff1N+nvxR+!HKaP!*EQYE8lm-4{ICD7KPtnfAxyD|Hn6YRU(ay zhS^DBY^GC8rS~Xwh%ILCHuN_G*?h#Xx51bLpFrSk zi)*^Q3O@MAZJkbHYMc-E+gLqx|Jwy|xUY46D}?0s^~CIWyV?+v!u?L0;g_uS?z`Sc zzL3l_g01PVm-tYS&n8F{9_EUN2ZV|;nvf5hbwmlINXmEraGPj5DYq#}&POh^jmp|B z0vW7js4cVKe9r8XIm5c8Uv#*BgCCObqm&RDZ0*pal76{DPv*GwTiP15mINg+O3-&b z#n~gYw6vES^7C`BEkVY#FKHz0ySFsgHTmfiva!I`&F;MfJ4C+LWQ;OfbNUs595YVQ z*2#RmzggjJbm_?EqbQC|KI3X!F4jo9(&EI~azUjeQMxTGq z>DP}K7Ax8}D?(9Hj6K(X`i6l#*@AkMHiXVG{_U4&v1Iu}P5F2h=ZAC2(qO>%(OYz< zu6}SFMY}>h8X?m{6Wn%D6?ez>R&-)5-g>f=QR3wt2ni3zM4D&ab)9(P;wV-%qQf<= z3n{VD-#g!e^GE2@k+3lwqdihfhIPZRu?Q1e)xk&ipq-`TLFMgj+gm^ehY(TdyZ_EajM!e>Ftp&i7W3#4MszHH zdQ0)q7tB8?xcTRwQL{1F0X?qpO^q8gqc0yJ?1tv8MaY(Z<;mt_RF#uY3WOi?JN3a zjSoI1f0{AHbQJmC2UH;;!SxM@B65AVYc>#&6elHiwZU#(Ow;(&RS`LiQY2w!9IIh) z`-tnz?6L?@aSnz)rnm_l-F1fje4f9D<{IKB0T{mcf=xzBs3U_llcuuE@{M$)+W~U*o%UNWFd7OR21~sG`5D2j6Y5 zjmJ#Kd(@p+z?kU>GdBCwPrq*?)33Swm+u+8PGK5pKG>8JngpiiGs>h zo8@Hcl2}O1Fiso{G8P8BfPWfbl+tj!r;F>kAk42dpO;K{7U)Cw< zFvE=Q?|$6fpC76L;yiWr8ru_7Y5lL*pMyupJUUDzJqo^|yROmWIlAC3MeNT0ED+Mt zEtYr}ojs5WCDks`Qf4EvS)vUE0b-!v3J;aK$Hwl^d1!}R;2Ou|tIwD|9pin7T9(=) z7#LP{^2E-Nc}ewrME~|J%~k9q>9NMGS9o8bGK;Ods14Zyp6MVQ`hc2D@a=;3x&b4R zK@n_^8lN%ybj;PC{)|&+jL*jq8eAt(WeS>d4v`lW^NP?nv{xH^Fy!+RrEek7_lQx$ zQN7151V?B^zgQ!(3hK)k3Q7|kwxXxncF->dOG-(r7@g29_aSOx5 zumIn7$g;wW3qo))lGdx31``Hs-KNu!#xB=Ug{xDX_cqjHYk{ZYA{r6CX#OuujFlBx zfi6vqVE!OZ)&T--hgd*wmAdJkz8_Fk6Hbr6E|4AG+P98z+&(Oky$VQ?#&f+fCWygV-TmF;d(nm9>b@ zBFW=VD23}H2Qs1vTM^+N@eR!eXZ^Npj~l8@G2WSu;Wk^FuRx6QPOV&TEh0!nLeHbf z!5jqI$lW`*e=OhPy*sxP?Ws{pv%F2|iE2-VO@|(j5h6ydN95*!QYF-GW8T$~gWa25 zY%kLaw^=jP1A0^)ASDlsYbg$jPvCYa%r=NeB@=z`6T;o%9Z`&O&;3IPvE`eheBP7R zu6zu*fyqe2@x%rWS&L+!n#3ZIl9OZDur1QT~I=>yC4#w|CHMPZ}w9A-K}<%(g`5C#{&+cMup6K^+C zp<>4^_<){FkiyX~Hz4&|URmfZs26r&s!f`rfdRAfdv9JEY*bV`t5C|0$ z=A4ZwbgC-jKIjib^da0cR^!?qE&bv%`L2)q@nHzefA*ggt*)ywIRhQK-#k2@qc^#` zWwe(L-$L#Rv5<5{p^xiK3>exTz7G)pt!C<>K(l)_4exm@V+dV?-E=7${R8&r9lIcX zX6I6ElPA%6vh@|e)PPRGA_;`r6@&Va5*mT4u&WluZai#-%y((D;vSiqLr*F~*ArBR zE_3X1folguo~QTV@O=`)4-P%82z`sU5;LFR>ou+q=uwv9%MHN}JAI6qjq&vwOcAX( zy^LXHF0SLjd4!Ky6SnSB>T_f>$m~`Wyp877cKmYCb3t>jn=~tgJIxPscmy3z+8$KjXn ze_sK8D{SHztrquB(3G$P1H)p0b8%Aaf-mlbM}+rS35iq?l<`224j>WX61zg=I5^_g z>^ypAfzY1*<_6oQbiVPNd>;KA@2Hfwz=uhKfF|HJYqF0&;n6>QjJ>&`TMgv%3DPfl z^S^)3=r_M*a;9jnBceAn%Vg9(W&F`O62DuZwDGKeevJznx2&1{*WZz`;m!Z|JIddD z#o3onSby^^F67aV_iBR}O)!;77CG05Vumhcq@ws1*YxQ-att+;PamOl6k>R5(WB^J z84&ocqra{}8nRh|kUj;WNV>~4!sKLAgUs`2d-b|65ol%~S0D*n?GZ%lm z;q1TtBgQvu8*}}##rr__?t-E95hZO~9N!^dF ztyXNKo61B#WhoLjG3jG`IF8K~vEXih{*lYSyhP+h+F>W0|I?R*#R79OVg3C#EMB)L z6NQFme$M>sPf`5^@BaH=36p0$`p0K9S)q3{PFk`BHD1? z)Sz>USq9qBz5bcYKfj3W@}mRtFSzg=xw(aV^b+s8-ecRq=|BCJ(NyB>t&o&k&%Ez= zksL9^4pHA;L{|teJE6n-kW5eTyh_T)ROa=vM>9vqw-b$)0_LU%h1U+H(4bFEHBCUM%oVQ9hc` zU%q4Y>Kc_r%8nY%Fe8)do(xl}9niFkR6iJNLdkT%IIi2mz2hP!Z7YQu71ZB;!@K|f z1G22PQQl!1tV50peA7j)hY!fYq?28Wfo>y`77k8;TLe<(IRuAq`q);>;>mm4<`qgM z3V?!sh~1ejKhuX_Kv@HaNn%3jh=PO<6g3?F{UL%y!1swmQ|3{8xNV{Rdu@Ae!?@zZ zua7>n0@rrG5c_@1SBk3sTNnF~PGyJT4dQ|C{MM}>-w%s4i9oCIt0$9S} z2tL^cY8?e9&Zlt{pH&rkI%Mp*^uB3h1nIOwDxzoh5XC<+E_{!e#(gyr>=?=N8e|-hxZ!}zITy0zI)n};3xp#mXHqTA}X>A2l%CNl&0EXqu?o12^Akw zQm6o_(W%hgeGV59LzzXzdgzBJz>(tN`6DHv>u@PLSLG%Ndu~1W0a7RPEESdh)_o5) z2NMxC@BBe=Yl_<2X{Xi@2FCfX`+~#q z;*w`}7DFe*5dG9up6wR>$b%eWFp(RQ1%FIH680t6z07h1)`wh;KH zW>_@Hs*Hl5x=kG?89BcJWS&KlZa3_?qj%n!JV>IA??9+XpK^5r+MtRI;XNYLcSLbQ z$~1qvT_+MLQAXpM7FiZ4&V1`-oz^syMLJ$PfKsSTA zkJRcO|KVHnA=9|ch9EU6*Sq!5b;GUB$A82o_P&iWV#vy*{rkP}>iaSd?xR@y2!egvT9c0r7!kNN}^_txa1BShp6N0fQrv2snfvk%-Ipj`~pQl;6wQ!Bb0cFTeCSd#HeS$+1ifz~LzOU*%Zz3fZ`oVz^TNe(ddNe1W z#8^rpJ-%-lmL2_ajd}hN8QH9gt+U%FMD9VK z#r>yA5d^kdGt?c~Y7AUrktvXepiy|SM4%gPno#8%itVf6pRTPO1z#U644%$I`)L>uKN$u&b7q~9$ zIj;eH-{XQi5(jywIr;tPR8!5+Te`~y?bVWg(_m(gC}sw?*(9D+NpV`zy}hCQ^dppV z^vk$lWv5f@)k`k^{E}=oCmT=5=X3IrW%11qv`a;Ceu^1OT(iNo9#xKkhTt^WNfO}r zJ?h?FTq8$wbS4o-lTGq{Yjj(L@BDj3YKJFnT$$6n{E6$oy^RIOdseJi1SQq=aWt+KU@}hv;RmFBpCH8PX3(6UUgY5*@0w44Zh^kxJpa4c)s7I+rp1^by0`OVsR~ zd?HzW^Md@7Pf_lYi+_C`MR^EhHX=V66TIDV;iJ1jO&C(K;5}+`64Ns;ZsPjnEIwq6 zKYfBJ*!yt{fh-ET*FSOf*Vo9R+|LQ;QrkO%23wzd*Y=FQ{F?F9@%DfJE20|30@!)- z=?T@@395|ZvekEQFdu!)lmGfT^>^QJ@u#0+!BtL~e*OvNSTL*_%xpyS>ILgp4MKSI z0`O-V9Isd2MphFw&jkQGP8oRuqUwQJUXB1=2=BJ;rokmv~zOQK)Yl1hN{_#sf zeMQ&iC{eTc_7!3@qMVMf>l*LDR5^Ya@LojcC?qm?f|5uX9Z{%eOrM`Hynac&_T-OF z5PgFhonS^L3jG&X*j|y%#|RH*k|A(M9WFC2SpMxhZhpK$7y8$kGl+C3wuc2YO!t8g zF2UR2tj9G22#?B(M1LHRQpNu@I`L-|Qh^(~7;zh-1&Jv{^tsIQwTo%4>?JS#I?4BAV2)H`YRFTzw7$sc^doyXYM@;=Rh22 zLb$!hdJxIRDQ)6H99$m`UES}4>hCCWp5OERlZixQf^C_m3 z^otd?3%j5hp>?zv6iJA(70w_rlh~rRokNI#o{qp-x|hlr5*L@N{o;otMVALt->zeCBlC;V-}Del;H{FHIy2>M3ap3S_H&LV| z#IKwGhiRbio6D)Edhi-7-Ug(~qJMGk@QEO~rNyYSBpYW8t2IOGkTU86WH}-$CEcPy zWjSE+gT)WYzOORaO@r-Rip_RW6Sw6SrfygW(di*LkD88P7#KEfa*^1_dvBxZ_bw2r zgBir`*@W7nQu{AM<=KAA7yC|}t84mo7mNO1KsbYQ=*a}F1KssH7U(<5O-e`g(ZM4O z4p9{3(-ODd(5}{OgR-R3m`Q=#w5Te_H8n%ycZqFM-)`oF3E3?gNEVcmRzR55!t;=YmwEbxPqjH9Soj(lz<{~ayXUw3_s zQ!de42d@8+XFmQsQVDF`;yQPCUk~qFTi=6P|6&c0*7L(Kx7#;3I+P@Oz}9sn?XTjO zy1TodjS=EfYLLJ5Bip@M?Dx_4HrvBapW!{2$rxdKY&YyIUSqJ6bG*E(kIfdky@jq!aIv|14133(D!W)PN1h#bg7OLBo8$MzK^y> zK^}z&-35ojJ*kX)F*G<;B7>pPiFhzm0vx!a?jrru{ae*;Wi7pn+Bov&eG4@7{{%2PWAXvOe_S3#U*wC zg~L)Y{be)b7jKCt@!4QhJE zla-A^$pdRUom-{vG~*X(W+EsFk!Z6D{CRPj&}0@6q7iJ8pN zm7u@4j;-K9GXC-j-K#eQGo?7mV%Ms(`?+-R-h$T=buOX5x?*VDzVqfobds7>=v)&z zo9Me9U1g|D-bE>I7n8U6`T}v!*xPCXJa#jniY(cC3Ur}jLhwPMhmfeu5Sk@dfBpf> zJ!{y1fDiO-YKH4PlP^A@IxAAl_5;s+8-ae{neV-xWdF8(pdDg;jL`4zAIFdH9jVviWu6Oiq0I@($ zzpW4%x-4&rx5Zs5l#uworoUMNYPbIGoX>9Y-h)p8Lc{l?BtYU z0*h~dpk54UZOCUQ=t-8=UrDenzDd@1B0$h&C-amkBJNU0g+!OJ!$kmF54Zt}vy%0X zKeE2;Fo)>#hth$ij5SK{K#F}5AyP#oEwZH%0aY__ODY2bJWhKQ~ zMMyEs(MqT%1cOo@*T;6L>n+k0l#j-A*O#;_PhO2Nqv+&d+Xinnx{!ODsryb{w@LLM za!`Bk>2n+5tqx9zzvBKMND2P?f5yM(6eN(E6dA2>Lx&JKY8%gu-PdjZ?x^ss_vS;N zUl78OHW(E}ad#luhy;4?c15_UMzM{&Tw|?3n+%l;hNh-pcI4-e$jgD{iyMmhSxg!m z_FOk1V{tmv9eOq=A3^=*25$jjao$i&C&)11LqaT(2;pPbLEPRX9`1gGoxlrZmPc!# zp`pE8;!(ehNFLqJC+f9AN{M&zdx^2HMBRY6C!i)sRGuUC?GD|c-?K||NckQ{E}%*#$-2LlqjWQ!KhNiv`|P9 za88hw8AH7xgvcR|zvFhBce_|bw;9_tI43cq5k`CZO-Bfd;?V@(Y}mYAke#2Ck0i~@ z8!*u|MrB#FekAMyiiC=xM&b7RN$M`=takL{4S$y(#q3+lHEg3__*(=k&Z+=^E| ztO#~4`@4xk3Z{{W5aPb1G}`Exx+XP3B_3`14s>qt!;pB}(I5EE``sPFWCDHsJsisD zY$8th5IcbmA?g!TkAIH@DKHseloZC9%?1F*CZcP%mZ1TM8af2nu zoY9k0Xle%QkzSBJ8sj!=x}`&EhqIu|5{bh*$WP~JGq8U7j&^Oyssf3`oXnA7&H7DE zKAiwIjR!$CtFX%jT{9q+L1){>ndz<`=!D#Q_4X1+EWFzxbG9s#$*bg8FI`)&FilpFC#z(S+uQpXqJJ zpF4Z#N9Toh{7Q=onxlOUP;fbsO>`m)&t(Rx33qwR-ZTyI(gvwyZ66~ zKtC9yat~s)3w5{^UmTIu8~RP3Ea+}c`rzm{mh5zfur(nhn>v4+ulzu#}^vNXX@h*G1@E(;z3nyjk2bLJ^0A8l4oS7jzxL?FoJPK=u}A@f7TsGIw}0c3To zg#;2%cQ;j25jkg{P15I|qfCt@2n~eJ14npOqxwU#aepU@yBED0oE-vk5YdB39q?Vn z^5^$huOFuX9gox0AzfqROX;me<~@=@5ve==1Qoy@SnvoTai-ph{Pst}zw~=12Ilm7 zxN3oI94b}F-Y_7Cri-*sckqnFLul-S>qj6`NjI5bJB5%PkdmGc5yqSjQV{|Yg}J-I zxQzT_5PWzKp5cl0nJDaXPIEg8G1BM5_+1}<&kwF=A@R+U#mhIy;*9cgj7-FiZ}8|n zgHWFK?k+e4JTw*CF8#geUoVhZiA?1#*gP&1_RPzhFQ#M7jTt5U6B;gA6H0ZCiWb(Hl~jXm00HAzocyyAMI@SH!(Oo zu5*+xo|2EVNXL8Zo_7c*mZ?Sa`3@Q@$kO`;x}{sTu3m4w z)&(AP9`*|th198xsmLeZ3+uMu^M-~fv||1G9o4kng<1WQcY8CLJm5eJKXlIFUBc*B zpODCo<(oU&rb8-;ts9c_rwm{8seXJ#(nc-!I?^=?x0j^%Lez!p81xat?j1ajwQXEl5ZAfoUGNcywmGlo4hbP7# z`@*K}nC+f*k9fGdy;qc+xc*c}{7bHnDM#LQ_xP5Z2E$uJvoxfmK2o&7s*DG0Z%!sD zonCPFulIN_kSYx*%JG|Z&~Y2gY8^P0`iMupO&sci3rCWIR17|Uik;5!Dxq6VsU~ZZ z-iUlu(oS!1NuR-!g4thw!WU$of58*WyXYFNR>()Kf$6MW6Y% zKO+a1Br;5}ob3=I11fB7gWH5wTWXI#0+GCR=;2<-#`c~izFji^;T=9LLxSgrPLtSN zDWy*&PDcAdorS;&=N@0s`%WExuS5TvzUOG6Ck5UKRGMSkCC*4xrXxZpcAmF?^Sd3r zSfz;G;vJBH?C>tSrnt=p7~_(a+7_yTQc~mG4u$>j`e(;Y-1t-flJzMBn2vh6Ko>*O zBE>m-IL>|Wo<-yZZ#akI(3#}1_31I1ws@RRI)9g1v}4d)f+MV;wjS9*rubIF0pM$ z`?ak@B?`N_cK&J?0vnu-t+0xvuf~YIY$j=Mv_qTLS;6@5( zLR9C~6(UB#s#M~fLiG}S9W0!j@nje0WaE@}I;Xi=l3ZS(wWEGNLG=enEke{IA_xtQ zARUj;g^mXa51=;>bYVw6lS29s`-%wqAol=b_e+2Oy#w?<0)6iVKlwLe64`W)Y29wr zu;C|lF|ISwC{3_gLVm2me^cUYS+cz%g21hzI|BrP4zfE1QyvO@Msy4x9K1=+ZVk{+)mW;SE_ z<`zA=pgb?B-@e28oNPS6+cqEyO#?ny(dfY$>A1kRd+3o5v7g&;u>(7~L))PZ>aLY% z{q~x!6Gt4v`&^?Cf39|M)yJ=#^C4^~OZE!r2fjD4zd?3;fewGm_pFdvf@^}^m+vZY zDguR}m=#$W?SahS_-;oub~=mU7tvY~2R?|3{l@l8rle=1fUHhtA#5flR*57>_46Q# z+H#a1UY|m1?0QKzT_DQ=N#x+(pENvHK)1n%TuaQlCK-;=nc9lfK6KCBbb(hXxE9yB zBZ2M%>(hfsQoJBo&)JIgn;AkUA=y|6lDt4D=$19blQUeiWchkZ@%$6A!Z82weMrMg zLLr!rG}YTFq8Q-o6{H1{(8P!=GR7IexGi7i&rJ-FsGdaU+es8 zMAA!f>yB=*4BX-tbbm;GmeEcpv~x=`>fy~A+bDD?ac!`A3r-Rp&14zqT4jjB7D+;T zcgOnu9I+7)#%X}k8X+ScLQ3S`v-H*>vl89Uw*d_S)pK-^z8>zm zYn*C&L=^WC^`7qNjMIW{HVw_7jP78A;B#)4H6Dv^+BnGeTjAZ7t|lL%d;QXVTkeHx zi3e$`LMVi=nALh~DJP#VcQNwM(@Q%pma-xSvNRiqcCtyb5nyiSg%OS z6jL>Um)$j+-YjhANrrD~TvkwCjq%l-`gV@jCHYyw>g5gPXP?0Gj{>4)+;O$C1iLp zdP8&?+zrA=w9oigmsCIg#B$P*oeiO>uxQGw3tY9Jo~*(+M33-&IvUac zbVz%9!|bnjBu_5LGC@6AlJ>{Q#A2Iz&$~7h?LvzC>+?YbYOkx@K7WVMDcMQ69uE<=z#o~ z@7Y-(dbgW^$m46A*|*hl2%VveEYeq85c@qUNIe{r3Z(Y{A`Y_gZ`yP7-B0(1g zm>S!4yJp4{1X+dN7SxZ9S7VI4Yu1=mgDiTeOyisG@%8M3ayy{h;BA9hTVxu7O;p}L zv`1q9dVfH}5Hh6O37rBBw)MNcY~O}#ds?$=T$3CjEa}x5!Yr75cY{n5Y+GX;MXDazqje zEoW+)yBSXR7=3k4{nIs~H=tYG;bo6AHmBSI z?!8Omv?%cYSrTYl0Ub^_?3w+M@ST(PX$ShLuBEwK;k+h0?`@}I+XCr$58D&UN#&UT z@QS+fC@DUihwy;#_|fYHbc=?;*I&@TEJCW{y|d(jAhHwpd>}Ud*z1qQ{`Z2;#E#n8 z)-;oK1gON;i3RDx`D|lh+!=&ULzaL8@7t|s`bY1>zxaF(+-aGlApL2c_-4|M#Jiey zw#0Av!*D2Q7BbMEY>cOO7OzUqe)AcLY^Wy{?K1ej=g-fPcE$3i3Dy`KptB5&3rW+f z8kJ{3)a-(zj+rm8GH3YZCumi%{NWA86_if~tlwOdKDk7@2GjYNAt2Ft2uH!%u%2ax zF7g9W{&u=DNFxQ^Kkz*ZbfKAj_am!GOH$|)nuZU&+fv|L8&U~_i143gV29pGWR~H& zIu->U(gd067(yU+am22pTi4)2vX^gTK!9^WxRR$KD$+(&EQ&vb1m88-szu}>Hd{D@ zH!(ifyFGqqsAfZGMia8mGkx0P>!GlZC{o%b(y$9saT_|vF+W0aPf_-F3-BKK86m?+ zcD{qiq4r3&A%-`JQLw$XOSg}B?$AUp_7 zG8lvuM*o5JfCziWe2Mci6q(|1q%D#(#GJQr^CnnYCgTCFTJH?;#YSMZO9lKO^5uNs z?<;|=Duhl+hW*$$oL-wkDqOvyTU0TgH`=eo$XwqV)L;-?6}&%jJ%{=M6*<3NBJwmM zmlBc6h*XKa_2v&zm+iilfNd~UgUn0vQ9(PoqpL$4wh$oG5+OpepO+e)=Sb1fPJ+-? zW@$(#%+m0zlO()vbsOS%We6Yj8OC^|(4^xs@F~|82$T!rc_E|og;3G4 zW?qq=pQBSxGnu2y0ZJRz@8_tpM>dXb9DWmEB~iJio6aH4QPR=QtDOVU$09`505T%n zZc}Q3CCp)R$Hq?A77( z$J9gNqpnz-zW&tT5MbtO?12U3f3bwnL3S3#_|Evh@1Fmr>wm$|MCZkAle{rIXhO(T z@N5rUTh;56^mFWTLAP8-T7^6jP5xhbKC1wF9Ec7dIiI6b$o3Kmu4xa$+M=M)Zx)HL z*v^xUMxozT61!Mn8iUM=uunG)A`3L!b~?kk1l`MURfF#JL%xQ!VNY=u>jUpTyq$*X z-5siob)=KXA`1YPaoYrCkrpJwpust`FpdX_iqwvSJ>8!)j?rm`SuKM5(=XXu?*B6v z|Mvg-hZ#}~bups6?9(l0n8wFw-Vx~_+4}KqMh2KQtM~6QHmCRG9IZR5+Xbd|xk7;~zAu!D2^ zXrvFeTF!a0ivc;a!u|S^G6@~C$`clU{tLAo@Z_IA$5j;wg|DXE{KsE$ zx{sEp#=ghR+lhj3Q`icL>sqX{r2PxBQ5n`;-R%5CH*4VpA|`MkGgO+!|Ew{!MaW1 zz56@+!dma$$*6FIi2k7kLWSQilagc*Ji`y3{~ii0l)_d^x<$1se#ua|!nP}XtI(t2 zmd0`K`UlpVcLH7ZvGokoWu!xiU9ICKDKgJ@^Wu#Kq=?*jrLpyl)!Q57@F|zSe@gZ3 zUzy)lq-R4Ctr0rK+ci+4$|Q*WTuXaq|j?dA# zp?*KbnildiE`D{%?2mtPo`v7&rxo|`~Ud^`Li!M`_&cQ-5lL3>E?4B2~s)gn+e(TPmt!8oBwjV8P6LHezPfqsysR(I~f>)Hn)iv!T>@l0dFBui6gq<~@5GO*s{1&WJ z+H&`Y@2Tq$Lc{}G(g!)vr~25~oSRl~{*T|#8|l+g-uLeLNJO}Q4_m8Ge`qzwaX8IG z_k4K$q3|%c!T7eJnbx66bYR-|gcLF$zZaU9+V2wDUQpb_cef*k}P86KIXmT>baoqFqhbddy-H@Aqj}c9c zsY4)|N?L3kLgc(PATyF-4`J*fh`Kj%_0FNnf^?W|DS8JMhwKHZeD^)mpQZuCl`>4I z{YP-1rNFfY*K`OecR?yhfor?1s#$0i9=IbSPxfG(5W-gEHe);>d(ptUvj+)F`)YR~ z#X(2|9%P<{P4b8*CWH@mOg@ZAWS)m8(xb7qKcSooC_)$FQxkQhx;@=`iueqi4dRfE zkkLP&%o2~##14N(oNkJRz_)FPdQS9dpwYQdSa0Gd`QHQ$+#^lNfTTJ1i+(Ibaf

JZR^5_sGsB8kXoej1aCTQ-JyCt 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 z') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - }, - - initOnKeyListeners: function() { - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - } - } - }); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/docs6/_build/html/_static/documentation_options.js b/docs6/_build/html/_static/documentation_options.js deleted file mode 100644 index 5ac15ee7b..000000000 --- a/docs6/_build/html/_static/documentation_options.js +++ /dev/null @@ -1,12 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '5.10.2', - LANGUAGE: 'None', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false -}; \ No newline at end of file diff --git a/docs6/_build/html/_static/file.png b/docs6/_build/html/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/docs6/_build/html/_static/jquery-3.5.1.js b/docs6/_build/html/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333b..000000000 --- a/docs6/_build/html/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - -
-
-
-
- -
-

Building from source

-

Please also see Installation for information about pre-built executables.

-
-

Miller license

-

Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt.

-
-
-

From release tarball using autoconfig

-

Miller allows you the option of using GNU autoconfigure to build portably.

-

Grateful acknowledgement: Miller’s GNU autoconfig work was done by the generous and expert efforts of Thomas Klausner.

-
    -
  • Obtain mlr-i.j.k.tar.gz from https://github.com/johnkerl/miller/tags, replacing i.j.k with the desired release, e.g. 2.2.1.

  • -
  • tar zxvf mlr-i.j.k.tar.gz

  • -
  • cd mlr-i.j.k

  • -
  • Install the following packages using your system’s package manager (apt-get, yum install, etc.): flex

  • -
  • Various configuration options of your choice, e.g.

    -
      -
    • ./configure

    • -
    • ./configure --prefix=/usr/local

    • -
    • ./configure --prefix=$HOME/pkgs

    • -
    • ./configure CC=clang

    • -
    • ./configure --disable-shared (to make a statically linked executable)

    • -
    • ./configure 'CFLAGS=-Wall -std=gnu99 -O3'

    • -
    • etc.

    • -
    -
  • -
  • make creates the c/mlr executable

  • -
  • make check

  • -
  • make install copies the c/mlr executable to your prefix’s bin subdirectory.

  • -
-
-
-

From git clone using autoconfig

-
    -
  • git clone https://github.com/johnkerl/miller

  • -
  • cd miller

  • -
  • Install the following packages using your system’s package manager (apt-get, yum install, etc.): automake autoconf libtool flex

  • -
  • Run autoreconf -fiv. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.)

  • -
  • Then continue from “Install the following … ” as above.

  • -
-
-
-

Without using autoconfig

-

GNU autoconfig is familiar to many users, and indeed plenty of folks won’t bother to use an open-source software package which doesn’t have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I’m happy that Miller supports autoconfig.

-

But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ./configure && make output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can’t figure out the build errors, you may just keep walking. For this reason I’m happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com – or, better, open an issue with “New Issue” at https://github.com/johnkerl/miller/issues.)

-

Steps:

-
    -
  • Obtain a release tarball or git clone.

  • -
  • cd into the c subdirectory.

  • -
  • Edit the INSTALLDIR in Makefile.no-autoconfig.

  • -
  • To change the C compiler, edit the CC= lines in Makefile.no-autoconfig and dsls/Makefile.no-autoconfig.

  • -
  • make -f Makefile.no-autoconfig creates the mlr executable and runs unit/regression tests (i.e. the equivalent of both make and make check using autoconfig).

  • -
  • make install copies the mlr executable to your install directory.

  • -
-

The Makefile.no-autoconfig is simple: little more than gcc *.c. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I’m aware of successful use with gcc and clang, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD.

-
-
-

Windows

-

Disclaimer: I’m now relying exclusively on Appveyor for Windows builds; I haven’t built from source using MSYS in quite a while.

-

Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above).

-

You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to C:\msys2\) run C:\msys2\mingw64.exe. Within the MSYS2 shell, you can run the following to install dependent packages:

-
pacman -Syu
-pacman -Su
-pacman -S base-devel
-pacman -S msys2-devel
-pacman -S mingw-w64-x86_64-toolchain
-pacman -S mingw-w64-x86_64-pcre
-pacman -S msys2-runtime
-
-
-

The list of dependent packages may be also found in appveyor.yml in the Miller base directory.

-

Then, simply run msys2-build.sh which is a thin wrapper around ./configure && make which accommodates certain Windows/MSYS2 idiosyncracies.

-

There is a unit-test false-negative issue involving the semantics of the mkstemp library routine but a make -k in the c subdirectory has been producing a mlr.exe for me.

-

Within MSYS2 you can run mlr: simply copy it from the c subdirectory to your desired location somewhere within your MSYS2 $PATH. To run mlr outside of MSYS2, just as with precompiled binaries as described above, you’ll need msys-2.0.dll. One way to do this is to augment your path:

-
C:\> set PATH=%PATH%;\msys64\mingw64\bin
-
-
-

Another way to do it is to copy the Miller executable and the DLL to the same directory:

-
C:\> mkdir \mbin
-C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin
-C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin
-C:\> set PATH=%PATH%;\mbin
-
-
-
-
-

In case of problems

-

If you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com – or, better, open an issue with “New Issue” at https://github.com/johnkerl/miller/issues.

-
-
-

Dependencies

-
-

Required external dependencies

-

These are necessary to produce the mlr executable.

-
    -
  • gcc, clang, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers)

  • -
  • The standard C library

  • -
  • flex

  • -
  • automake, autoconf, and libtool, if you build with autoconfig

  • -
-
-
-

Optional external dependencies

-

This documentation pageset is built using Sphinx. Please see ./README.md for details.

-
-
-

Internal dependencies

-

These are included within the Miller source tree and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build):

- -
-
-
-

Creating a new release: for developers

-

At present I’m the primary developer so this is just my checklist for making new releases.

-

In this example I am using version 3.4.0; of course that will change for subsequent revisions.

-
    -
  • Update version found in mlr --version and man mlr:

    -
      -
    • Edit configure.ac, c/mlrvers.h, miller.spec, and docs/conf.py from 3.3.2-dev to 3.4.0.

    • -
    • Do a fresh autoreconf -fiv and commit the output. (Preferably on a Linux host, rather than MacOS, to reduce needless diffs in autogen build files.)

    • -
    • make -C c -f Makefile.no-autoconfig installhome && make -C man -f Makefile.no-autoconfig installhome && make -C docs -f Makefile.no-autoconfig html

    • -
    • The ordering is important: the first build creates mlr; the second runs mlr to create manpage.txt; the third includes manpage.txt into one of its outputs.

    • -
    • Commit and push.

    • -
    -
  • -
  • Create the release tarball and SRPM:

    -
      -
    • On buildbox: ./configure && make distcheck

    • -
    • On buildbox: make SRPM as in https://github.com/johnkerl/miller/blob/master/README-RPM.md

    • -
    • On all buildboxes: cd c and make -f Makefile.no-autoconfig mlr.static. Then copy mlr.static to ../mlr.{arch}. (This may require as prerequisite sudo yum install glibc-static or the like.)

    • -
    • For static binaries, please do ldd mlr.static and make sure it says not a dynamic executable.

    • -
    • Then mv mlr.static ../mlr.linux_x86_64

    • -
    • Pull back release tarball mlr-3.4.0.tar.gz and SRPM miller-3.4.0-1.el6.src.rpm from buildbox, and mlr.{arch} binaries from whatever buildboxes.

    • -
    • Download mlr.exe and msys-2.0.dll from https://ci.appveyor.com/project/johnkerl/miller/build/artifacts.

    • -
    -
  • -
  • Create the Github release tag:

    -
      -
    • Don’t forget the v in v3.4.0

    • -
    • Write the release notes

    • -
    • Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded.

    • -
    • Publish the release

    • -
    -
  • -
  • Check the release-specific docs:

    - -
  • -
  • Notify:

    - -
  • -
-
git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only
-git fetch upstream
-git rebase upstream/master
-git checkout -b miller-3.4.0
-shasum -a 256 /path/to/mlr-3.4.0.tar.gz
-edit Formula/miller.rb
-# Test the URL from the line like
-#   url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz"
-# in a browser for typos
-# A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build
-git add Formula/miller.rb
-git commit -m 'miller 3.4.0'
-git push -u origin miller-3.4.0
-(submit the pull request)
-
-
-
    -
  • Afterwork:

    -
      -
    • Edit configure.ac and c/mlrvers.h to change version from 3.4.0 to 3.4.0-dev.

    • -
    • make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome

    • -
    • Commit and push.

    • -
    -
  • -
-
-
-

Misc. development notes

-

I use terminal width 120 and tabwidth 4.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/contact.html b/docs6/_build/html/contact.html deleted file mode 100644 index 2d5426158..000000000 --- a/docs6/_build/html/contact.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - Contact — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Contact

-

Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues

-

For issues involving this documentation site please also use https://github.com/johnkerl/miller/issues

-

Other correspondence: mailto:kerl.john.r+miller@gmail.com

-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/cookbook.html b/docs6/_build/html/cookbook.html deleted file mode 100644 index bf446e5d5..000000000 --- a/docs6/_build/html/cookbook.html +++ /dev/null @@ -1,1126 +0,0 @@ - - - - - - - - Cookbook part 1: common patterns — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Cookbook part 1: common patterns

-
-

Headerless CSV on input or output

-

Sometimes we get CSV files which lack a header. For example:

-
$ cat data/headerless.csv
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-

You can use Miller to add a header. The --implicit-csv-header applies positionally indexed labels:

-
$ mlr --csv --implicit-csv-header cat data/headerless.csv
-1,2,3
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-

Following that, you can rename the positionally indexed labels to names with meaning for your context. For example:

-
$ mlr --csv --implicit-csv-header label name,age,status data/headerless.csv
-name,age,status
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-

Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller’s output to the system command sed 1d, or you can use Miller’s --headerless-csv-output option:

-
$ head -5 data/colored-shapes.dkvp | mlr --ocsv cat
-color,shape,flag,i,u,v,w,x
-yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565
-red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207
-red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998
-red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269
-purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863
-
-
-
$ head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat
-yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565
-red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207
-red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998
-red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269
-purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863
-
-
-

Lastly, often we say “CSV” or “TSV” when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it’s perhaps simpler to just use NIDX format which was designed for this purpose. (See also File formats.) For example:

-
$ mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv
-1 John
-3 present
-
-1 Fred
-3 present
-
-1 Alice
-3 missing
-
-1 Carol
-3 present
-
-
-
-
-

Doing multiple joins

-

Suppose we have the following data:

-
$ cat multi-join/input.csv
-id,task
-10,chop
-20,puree
-20,wash
-30,fold
-10,bake
-20,mix
-10,knead
-30,clean
-
-
-

And we want to augment the id column with lookups from the following data files:

-
$ cat multi-join/name-lookup.csv
-id,name
-30,Alice
-10,Bob
-20,Carol
-
-
-
$ cat multi-join/status-lookup.csv
-id,status
-30,occupied
-10,idle
-20,idle
-
-
-

We can run the input file through multiple join commands in a then-chain:

-
$ mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv
-id status   name  task
-10 idle     Bob   chop
-20 idle     Carol puree
-20 idle     Carol wash
-30 occupied Alice fold
-10 idle     Bob   bake
-20 idle     Carol mix
-10 idle     Bob   knead
-30 occupied Alice clean
-
-
-
-
-

Bulk rename of fields

-

Suppose you want to replace spaces with underscores in your column names:

-
$ cat data/spaces.csv
-a b c,def,g h i
-123,4567,890
-2468,1357,3579
-9987,3312,4543
-
-
-

The simplest way is to use mlr rename with -g (for global replace, not just first occurrence of space within each field) and -r for pattern-matching (rather than explicit single-column renames):

-
$ mlr --csv rename -g -r ' ,_'  data/spaces.csv
-a_b_c,def,g_h_i
-123,4567,890
-2468,1357,3579
-9987,3312,4543
-
-
-
$ mlr --csv --opprint rename -g -r ' ,_'  data/spaces.csv
-a_b_c def  g_h_i
-123   4567 890
-2468  1357 3579
-9987  3312 4543
-
-
-

You can also do this with a for-loop:

-
$ cat data/bulk-rename-for-loop.mlr
-map newrec = {};
-for (oldk, v in $*) {
-    newrec[gsub(oldk, " ", "_")] = v;
-}
-$* = newrec
-
-
-
$ mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv
-a_b_c def  g_h_i
-123   4567 890
-2468  1357 3579
-9987  3312 4543
-
-
-
-
-

Search-and-replace over all fields

-

How to do $name = gsub($name, "old", "new") for all fields?

-
$ cat data/sar.csv
-a,b,c
-the quick,brown fox,jumped
-over,the,lazy dogs
-
-
-
$ cat data/sar.mlr
-  for (k in $*) {
-    $[k] = gsub($[k], "e", "X");
-  }
-
-
-
$ mlr --csv put -f data/sar.mlr data/sar.csv
-a,b,c
-thX quick,brown fox,jumpXd
-ovXr,thX,lazy dogs
-
-
-
-
-

Full field renames and reassigns

-

Using Miller 5.0.0’s map literals and assigning to $*, you can fully generalize mlr rename, mlr reorder, etc.

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '
-  begin {
-    @i_cumu = 0;
-  }
-
-  @i_cumu += $i;
-  $* = {
-    "z": $x + y,
-    "KEYFIELD": $a,
-    "i": @i_cumu,
-    "b": $b,
-    "y": $x,
-    "x": $y,
-  };
-' data/small
-z=0.346790,KEYFIELD=pan,i=1,b=pan,y=0.346790,x=0.726803
-z=0.758680,KEYFIELD=eks,i=3,b=pan,y=0.758680,x=0.522151
-z=0.204603,KEYFIELD=wye,i=6,b=wye,y=0.204603,x=0.338319
-z=0.381399,KEYFIELD=eks,i=10,b=wye,y=0.381399,x=0.134189
-z=0.573289,KEYFIELD=wye,i=15,b=pan,y=0.573289,x=0.863624
-
-
-
-
-

Numbering and renumbering records

-

The awk-like built-in variable NR is incremented for each input record:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$nr = NR' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5
-
-
-

However, this is the record number within the original input stream – not after any filtering you may have done:

-
$ mlr filter '$a == "wye"' then put '$nr = NR' data/small
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5
-
-
-

There are two good options here. One is to use the cat verb with -n:

-
$ mlr filter '$a == "wye"' then cat -n data/small
-n=1,a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

The other is to keep your own counter within the put DSL:

-
$ mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,n=1
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,n=2
-
-
-

The difference is a matter of taste (although mlr cat -n puts the counter first).

-
-
-

Options for dealing with duplicate rows

-

If your data has records appearing multiple times, you can use mlr uniq to show and/or count the unique records.

-

If you want to look at partial uniqueness – for example, show only the first record for each unique combination of the account_id and account_status fields – you might use mlr head -n 1 -g account_id,account_status. Please also see mlr head.

-
-
-

Data-cleaning examples

-

Here are some ways to use the type-checking options as described in Type-test and type-assertion expressions Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can’t see it all at once and some automation is called for.)

-
$ cat data/het-bool.csv
-name,reachable
-barney,false
-betty,true
-fred,true
-wilma,1
-
-
-

One option is to coerce everything to boolean, or integer:

-
$ mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv
-name   reachable
-barney false
-betty  true
-fred   true
-wilma  true
-
-
-
$ mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv
-name   reachable
-barney 0
-betty  1
-fred   1
-wilma  1
-
-
-

A second option is to flag badly formatted data within the output stream:

-
$ mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv
-name   reachable format_ok
-barney false     true
-betty  true      true
-fred   true      true
-wilma  1         false
-
-
-

Or perhaps to flag badly formatted data outside the output stream:

-
$ mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv
-Malformed at NR=4
-name   reachable
-barney false
-betty  true
-fred   true
-wilma  1
-
-
-

A third way is to abort the process on first instance of bad data:

-
$ mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv
-mlr: string type-assertion failed at NR=4 FNR=4 FILENAME=data/het-bool.csv
-name,reachable
-barney,false
-betty,true
-fred,true
-
-
-
-
-

Splitting nested fields

-

Suppose you have a TSV file like this:

-
a   b
-x   z
-s   u:v:w
-
-
-

The simplest option is to use mlr nest:

-
$ mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv
-a   b
-x   z
-s   u
-s   v
-s   w
-
-
-
$ mlr --tsv nest --explode --values --across-fields  -f b --nested-fs : data/nested.tsv
-a   b_1
-x   z
-
-a   b_1     b_2     b_3
-s   u       v       w
-
-
-

While mlr nest is simplest, let’s also take a look at a few ways to do this using the put DSL.

-

One option to split out the colon-delimited values in the b column is to use splitnv to create an integer-indexed map and loop over it, adding new fields to the current record:

-
$ mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}'
-a  x
-b  z
-p1 z
-
-a  s
-b  u:v:w
-p1 u
-p2 v
-p3 w
-
-
-

while another is to loop over the same map from splitnv and use it (with put -q to suppress printing the original record) to produce multiple records:

-
$ mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {x=mapsum($*, {"b":v}); emit x}'
-a x
-b z
-
-a s
-b u
-
-a s
-b v
-
-a s
-b w
-
-
-
$ mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {x=mapsum($*, {"b":v}); emit x}'
-a   b
-x   z
-s   u
-s   v
-s   w
-
-
-
-
-

Showing differences between successive queries

-

Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right:

-
$ cat data/previous_counters.csv
-color,count
-red,3472
-blue,6838
-orange,694
-purple,12
-
-
-
$ cat data/current_counters.csv
-color,count
-red,3467
-orange,670
-yellow,27
-blue,6944
-
-
-

And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren’t all in the same order, nor are they all present on both sides, we can’t just paste the two files side-by-side and do some column-four-minus-column-two arithmetic.

-

First, rename counter columns to make them distinct:

-
$ mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv
-
-
-
$ cat data/prevtemp.csv
-color,previous_count
-red,3472
-blue,6838
-orange,694
-purple,12
-
-
-
$ mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv
-
-
-
$ cat data/currtemp.csv
-color,current_count
-red,3467
-orange,670
-yellow,27
-blue,6944
-
-
-

Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use --ul and --ur to emit unpaired records (namely, purple on the left and yellow on the right):

-
$ mlr --icsv --opprint \
-  join -j color --ul --ur -f data/prevtemp.csv \
-  then unsparsify --fill-with 0 \
-  then put '$count_delta = $current_count - $previous_count' \
-  data/currtemp.csv
-color  previous_count current_count count_delta
-red    3472           3467          -5
-orange 694            670           -24
-yellow 0              27            27
-blue   6838           6944          106
-purple 12             0             -12
-
-
-
-
-

Finding missing dates

-

Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates:

-
$ head -n 10 data/miss-date.csv
-date,qoh
-2012-03-05,10055
-2012-03-06,10486
-2012-03-07,10430
-2012-03-08,10674
-2012-03-09,10880
-2012-03-10,10718
-2012-03-11,10795
-2012-03-12,11043
-2012-03-13,11177
-
-
-
$ wc -l data/miss-date.csv
-    1372 data/miss-date.csv
-
-
-

Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using strptime, then compute adjacent differences (the cat -n simply inserts record-counters):

-
$ mlr --from data/miss-date.csv --icsv \
-  cat -n \
-  then put '$datestamp = strptime($date, "%Y-%m-%d")' \
-  then step -a delta -f datestamp \
-| head
-n=1,date=2012-03-05,qoh=10055,datestamp=1330905600.000000,datestamp_delta=0
-n=2,date=2012-03-06,qoh=10486,datestamp=1330992000.000000,datestamp_delta=86400.000000
-n=3,date=2012-03-07,qoh=10430,datestamp=1331078400.000000,datestamp_delta=86400.000000
-n=4,date=2012-03-08,qoh=10674,datestamp=1331164800.000000,datestamp_delta=86400.000000
-n=5,date=2012-03-09,qoh=10880,datestamp=1331251200.000000,datestamp_delta=86400.000000
-n=6,date=2012-03-10,qoh=10718,datestamp=1331337600.000000,datestamp_delta=86400.000000
-n=7,date=2012-03-11,qoh=10795,datestamp=1331424000.000000,datestamp_delta=86400.000000
-n=8,date=2012-03-12,qoh=11043,datestamp=1331510400.000000,datestamp_delta=86400.000000
-n=9,date=2012-03-13,qoh=11177,datestamp=1331596800.000000,datestamp_delta=86400.000000
-n=10,date=2012-03-14,qoh=11498,datestamp=1331683200.000000,datestamp_delta=86400.000000
-
-
-

Then, filter for adjacent difference not being 86400 (the number of seconds in a day):

-
$ mlr --from data/miss-date.csv --icsv \
-  cat -n \
-  then put '$datestamp = strptime($date, "%Y-%m-%d")' \
-  then step -a delta -f datestamp \
-  then filter '$datestamp_delta != 86400 && $n != 1'
-n=774,date=2014-04-19,qoh=130140,datestamp=1397865600.000000,datestamp_delta=259200.000000
-n=1119,date=2015-03-31,qoh=181625,datestamp=1427760000.000000,datestamp_delta=172800.000000
-
-
-

Given this, it’s now easy to see where the gaps are:

-
$ mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv
-n=770,1=2014-04-12,2=129435
-n=771,1=2014-04-13,2=129868
-n=772,1=2014-04-14,2=129797
-n=773,1=2014-04-15,2=129919
-n=774,1=2014-04-16,2=130181
-n=775,1=2014-04-19,2=130140
-n=776,1=2014-04-20,2=130271
-n=777,1=2014-04-21,2=130368
-n=778,1=2014-04-22,2=130368
-n=779,1=2014-04-23,2=130849
-n=780,1=2014-04-24,2=131026
-
-
-
$ mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv
-n=1115,1=2015-03-25,2=181006
-n=1116,1=2015-03-26,2=180995
-n=1117,1=2015-03-27,2=181043
-n=1118,1=2015-03-28,2=181112
-n=1119,1=2015-03-29,2=181306
-n=1120,1=2015-03-31,2=181625
-n=1121,1=2015-04-01,2=181494
-n=1122,1=2015-04-02,2=181718
-n=1123,1=2015-04-03,2=181835
-n=1124,1=2015-04-04,2=182104
-n=1125,1=2015-04-05,2=182528
-
-
-
-
-

Two-pass algorithms

-

Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as sort, tac, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory.

-
-

Two-pass algorithms: computation of percentages

-

For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record’s value to a percentage.

-
$ mlr --from data/small --opprint put -q '
-  # These are executed once per record, which is the first pass.
-  # The key is to use NR to index an out-of-stream variable to
-  # retain all the x-field values.
-  @x_min = min($x, @x_min);
-  @x_max = max($x, @x_max);
-  @x[NR] = $x;
-
-  # The second pass is in a for-loop in an end-block.
-  end {
-    for (nr, x in @x) {
-      @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min);
-    }
-    emit (@x, @x_pct), "NR"
-  }
-'
-NR x        x_pct
-1  0.346790 25.661943
-2  0.758680 100.000000
-3  0.204603 0.000000
-4  0.381399 31.908236
-5  0.573289 66.540542
-
-
-
-
-

Two-pass algorithms: line-number ratios

-

Similarly, finding the total record count requires first reading through all the data:

-
$ mlr --opprint --from data/small put -q '
-  @records[NR] = $*;
-  end {
-    for((I,k),v in @records) {
-      @records[I]["I"] = I;
-      @records[I]["N"] = NR;
-      @records[I]["PCT"] = 100*I/NR
-    }
-    emit @records,"I"
-  }
-' then reorder -f I,N,PCT
-I N PCT a   b   i x                   y
-1 5 20  pan pan 1 0.3467901443380824  0.7268028627434533
-2 5 40  eks pan 2 0.7586799647899636  0.5221511083334797
-3 5 60  wye wye 3 0.20460330576630303 0.33831852551664776
-4 5 80  eks wye 4 0.38139939387114097 0.13418874328430463
-5 5 100 wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
-
-

Two-pass algorithms: records having max value

-

The idea is to retain records having the largest value of n in the following data:

-
$ mlr --itsv --opprint cat data/maxrows.tsv
-a      b      n score
-purple red    5 0.743231
-blue   purple 2 0.093710
-red    purple 2 0.802103
-purple red    5 0.389055
-red    purple 2 0.880457
-orange red    2 0.540349
-purple purple 1 0.634451
-orange purple 5 0.257223
-orange purple 5 0.693499
-red    red    4 0.981355
-blue   purple 5 0.157052
-purple purple 1 0.441784
-red    purple 1 0.124912
-orange blue   1 0.921944
-blue   purple 4 0.490909
-purple red    5 0.454779
-green  purple 4 0.198278
-orange blue   5 0.705700
-red    red    3 0.940705
-purple red    5 0.072936
-orange blue   3 0.389463
-orange purple 2 0.664985
-blue   purple 1 0.371813
-red    purple 4 0.984571
-green  purple 5 0.203577
-green  purple 3 0.900873
-purple purple 0 0.965677
-blue   purple 2 0.208785
-purple purple 1 0.455077
-red    purple 4 0.477187
-blue   red    4 0.007487
-
-
-

Of course, the largest value of n isn’t known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end:

-
$ cat data/maxrows.mlr
-# Retain all records
-@records[NR] = $*;
-# Track max value of n
-@maxn = max(@maxn, $n);
-
-# After all records have been read, loop through retained records
-# and print those with the max n value.
-end {
-  for (nr in @records) {
-    map record = @records[nr];
-    if (record["n"] == @maxn) {
-      emit record;
-    }
-  }
-}
-
-
-
$ mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv
-a      b      n score
-purple red    5 0.743231
-purple red    5 0.389055
-orange purple 5 0.257223
-orange purple 5 0.693499
-blue   purple 5 0.157052
-purple red    5 0.454779
-orange blue   5 0.705700
-purple red    5 0.072936
-green  purple 5 0.203577
-
-
-
-
-
-

Rectangularizing data

-

Suppose you have a method (in whatever language) which is printing things of the form

-
outer=1
-outer=2
-outer=3
-
-
-

and then calls another method which prints things of the form

-
middle=10
-middle=11
-middle=12
-middle=20
-middle=21
-middle=30
-middle=31
-
-
-

and then, perhaps, that second method calls a third method which prints things of the form

-
inner1=100,inner2=101
-inner1=120,inner2=121
-inner1=200,inner2=201
-inner1=210,inner2=211
-inner1=300,inner2=301
-inner1=312
-inner1=313,inner2=314
-
-
-

with the result that your program’s output is

-
outer=1
-middle=10
-inner1=100,inner2=101
-middle=11
-middle=12
-inner1=120,inner2=121
-outer=2
-middle=20
-inner1=200,inner2=201
-middle=21
-inner1=210,inner2=211
-outer=3
-middle=30
-inner1=300,inner2=301
-middle=31
-inner1=312
-inner1=313,inner2=314
-
-
-

The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don’t refactor your code just to handle some ad-hoc log-data formatting – instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs.

-
$ mlr --from data/rect.txt put -q '
-  is_present($outer) {
-    unset @r
-  }
-  for (k, v in $*) {
-    @r[k] = v
-  }
-  is_present($inner1) {
-    emit @r
-  }'
-outer=1,middle=10,inner1=100,inner2=101
-outer=1,middle=12,inner1=120,inner2=121
-outer=2,middle=20,inner1=200,inner2=201
-outer=2,middle=21,inner1=210,inner2=211
-outer=3,middle=30,inner1=300,inner2=301
-outer=3,middle=31,inner1=312,inner2=301
-outer=3,middle=31,inner1=313,inner2=314
-
-
-
-
-

Regularizing ragged CSV

-

Miller handles compliant CSV: in particular, it’s an error if the number of data fields in a given data line don’t match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line.

-
$ cat data/ragged.csv
-a,b,c
-1,2,3
-4,5
-6,7,8,9
-
-
-
$ mlr --from data/ragged.csv --fs comma --nidx put '
-  @maxnf = max(@maxnf, NF);
-  @nf = NF;
-  while(@nf < @maxnf) {
-    @nf += 1;
-    $[@nf] = ""
-  }
-'
-a,b,c
-1,2,3
-4,5,
-6,7,8,9
-
-
-

or, more simply,

-
$ mlr --from data/ragged.csv --fs comma --nidx put '
-  @maxnf = max(@maxnf, NF);
-  while(NF < @maxnf) {
-    $[NF+1] = "";
-  }
-'
-a,b,c
-1,2,3
-4,5,
-6,7,8,9
-
-
-
-
-

Feature-counting

-

Suppose you have some heterogeneous data like this:

-
{ "qoh": 29874, "rate": 1.68, "latency": 0.02 }
-{ "name": "alice", "uid": 572 }
-{ "qoh": 1227, "rate": 1.01, "latency": 0.07 }
-{ "qoh": 13458, "rate": 1.72, "latency": 0.04 }
-{ "qoh": 56782, "rate": 1.64 }
-{ "qoh": 23512, "rate": 1.71, "latency": 0.03 }
-{ "qoh": 9876, "rate": 1.89, "latency": 0.08 }
-{ "name": "bill", "uid": 684 }
-{ "name": "chuck", "uid2": 908 }
-{ "name": "dottie", "uid": 440 }
-{ "qoh": 0, "rate": 0.40, "latency": 0.01 }
-{ "qoh": 5438, "rate": 1.56, "latency": 0.17 }
-
-
-

A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm:

-
for (key in $*) {
-  @key_counts[key] += 1;
-}
-@record_count += 1;
-
-end {
-  for (key in @key_counts) {
-      @key_fraction[key] = @key_counts[key] / @record_count
-  }
-  emit @record_count;
-  emit @key_counts, "key";
-  emit @key_fraction,"key"
-}
-
-
-

Then

-
$ mlr --json put -q -f data/feature-count.mlr data/features.json
-{ "record_count": 12 }
-{ "key": "qoh", "key_counts": 8 }
-{ "key": "rate", "key_counts": 8 }
-{ "key": "latency", "key_counts": 7 }
-{ "key": "name", "key_counts": 4 }
-{ "key": "uid", "key_counts": 3 }
-{ "key": "uid2", "key_counts": 1 }
-{ "key": "qoh", "key_fraction": 0.666667 }
-{ "key": "rate", "key_fraction": 0.666667 }
-{ "key": "latency", "key_fraction": 0.583333 }
-{ "key": "name", "key_fraction": 0.333333 }
-{ "key": "uid", "key_fraction": 0.250000 }
-{ "key": "uid2", "key_fraction": 0.083333 }
-
-
-
$ mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json
-record_count
-12
-
-key     key_counts
-qoh     8
-rate    8
-latency 7
-name    4
-uid     3
-uid2    1
-
-key     key_fraction
-qoh     0.666667
-rate    0.666667
-latency 0.583333
-name    0.333333
-uid     0.250000
-uid2    0.083333
-
-
-
-
-

Unsparsing

-

The previous section discussed how to fill out missing data fields within CSV with full header line – so the list of all field names is present within the header line. Next, let’s look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names.

-

For example, suppose you have JSON input like this:

-
$ cat data/sparse.json
-{"a":1,"b":2,"v":3}
-{"u":1,"b":2}
-{"a":1,"v":2,"x":3}
-{"v":1,"w":2}
-
-
-

There are field names a, b, v, u, x, w in the data – but not all in every record. Since we don’t know the names of all the keys until we’ve read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use put -q since we don’t want to produce per-record output, only emitting output in the end block:

-
$ cat data/unsparsify.mlr
-# First pass:
-# Remember all unique key names:
-for (k in $*) {
-  @all_keys[k] = 1;
-}
-# Remember all input records:
-@records[NR] = $*;
-
-# Second pass:
-end {
-  for (nr in @records) {
-    # Get the sparsely keyed input record:
-    irecord = @records[nr];
-    # Fill in missing keys with empty string:
-    map orecord = {};
-    for (k in @all_keys) {
-      if (haskey(irecord, k)) {
-        orecord[k] = irecord[k];
-      } else {
-        orecord[k] = "";
-      }
-    }
-    # Produce the output:
-    emit orecord;
-  }
-}
-
-
-
$ mlr --json put -q -f data/unsparsify.mlr data/sparse.json
-{ "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" }
-{ "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" }
-{ "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" }
-{ "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 }
-
-
-
$ mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json
-a,b,v,u,x,w
-1,2,3,,,
-,2,,1,,
-1,,2,,3,
-,,1,,,2
-
-
-
$ mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json
-a b v u x w
-1 2 3 - - -
-- 2 - 1 - -
-1 - 2 - 3 -
-- - 1 - - 2
-
-
-

There is a keystroke-saving verb for this: mlr unsparsify.

-
-
-

Parsing log-file output

-

This, of course, depends highly on what’s in your log files. But, as an example, suppose you have log-file lines such as

-
2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378
-
-
-

I prefer to pre-filter with grep and/or sed to extract the structured text, then hand that to Miller. Example:

-
grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status
-
-
-
-
-

Memoization with out-of-stream variables

-

The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using f*(0)=1, *f*(1)=1, *f*(*n)=*f*(n-1)+*f*(n-2) for n*&ge;2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger *n. This program

-
mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put '
-  func f(n) {
-      @fcount += 1;              # count number of calls to the function
-      if (n < 2) {
-          return 1
-      } else {
-          return f(n-1) + f(n-2) # recurse
-      }
-  }
-
-  @fcount = 0;
-  $o = f($i);
-  $fcount = @fcount;
-
-' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds
-
-
-

produces output like this:

-
i  o      fcount  seconds_delta
-1  1      1       0
-2  2      3       0.000039101
-3  3      5       0.000015974
-4  5      9       0.000019073
-5  8      15      0.000026941
-6  13     25      0.000036955
-7  21     41      0.000056028
-8  34     67      0.000086069
-9  55     109     0.000134945
-10 89     177     0.000217915
-11 144    287     0.000355959
-12 233    465     0.000506163
-13 377    753     0.000811815
-14 610    1219    0.001297235
-15 987    1973    0.001960993
-16 1597   3193    0.003417969
-17 2584   5167    0.006215811
-18 4181   8361    0.008294106
-19 6765   13529   0.012095928
-20 10946  21891   0.019592047
-21 17711  35421   0.031193972
-22 28657  57313   0.057254076
-23 46368  92735   0.080307961
-24 75025  150049  0.129482031
-25 121393 242785  0.213325977
-26 196418 392835  0.334423065
-27 317811 635621  0.605969906
-28 514229 1028457 0.971235037
-
-
-

Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using @-variables, which persist across records, we can cache and reuse the results of previous computations:

-
mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put '
-  func f(n) {
-    @fcount += 1;                 # count number of calls to the function
-    if (is_present(@fcache[n])) { # cache hit
-      return @fcache[n]
-    } else {                      # cache miss
-      num rv = 1;
-      if (n >= 2) {
-        rv = f(n-1) + f(n-2)      # recurse
-      }
-      @fcache[n] = rv;
-      return rv
-    }
-  }
-  @fcount = 0;
-  $o = f($i);
-  $fcount = @fcount;
-' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds
-
-
-

with output like this:

-
i  o      fcount seconds_delta
-1  1      1      0
-2  2      3      0.000053883
-3  3      3      0.000035048
-4  5      3      0.000045061
-5  8      3      0.000014067
-6  13     3      0.000028849
-7  21     3      0.000028133
-8  34     3      0.000027895
-9  55     3      0.000014067
-10 89     3      0.000015020
-11 144    3      0.000012875
-12 233    3      0.000033140
-13 377    3      0.000014067
-14 610    3      0.000012875
-15 987    3      0.000029087
-16 1597   3      0.000013828
-17 2584   3      0.000013113
-18 4181   3      0.000012875
-19 6765   3      0.000013113
-20 10946  3      0.000012875
-21 17711  3      0.000013113
-22 28657  3      0.000013113
-23 46368  3      0.000015974
-24 75025  3      0.000012875
-25 121393 3      0.000013113
-26 196418 3      0.000012875
-27 317811 3      0.000013113
-28 514229 3      0.000012875
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/cookbook2.html b/docs6/_build/html/cookbook2.html deleted file mode 100644 index 5d809c228..000000000 --- a/docs6/_build/html/cookbook2.html +++ /dev/null @@ -1,610 +0,0 @@ - - - - - - - - Cookbook part 2: Random things, and some math — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Cookbook part 2: Random things, and some math

-
-

Randomly selecting words from a list

-

Given this word list, first take a look to see what the first few lines look like:

-
$ head data/english-words.txt
-a
-aa
-aal
-aalii
-aam
-aardvark
-aardwolf
-aba
-abac
-abaca
-
-
-

Then the following will randomly sample ten words with four to eight characters in them:

-
$ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10
-thionine
-birchman
-mildewy
-avigate
-addedly
-abaze
-askant
-aiming
-insulant
-coinmate
-
-
-
-
-

Randomly generating jabberwocky words

-

These are simple n-grams as described here. Some common functions are located here. Then here are scripts for 1-grams 2-grams 3-grams 4-grams, and 5-grams.

-

The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list – giving us automatically generated words in the same vein as bromance and spork:

-
$ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr
-beard
-plastinguish
-politicially
-noise
-loan
-country
-controductionary
-suppery
-lose
-lessors
-dollar
-judge
-rottendence
-lessenger
-diffendant
-suggestional
-
-
-
-
-

Program timing

-

This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller’s own runtime. The delta function computes the difference between successive timestamps.

-
$ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt
-
-$ head -n 5 lines.txt
-i=1
-i=2
-i=3
-i=4
-i=5
-
-mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7
-i     t                 t_delta
-1     1430603027.018016 1.430603027e+09
-2     1430603027.018043 2.694129944e-05
-3     1430603027.018048 5.006790161e-06
-4     1430603027.018052 4.053115845e-06
-5     1430603027.018055 2.861022949e-06
-6     1430603027.018058 3.099441528e-06
-
-mlr --ofmt '%.9le' --oxtab \
-  put '$t=systime()' then \
-  step -a delta -f t then \
-  filter '$i>1' then \
-  stats1 -a min,mean,max -f t_delta \
-  lines.txt
-t_delta_min  2.861022949e-06
-t_delta_mean 4.077508505e-06
-t_delta_max  5.388259888e-05
-
-
-
-
-

Computing interquartile ranges

-

For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25:

-
$ mlr --oxtab stats1 -f x -a p25,p75 \
-    then put '$x_iqr = $x_p75 - $x_p25' \
-    data/medium
-x_p25 0.246670
-x_p75 0.748186
-x_iqr 0.501516
-
-
-

For wildcarded field names, first compute p25 and p75, then loop over field names with p25 in them:

-
$ mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \
-    then put 'for (k,v in $*) {
-      if (k =~ "(.*)_p25") {
-        $["\1_iqr"] = $["\1_p75"] - $["\1_p25"]
-      }
-    }' \
-    data/medium
-i_p25 2501
-i_p75 7501
-x_p25 0.246670
-x_p75 0.748186
-y_p25 0.252137
-y_p75 0.764003
-i_iqr 5000
-x_iqr 0.501516
-y_iqr 0.511866
-
-
-
-
-

Computing weighted means

-

This might be more elegantly implemented as an option within the stats1 verb. Meanwhile, it’s expressible within the DSL:

-
$ mlr --from data/medium put -q '
-  # Using the y field for weighting in this example
-  weight = $y;
-
-  # Using the a field for weighted aggregation in this example
-  @sumwx[$a] += weight * $i;
-  @sumw[$a] += weight;
-
-  @sumx[$a] += $i;
-  @sumn[$a] += 1;
-
-  end {
-    map wmean = {};
-    map mean  = {};
-    for (a in @sumwx) {
-      wmean[a] = @sumwx[a] / @sumw[a]
-    }
-    for (a in @sumx) {
-      mean[a] = @sumx[a] / @sumn[a]
-    }
-    #emit wmean, "a";
-    #emit mean, "a";
-    emit (wmean, mean), "a";
-  }'
-a=pan,wmean=4979.563722,mean=5028.259010
-a=eks,wmean=4890.381593,mean=4956.290076
-a=wye,wmean=4946.987746,mean=4920.001017
-a=zee,wmean=5164.719685,mean=5123.092330
-a=hat,wmean=4925.533162,mean=4967.743946
-
-
-
-
-

Generating random numbers from various distributions

-

Here we can chain together a few simple building blocks:

-
$ cat expo-sample.sh
-# Generate 100,000 pairs of independent and identically distributed
-# exponentially distributed random variables with the same rate parameter
-# (namely, 2.5). Then compute histograms of one of them, along with
-# histograms for their sum and their product.
-#
-# See also https://en.wikipedia.org/wiki/Exponential_distribution
-#
-# Here I'm using a specified random-number seed so this example always
-# produces the same output for this web document: in everyday practice we
-# wouldn't do that.
-
-mlr -n \
-  --seed 0 \
-  --opprint \
-  seqgen --stop 100000 \
-  then put '
-    # https://en.wikipedia.org/wiki/Inverse_transform_sampling
-    func expo_sample(lambda) {
-      return -log(1-urand())/lambda
-    }
-    $u = expo_sample(2.5);
-    $v = expo_sample(2.5);
-    $s = $u + $v;
-    $p = $u * $v;
-  ' \
-  then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \
-  then bar -f u_count,s_count,p_count --auto -w 20
-
-
-

Namely:

-
    -
  • Set the Miller random-number seed so this webdoc looks the same every time I regenerate it.

  • -
  • Use pretty-printed tabular output.

  • -
  • Use pretty-printed tabular output.

  • -
  • Use seqgen to produce 100,000 records i=0, i=1, etc.

  • -
  • Send those to a put step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples.

  • -
  • Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc.

  • -
-

The output is as follows:

-
$ sh expo-sample.sh
-bin_lo   bin_hi   u_count                        s_count                         p_count
-0.000000 0.040000 [78]*******************#[9497] [353]#...................[3732] [20]*******************#[39755]
-0.040000 0.080000 [78]******************..[9497] [353]*****...............[3732] [20]*******.............[39755]
-0.080000 0.120000 [78]****************....[9497] [353]*********...........[3732] [20]****................[39755]
-0.120000 0.160000 [78]**************......[9497] [353]************........[3732] [20]***.................[39755]
-0.160000 0.200000 [78]*************.......[9497] [353]**************......[3732] [20]**..................[39755]
-0.200000 0.240000 [78]************........[9497] [353]****************....[3732] [20]*...................[39755]
-0.240000 0.280000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755]
-0.280000 0.320000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755]
-0.320000 0.360000 [78]*********...........[9497] [353]*******************.[3732] [20]#...................[39755]
-0.360000 0.400000 [78]********............[9497] [353]*******************.[3732] [20]#...................[39755]
-0.400000 0.440000 [78]*******.............[9497] [353]*******************#[3732] [20]#...................[39755]
-0.440000 0.480000 [78]******..............[9497] [353]******************..[3732] [20]#...................[39755]
-0.480000 0.520000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755]
-0.520000 0.560000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755]
-0.560000 0.600000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755]
-0.600000 0.640000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755]
-0.640000 0.680000 [78]****................[9497] [353]****************....[3732] [20]#...................[39755]
-0.680000 0.720000 [78]***.................[9497] [353]****************....[3732] [20]#...................[39755]
-0.720000 0.760000 [78]***.................[9497] [353]**************......[3732] [20]#...................[39755]
-0.760000 0.800000 [78]**..................[9497] [353]**************......[3732] [20]#...................[39755]
-0.800000 0.840000 [78]**..................[9497] [353]*************.......[3732] [20]#...................[39755]
-0.840000 0.880000 [78]**..................[9497] [353]************........[3732] [20]#...................[39755]
-0.880000 0.920000 [78]**..................[9497] [353]***********.........[3732] [20]#...................[39755]
-0.920000 0.960000 [78]*...................[9497] [353]***********.........[3732] [20]#...................[39755]
-0.960000 1.000000 [78]*...................[9497] [353]**********..........[3732] [20]#...................[39755]
-1.000000 1.040000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755]
-1.040000 1.080000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755]
-1.080000 1.120000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755]
-1.120000 1.160000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755]
-1.160000 1.200000 [78]#...................[9497] [353]*******.............[3732] [20]#...................[39755]
-1.200000 1.240000 [78]#...................[9497] [353]******..............[3732] [20]#...................[39755]
-1.240000 1.280000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
-1.280000 1.320000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
-1.320000 1.360000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
-1.360000 1.400000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755]
-1.400000 1.440000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755]
-1.440000 1.480000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
-1.480000 1.520000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
-1.520000 1.560000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
-1.560000 1.600000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755]
-1.600000 1.640000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755]
-1.640000 1.680000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
-1.680000 1.720000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
-1.720000 1.760000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
-1.760000 1.800000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
-1.800000 1.840000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
-1.840000 1.880000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
-1.880000 1.920000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
-1.920000 1.960000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
-1.960000 2.000000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
-
-
-
-
-

Sieve of Eratosthenes

-

The Sieve of Eratosthenes is a standard introductory programming topic. The idea is to find all primes up to some N by making a list of the numbers 1 to N, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in begin and end statements; there is no file input (so we use mlr -n to keep Miller from waiting for input data).

-
$ cat programs/sieve.mlr
-# ================================================================
-# Sieve of Eratosthenes: simple example of Miller DSL as programming language.
-# ================================================================
-
-# Put this in a begin-block so we can do either
-#   mlr -n put -q -f name-of-this-file.mlr
-# or
-#   mlr -n put -q -f name-of-this-file.mlr -e '@n = 200'
-# i.e. 100 is the default upper limit, and another can be specified using -e.
-begin {
-  @n = 100;
-}
-
-end {
-  for (int i = 0; i <= @n; i += 1) {
-    @s[i] = true;
-  }
-  @s[0] = false; # 0 is neither prime nor composite
-  @s[1] = false; # 1 is neither prime nor composite
-  # Strike out multiples
-  for (int i = 2; i <= @n; i += 1) {
-    for (int j = i+i; j <= @n; j += i) {
-      @s[j] = false;
-    }
-  }
-  # Print survivors
-  for (int i = 0; i <= @n; i += 1) {
-    if (@s[i]) {
-      print i;
-    }
-  }
-}
-
-
-
$ mlr -n put -f programs/sieve.mlr
-2
-3
-5
-7
-11
-13
-17
-19
-23
-29
-31
-37
-41
-43
-47
-53
-59
-61
-67
-71
-73
-79
-83
-89
-97
-
-
-
-
-

Mandelbrot-set generator

-

The Mandelbrot set is also easily expressed. This isn’t an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language – a test case for the expressiveness of the language.

-

The (approximate) computation of points in the complex plane which are and aren’t members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen:

-
$ cat programs/mand.mlr
-# Mandelbrot set generator: simple example of Miller DSL as programming language.
-begin {
-  # Set defaults
-  @rcorn     = -2.0;
-  @icorn     = -2.0;
-  @side      = 4.0;
-  @iheight   = 50;
-  @iwidth    = 100;
-  @maxits    = 100;
-  @levelstep = 5;
-  @chars     = "@X*o-."; # Palette of characters to print to the screen.
-  @verbose   = false;
-  @do_julia  = false;
-  @jr        = 0.0;      # Real part of Julia point, if any
-  @ji        = 0.0;      # Imaginary part of Julia point, if any
-}
-
-# Here, we can override defaults from an input file (if any).  In Miller's
-# put/filter DSL, absent-null right-hand sides result in no assignment so we
-# can simply put @rcorn = $rcorn: if there is a field in the input like
-# 'rcorn = -1.847' we'll read and use it, else we'll keep the default.
-@rcorn     = $rcorn;
-@icorn     = $icorn;
-@side      = $side;
-@iheight   = $iheight;
-@iwidth    = $iwidth;
-@maxits    = $maxits;
-@levelstep = $levelstep;
-@chars     = $chars;
-@verbose   = $verbose;
-@do_julia  = $do_julia;
-@jr        = $jr;
-@ji        = $ji;
-
-end {
-  if (@verbose) {
-    print "RCORN     = ".@rcorn;
-    print "ICORN     = ".@icorn;
-    print "SIDE      = ".@side;
-    print "IHEIGHT   = ".@iheight;
-    print "IWIDTH    = ".@iwidth;
-    print "MAXITS    = ".@maxits;
-    print "LEVELSTEP = ".@levelstep;
-    print "CHARS     = ".@chars;
-  }
-
-  # Iterate over a matrix of rows and columns, printing one character for each cell.
-  for (int ii = @iheight-1; ii >= 0; ii -= 1) {
-    num pi = @icorn + (ii/@iheight) * @side;
-    for (int ir = 0; ir < @iwidth; ir += 1) {
-      num pr = @rcorn + (ir/@iwidth) * @side;
-      printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji);
-    }
-    print;
-  }
-}
-
-# This is a function to approximate membership in the Mandelbrot set (or Julia
-# set for a given Julia point if do_julia == true) for a given point in the
-# complex plane.
-func get_point_plot(pr, pi, maxits, do_julia, jr, ji) {
-  num zr = 0.0;
-  num zi = 0.0;
-  num cr = 0.0;
-  num ci = 0.0;
-
-  if (!do_julia) {
-    zr = 0.0;
-    zi = 0.0;
-    cr = pr;
-    ci = pi;
-  } else {
-    zr = pr;
-    zi = pi;
-    cr = jr;
-    ci = ji;
-  }
-
-  int iti = 0;
-  bool escaped = false;
-  num zt = 0;
-  for (iti = 0; iti < maxits; iti += 1) {
-    num mag = zr*zr + zi+zi;
-    if (mag > 4.0) {
-        escaped = true;
-        break;
-    }
-    # z := z^2 + c
-    zt = zr*zr - zi*zi + cr;
-    zi = 2*zr*zi + ci;
-    zr = zt;
-  }
-  if (!escaped) {
-    return ".";
-  } else {
-    # The // operator is Miller's (pythonic) integer-division operator
-    int level = (iti // @levelstep) % strlen(@chars);
-    return substr(@chars, level, level);
-  }
-}
-
-
-

At standard resolution this makes a nice little ASCII plot:

-
$ mlr -n put -f ./programs/mand.mlr
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-.........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
-
-

But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture:

-
#!/bin/bash
-# Get the number of rows and columns from the terminal window dimensions
-iheight=$(stty size | mlr --nidx --fs space cut -f 1)
-iwidth=$(stty size | mlr --nidx --fs space cut -f 2)
-echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \
-| mlr put -f programs/mand.mlr
-
-
-_images/mand.png -
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/cookbook3.html b/docs6/_build/html/cookbook3.html deleted file mode 100644 index 2abcbd775..000000000 --- a/docs6/_build/html/cookbook3.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - Cookbook part 3: Stats with and without out-of-stream variables — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Cookbook part 3: Stats with and without out-of-stream variables

-
-

Overview

-

One of Miller’s strengths is its compact notation: for example, given input of the form

-
$ head -n 5 ../data/medium
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

you can simply do

-
$ mlr --oxtab stats1 -a sum -f x ../data/medium
-x_sum 4986.019682
-
-
-

or

-
$ mlr --opprint stats1 -a sum -f x -g b ../data/medium
-b   x_sum
-pan 965.763670
-wye 1023.548470
-zee 979.742016
-eks 1016.772857
-hat 1000.192668
-
-
-

rather than the more tedious

-
$ mlr --oxtab put -q '
-  @x_sum += $x;
-  end {
-    emit @x_sum
-  }
-' data/medium
-x_sum 4986.019682
-
-
-

or

-
$ mlr --opprint put -q '
-  @x_sum[$b] += $x;
-  end {
-    emit @x_sum, "b"
-  }
-' data/medium
-b   x_sum
-pan 965.763670
-wye 1023.548470
-zee 979.742016
-eks 1016.772857
-hat 1000.192668
-
-
-

The former (mlr stats1 et al.) has the advantages of being easier to type, being less error-prone to type, and running faster.

-

Nonetheless, out-of-stream variables (which I whimsically call oosvars), begin/end blocks, and emit statements give you the ability to implement logic – if you wish to do so – which isn’t present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.)

-

The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought.

-
-
-

Mean without/with oosvars

-
$ mlr --opprint stats1 -a mean -f x data/medium
-x_mean
-0.498602
-
-
-
$ mlr --opprint put -q '
-  @x_sum += $x;
-  @x_count += 1;
-  end {
-    @x_mean = @x_sum / @x_count;
-    emit @x_mean
-  }
-' data/medium
-x_mean
-0.498602
-
-
-
-
-

Keyed mean without/with oosvars

-
$ mlr --opprint stats1 -a mean -f x -g a,b data/medium
-a   b   x_mean
-pan pan 0.513314
-eks pan 0.485076
-wye wye 0.491501
-eks wye 0.483895
-wye pan 0.499612
-zee pan 0.519830
-eks zee 0.495463
-zee wye 0.514267
-hat wye 0.493813
-pan wye 0.502362
-zee eks 0.488393
-hat zee 0.509999
-hat eks 0.485879
-wye hat 0.497730
-pan eks 0.503672
-eks eks 0.522799
-hat hat 0.479931
-hat pan 0.464336
-zee zee 0.512756
-pan hat 0.492141
-pan zee 0.496604
-zee hat 0.467726
-wye zee 0.505907
-eks hat 0.500679
-wye eks 0.530604
-
-
-
$ mlr --opprint put -q '
-  @x_sum[$a][$b] += $x;
-  @x_count[$a][$b] += 1;
-  end{
-    for ((a, b), v in @x_sum) {
-      @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b];
-    }
-    emit @x_mean, "a", "b"
-  }
-' data/medium
-a   b   x_mean
-pan pan 0.513314
-pan wye 0.502362
-pan eks 0.503672
-pan hat 0.492141
-pan zee 0.496604
-eks pan 0.485076
-eks wye 0.483895
-eks zee 0.495463
-eks eks 0.522799
-eks hat 0.500679
-wye wye 0.491501
-wye pan 0.499612
-wye hat 0.497730
-wye zee 0.505907
-wye eks 0.530604
-zee pan 0.519830
-zee wye 0.514267
-zee eks 0.488393
-zee zee 0.512756
-zee hat 0.467726
-hat wye 0.493813
-hat zee 0.509999
-hat eks 0.485879
-hat hat 0.479931
-hat pan 0.464336
-
-
-
-
-

Variance and standard deviation without/with oosvars

-
$ mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium
-x_count  10000
-x_sum    4986.019682
-x_mean   0.498602
-x_var    0.084270
-x_stddev 0.290293
-
-
-
$ cat variance.mlr
-@n += 1;
-@sumx += $x;
-@sumx2 += $x**2;
-end {
-  @mean = @sumx / @n;
-  @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1);
-  @stddev = sqrt(@var);
-  emitf @n, @sumx, @sumx2, @mean, @var, @stddev
-}
-
-
-
$ mlr --oxtab put -q -f variance.mlr data/medium
-n      10000
-sumx   4986.019682
-sumx2  3328.652400
-mean   0.498602
-var    0.084270
-stddev 0.290293
-
-
-

You can also do this keyed, of course, imitating the keyed-mean example above.

-
-
-

Min/max without/with oosvars

-
$ mlr --oxtab stats1 -a min,max -f x data/medium
-x_min 0.000045
-x_max 0.999953
-
-
-
$ mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium
-x_min 0.000045
-x_max 0.999953
-
-
-
-
-

Keyed min/max without/with oosvars

-
$ mlr --opprint stats1 -a min,max -f x -g a data/medium
-a   x_min    x_max
-pan 0.000204 0.999403
-eks 0.000692 0.998811
-wye 0.000187 0.999823
-zee 0.000549 0.999490
-hat 0.000045 0.999953
-
-
-
$ mlr --opprint --from data/medium put -q '
-  @min[$a] = min(@min[$a], $x);
-  @max[$a] = max(@max[$a], $x);
-  end{
-    emit (@min, @max), "a";
-  }
-'
-a   min      max
-pan 0.000204 0.999403
-eks 0.000692 0.998811
-wye 0.000187 0.999823
-zee 0.000549 0.999490
-hat 0.000045 0.999953
-
-
-
-
-

Delta without/with oosvars

-
$ mlr --opprint step -a delta -f x data/small
-a   b   i x                   y                   x_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  0
-eks pan 2 0.7586799647899636  0.5221511083334797  0.411890
-wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077
-eks wye 4 0.38139939387114097 0.13418874328430463 0.176796
-wye pan 5 0.5732889198020006  0.8636244699032729  0.191890
-
-
-
$ mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small
-a   b   i x                   y                   x_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  0
-eks pan 2 0.7586799647899636  0.5221511083334797  0.411890
-wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077
-eks wye 4 0.38139939387114097 0.13418874328430463 0.176796
-wye pan 5 0.5732889198020006  0.8636244699032729  0.191890
-
-
-
-
-

Keyed delta without/with oosvars

-
$ mlr --opprint step -a delta -f x -g a data/small
-a   b   i x                   y                   x_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  0
-eks pan 2 0.7586799647899636  0.5221511083334797  0
-wye wye 3 0.20460330576630303 0.33831852551664776 0
-eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281
-wye pan 5 0.5732889198020006  0.8636244699032729  0.368686
-
-
-
$ mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small
-a   b   i x                   y                   x_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  0
-eks pan 2 0.7586799647899636  0.5221511083334797  0
-wye wye 3 0.20460330576630303 0.33831852551664776 0
-eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281
-wye pan 5 0.5732889198020006  0.8636244699032729  0.368686
-
-
-
-
-

Exponentially weighted moving averages without/with oosvars

-
$ mlr --opprint step -a ewma -d 0.1 -f x data/small
-a   b   i x                   y                   x_ewma_0.1
-pan pan 1 0.3467901443380824  0.7268028627434533  0.346790
-eks pan 2 0.7586799647899636  0.5221511083334797  0.387979
-wye wye 3 0.20460330576630303 0.33831852551664776 0.369642
-eks wye 4 0.38139939387114097 0.13418874328430463 0.370817
-wye pan 5 0.5732889198020006  0.8636244699032729  0.391064
-
-
-
$ mlr --opprint put '
-  begin{ @a=0.1 };
-  $e = NR==1 ? $x : @a * $x + (1 - @a) * @e;
-  @e=$e
-' data/small
-a   b   i x                   y                   e
-pan pan 1 0.3467901443380824  0.7268028627434533  0.346790
-eks pan 2 0.7586799647899636  0.5221511083334797  0.387979
-wye wye 3 0.20460330576630303 0.33831852551664776 0.369642
-eks wye 4 0.38139939387114097 0.13418874328430463 0.370817
-wye pan 5 0.5732889198020006  0.8636244699032729  0.391064
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/customization.html b/docs6/_build/html/customization.html deleted file mode 100644 index f403fc1c1..000000000 --- a/docs6/_build/html/customization.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - Customization: .mlrrc — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Customization: .mlrrc

-
-

How to use .mlrrc

-

Suppose you always use CSV files. Then instead of always having to type --csv as in

-
mlr --csv cut -x -f extra mydata.csv
-
-
-
mlr --csv sort -n id mydata.csv
-
-
-

and so on, you can instead put the following into your $HOME/.mlrrc:

-
--csv
-
-
-

Then you can just type things like

-
mlr cut -x -f extra mydata.csv
-
-
-
mlr sort -n id mydata.csv
-
-
-

and the --csv part will automatically be understood. (If you do want to process, say, a JSON file then mlr --json ... at the command line will override the default from your .mlrrc.)

-
-
-

What you can put in your .mlrrc

-
    -
  • You can include any command-line flags, except the “terminal” ones such as --help.

  • -
  • The formatting rule is you need to put one flag beginning with -- per line: for example, --csv on one line and --nr-progress-mod 1000 on a separate line.

  • -
  • Since every line starts with a -- option, you can leave off the initial -- if you want. For example, ojson is the same as --ojson, and nr-progress-mod 1000 is the same as --nr-progress-mod 1000.

  • -
  • Comments are from a # to the end of the line.

  • -
  • Empty lines are ignored – including lines which are empty after comments are removed.

  • -
-

Here is an example .mlrrc file:

-
# These are my preferred default settings for Miller
-
-# Input and output formats are CSV by default (unless otherwise specified
-# on the mlr command line):
-csv
-
-# If a data line has fewer fields than the header line, instead of erroring
-# (which is the default), just insert empty values for the missing ones:
-allow-ragged-csv-input
-
-# These are no-ops for CSV, but when I do use JSON output, I want these
-# pretty-printing options to be used:
-jvstack
-jlistwrap
-
-# Use "@", rather than "#", for comments within data files:
-skip-comments-with @
-
-
-
-
-

Where to put your .mlrrc

-
    -
  • If the environment variable MLRRC is set:

    -
      -
    • If its value is __none__ then no .mlrrc files are processed. (This is nice for things like regression testing.)

    • -
    • Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort mlr with a usage message (as if you had mistyped something on the command line). If the file can’t be loaded at all, though, it is silently skipped.

    • -
    • Any .mlrrc in your home directory or current directory is ignored whenever MLRRC is set in the environment.

    • -
    • Example line in your shell’s rc file: export MLRRC=/path/to/my/mlrrc

    • -
    -
  • -
  • Otherwise:

    -
      -
    • If $HOME/.mlrrc exists, it’s processed as above.

    • -
    • If ./.mlrrc exists, it’s then also processed as above.

    • -
    • The idea is you can have all your settings in your $HOME/.mlrrc, then override maybe one or two for your current directory if you like.

    • -
    -
  • -
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/data-examples.html b/docs6/_build/html/data-examples.html deleted file mode 100644 index 7d5c9a9d8..000000000 --- a/docs6/_build/html/data-examples.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - Data-diving examples — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Data-diving examples

-
-

flins data

-

The flins.csv file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data.

-

Vertical-tabular format is good for a quick look at CSV data layout – seeing what columns you have to work with:

-
$ head -n 2 data/flins.csv | mlr --icsv --oxtab cat
-county   Seminole
-tiv_2011 22890.55
-tiv_2012 20848.71
-line     Residential
-
-
-

A few simple queries:

-
$ mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head
-county     count
-Seminole   1
-Miami Dade 2
-Palm Beach 1
-Highlands  2
-Duval      1
-St. Johns  1
-
-$ mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line
-
-
-

Categorization of total insured value:

-
$ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012
-tiv_2012_min tiv_2012_mean  tiv_2012_max
-19757.910000 1061531.463750 2785551.630000
-
-$ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line
-
-$ mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible
-hu_site_deductible_p0
-hu_site_deductible_p10
-hu_site_deductible_p50
-hu_site_deductible_p90
-hu_site_deductible_p95
-hu_site_deductible_p99
-hu_site_deductible_p100
-
-$ mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head
-county     hu_site_deductible_p95 hu_site_deductible_p99 hu_site_deductible_p100
-Duval      -                      -                      -
-Highlands  -                      -                      -
-Miami Dade -                      -                      -
-Palm Beach -                      -                      -
-Seminole   -                      -                      -
-St. Johns  -                      -                      -
-
-$ mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012
-tiv_2011_tiv_2012_corr  0.935363
-tiv_2011_tiv_2012_ols_m 1.089091
-tiv_2011_tiv_2012_ols_b 103095.523356
-tiv_2011_tiv_2012_ols_n 8
-tiv_2011_tiv_2012_r2    0.874904
-
-$ mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county
-county     tiv_2011_tiv_2012_corr tiv_2011_tiv_2012_ols_m tiv_2011_tiv_2012_ols_b tiv_2011_tiv_2012_ols_n tiv_2011_tiv_2012_r2
-Seminole   -                      -                       -                       1                       -
-Miami Dade 1.000000               0.930643                -2311.154328            2                       1.000000
-Palm Beach -                      -                       -                       1                       -
-Highlands  1.000000               1.055693                -4529.793939            2                       1.000000
-Duval      -                      -                       -                       1                       -
-St. Johns  -                      -                       -                       1                       -
-
-
-
-
-

Color/shape data

-

The colored-shapes.dkvp file is some sample data produced by the mkdat2 script. The idea is:

-
    -
  • Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically.

  • -
  • Each record is labeled with one of a few colors and one of a few shapes.

  • -
  • The flag field is 0 or 1, with probability dependent on color

  • -
  • The u field is plain uniform on the unit interval.

  • -
  • The v field is the same, except tightly correlated with u for red circles.

  • -
  • The w field is autocorrelated for each color/shape pair.

  • -
  • The x field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape.

  • -
-

Peek at the data:

-
$ wc -l data/colored-shapes.dkvp
-   10078 data/colored-shapes.dkvp
-
-$ head -n 6 data/colored-shapes.dkvp | mlr --opprint cat
-color  shape    flag i  u                   v                    w                   x
-yellow triangle 1    11 0.6321695890307647  0.9887207810889004   0.4364983936735774  5.7981881667050565
-red    square   1    15 0.21966833570651523 0.001257332190235938 0.7927778364718627  2.944117399716207
-red    circle   1    16 0.20901671281497636 0.29005231936593445  0.13810280912907674 5.065034003400998
-red    square   0    48 0.9562743938458542  0.7467203085342884   0.7755423050923582  7.117831369597269
-purple triangle 0    51 0.4355354501763202  0.8591292672156728   0.8122903963006748  5.753094629505863
-red    square   0    64 0.2015510269821953  0.9531098083420033   0.7719912015786777  5.612050466474166
-
-
-

Look at uncategorized stats (using creach for spacing).

-

Here it looks reasonable that u is unit-uniform; something’s up with v but we can’t yet see what:

-
$ mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3
-flag_min  0
-flag_mean 0.398889
-flag_max  1
-
-u_min     0.000044
-u_mean    0.498326
-u_max     0.999969
-
-v_min     -0.092709
-v_mean    0.497787
-v_max     1.072500
-
-
-

The histogram shows the different distribution of 0/1 flags:

-
$ mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp
-bin_lo    bin_hi   flag_count u_count v_count
--0.100000 0.000000 6058       0       36
-0.000000  0.100000 0          1062    988
-0.100000  0.200000 0          985     1003
-0.200000  0.300000 0          1024    1014
-0.300000  0.400000 0          1002    991
-0.400000  0.500000 0          989     1041
-0.500000  0.600000 0          1001    1016
-0.600000  0.700000 0          972     962
-0.700000  0.800000 0          1035    1070
-0.800000  0.900000 0          995     993
-0.900000  1.000000 4020       1013    939
-1.000000  1.100000 0          0       25
-
-
-

Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script:

-
$ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp
-color  flag_min flag_mean flag_max u_min    u_mean   u_max    v_min     v_mean   v_max
-blue   0        0.584354  1        0.000044 0.517717 0.999969 0.001489  0.491056 0.999576
-green  0        0.209197  1        0.000488 0.504861 0.999936 0.000501  0.499085 0.999676
-orange 0        0.521452  1        0.001235 0.490532 0.998885 0.002449  0.487764 0.998475
-purple 0        0.090193  1        0.000266 0.494005 0.999647 0.000364  0.497051 0.999975
-red    0        0.303167  1        0.000671 0.492560 0.999882 -0.092709 0.496535 1.072500
-yellow 0        0.892427  1        0.001300 0.497129 0.999923 0.000711  0.510627 0.999919
-
-$ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp
-shape    flag_min flag_mean flag_max u_min    u_mean   u_max    v_min     v_mean   v_max
-circle   0        0.399846  1        0.000044 0.498555 0.999923 -0.092709 0.495524 1.072500
-square   0        0.396112  1        0.000188 0.499385 0.999969 0.000089  0.496538 0.999975
-triangle 0        0.401542  1        0.000881 0.496859 0.999661 0.000717  0.501050 0.999995
-
-
-

Look at bivariate stats by color and shape. In particular, u,v pairwise correlation for red circles pops out:

-
$ mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp
-u_v_corr  w_x_corr
-0.133418 -0.011320
-
-$ mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp
- color    shape  u_v_corr  w_x_corr
-   red   circle  0.980798 -0.018565
-orange   square  0.176858 -0.071044
- green   circle  0.057644  0.011795
-   red   square  0.055745 -0.000680
-yellow triangle  0.044573  0.024605
-yellow   square  0.043792 -0.044623
-purple   circle  0.035874  0.134112
-  blue   square  0.032412 -0.053508
-  blue triangle  0.015356 -0.000608
-orange   circle  0.010519 -0.162795
-   red triangle  0.008098  0.012486
-purple triangle  0.005155 -0.045058
-purple   square -0.025680  0.057694
- green   square -0.025776 -0.003265
-orange triangle -0.030457 -0.131870
-yellow   circle -0.064773  0.073695
-  blue   circle -0.102348 -0.030529
- green triangle -0.109018 -0.048488
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/data-sharing.html b/docs6/_build/html/data-sharing.html deleted file mode 100644 index 3b0498955..000000000 --- a/docs6/_build/html/data-sharing.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - - - Mixing with other languages — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Mixing with other languages

-

As discussed in the section on File formats, Miller supports several different file formats. Different tools are good at different things, so it’s important to be able to move data into and out of other languages. CSV and JSON are well-known, of course; here are some examples using DKVP format, with Ruby and Python. Last, we show how to use arbitrary shell commands to extend functionality beyond Miller’s domain-specific language.

-
-

DKVP I/O in Python

-

Here are the I/O routines:

-
#!/usr/bin/env python
-
-# ================================================================
-# Example of DKVP I/O using Python.
-#
-# Key point: Use Miller for what it's good at; pass data into/out of tools in
-# other languages to do what they're good at.
-#
-#   bash$ python -i dkvp_io.py
-#
-#   # READ
-#   >>> map = dkvpline2map('x=1,y=2', '=', ',')
-#   >>> map
-#   OrderedDict([('x', '1'), ('y', '2')])
-#
-#   # MODIFY
-#   >>> map['z'] = map['x'] + map['y']
-#   >>> map
-#   OrderedDict([('x', '1'), ('y', '2'), ('z', 3)])
-#
-#   # WRITE
-#   >>> line = map2dkvpline(map, '=', ',')
-#   >>> line
-#   'x=1,y=2,z=3'
-#
-# ================================================================
-
-import re
-import collections
-
-# ----------------------------------------------------------------
-# ips and ifs (input pair separator and input field separator) are nominally '=' and ','.
-def dkvpline2map(line, ips, ifs):
-    pairs = re.split(ifs, line)
-    map = collections.OrderedDict()
-    for pair in pairs:
-            key, value = re.split(ips, pair, 1)
-
-            # Type inference:
-            try:
-                    value = int(value)
-            except:
-                    try:
-                            value = float(value)
-                    except:
-                            pass
-
-            map[key] = value
-    return map
-
-# ----------------------------------------------------------------
-# ops and ofs (output pair separator and output field separator) are nominally '=' and ','.
-def map2dkvpline(map , ops, ofs):
-    line = ''
-    pairs = []
-    for key in map:
-            pairs.append(str(key) + ops + str(map[key]))
-    return str.join(ofs, pairs)
-
-
-

And here is an example using them:

-
$ cat polyglot-dkvp-io/example.py
-#!/usr/bin/env python
-
-import sys
-import re
-import copy
-import dkvp_io
-
-while True:
-    # Read the original record:
-    line = sys.stdin.readline().strip()
-    if line == '':
-            break
-    map = dkvp_io.dkvpline2map(line, '=', ',')
-
-    # Drop a field:
-    map.pop('x')
-
-    # Compute some new fields:
-    map['ab'] = map['a'] + map['b']
-    map['iy'] = map['i'] + map['y']
-
-    # Add new fields which show type of each already-existing field:
-    omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over
-    keys = omap.keys()
-    for key in keys:
-            # Convert "<type 'int'>" to just "int", etc.:
-            type_string = str(map[key].__class__)
-            type_string = re.sub("<type '", "", type_string) # python2
-            type_string = re.sub("<class '", "", type_string) # python3
-            type_string = re.sub("'>", "", type_string)
-            map['t'+key] = type_string
-
-    # Write the modified record:
-    print(dkvp_io.map2dkvpline(map, '=', ','))
-
-
-

Run as-is:

-
$ python polyglot-dkvp-io/example.py < data/small
-a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
-a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
-a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
-a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
-a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
-
-
-

Run as-is, then pipe to Miller for pretty-printing:

-
$ python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat
-a   b   i y                   ab     iy                 ta  tb  ti  ty    tab tiy
-pan pan 1 0.7268028627434533  panpan 1.7268028627434533 str str int float str float
-eks pan 2 0.5221511083334797  ekspan 2.5221511083334796 str str int float str float
-wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 str str int float str float
-eks wye 4 0.13418874328430463 ekswye 4.134188743284304  str str int float str float
-wye pan 5 0.8636244699032729  wyepan 5.863624469903273  str str int float str float
-
-
-
-
-

DKVP I/O in Ruby

-

Here are the I/O routines:

-
#!/usr/bin/env ruby
-
-# ================================================================
-# Example of DKVP I/O using Ruby.
-#
-# Key point: Use Miller for what it's good at; pass data into/out of tools in
-# other languages to do what they're good at.
-#
-#   bash$ irb -I. -r dkvp_io.rb
-#
-#   # READ
-#   irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',')
-#   => {"x"=>"1", "y"=>"2"}
-#
-#   # MODIFY
-#   irb(main):001:0> map['z'] = map['x'] + map['y']
-#   => 3
-#
-#   # WRITE
-#   irb(main):002:0> line = map2dkvpline(map, '=', ',')
-#   => "x=1,y=2,z=3"
-#
-# ================================================================
-
-# ----------------------------------------------------------------
-# ips and ifs (input pair separator and input field separator) are nominally '=' and ','.
-def dkvpline2map(line, ips, ifs)
-  map = {}
-  line.split(ifs).each do |pair|
-    (k, v) = pair.split(ips, 2)
-
-    # Type inference:
-    begin
-      v = Integer(v)
-    rescue ArgumentError
-      begin
-        v = Float(v)
-      rescue ArgumentError
-        # Leave as string
-      end
-    end
-
-    map[k] = v
-  end
-  map
-end
-
-# ----------------------------------------------------------------
-# ops and ofs (output pair separator and output field separator) are nominally '=' and ','.
-def map2dkvpline(map, ops, ofs)
-  map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs)
-end
-
-
-

And here is an example using them:

-
$ cat polyglot-dkvp-io/example.rb
-#!/usr/bin/env ruby
-
-require 'dkvp_io'
-
-ARGF.each do |line|
-  # Read the original record:
-  map = dkvpline2map(line.chomp, '=', ',')
-
-  # Drop a field:
-  map.delete('x')
-
-  # Compute some new fields:
-  map['ab'] = map['a'] + map['b']
-  map['iy'] = map['i'] + map['y']
-
-  # Add new fields which show type of each already-existing field:
-  keys = map.keys
-  keys.each do |key|
-    map['t'+key] = map[key].class
-  end
-
-  # Write the modified record:
-  puts map2dkvpline(map, '=', ',')
-end
-
-
-

Run as-is:

-
$ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small
-a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
-a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
-a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
-a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
-a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
-
-
-

Run as-is, then pipe to Miller for pretty-printing:

-
$ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat
-a   b   i y                   ab     iy                 ta     tb     ti      ty    tab    tiy
-pan pan 1 0.7268028627434533  panpan 1.7268028627434533 String String Integer Float String Float
-eks pan 2 0.5221511083334797  ekspan 2.5221511083334796 String String Integer Float String Float
-wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 String String Integer Float String Float
-eks wye 4 0.13418874328430463 ekswye 4.134188743284304  String String Integer Float String Float
-wye pan 5 0.8636244699032729  wyepan 5.863624469903273  String String Integer Float String Float
-
-
-
-
-

SQL-output examples

-

Please see SQL-output examples.

-
-
-

SQL-input examples

-

Please see SQL-input examples.

-
-
-

Running shell commands

-

The system DSL function allows you to run a specific shell command and put its output – minus the final newline – into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you.

-
$ mlr --opprint put '$o = system("echo hello world")' data/small
-a   b   i x                   y                   o
-pan pan 1 0.3467901443380824  0.7268028627434533  hello world
-eks pan 2 0.7586799647899636  0.5221511083334797  hello world
-wye wye 3 0.20460330576630303 0.33831852551664776 hello world
-eks wye 4 0.38139939387114097 0.13418874328430463 hello world
-wye pan 5 0.5732889198020006  0.8636244699032729  hello world
-
-
-
$ mlr --opprint put '$o = system("echo {" . NR . "}")' data/small
-a   b   i x                   y                   o
-pan pan 1 0.3467901443380824  0.7268028627434533  {1}
-eks pan 2 0.7586799647899636  0.5221511083334797  {2}
-wye wye 3 0.20460330576630303 0.33831852551664776 {3}
-eks wye 4 0.38139939387114097 0.13418874328430463 {4}
-wye pan 5 0.5732889198020006  0.8636244699032729  {5}
-
-
-
$ mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small
-a   b   i x                   y                   o
-pan pan 1 0.3467901443380824  0.7268028627434533  f29c748220331c273ef16d5115f6ecd799947f13  -
-eks pan 2 0.7586799647899636  0.5221511083334797  456d988ecb3bf1b75f057fc6e9fe70db464e9388  -
-wye wye 3 0.20460330576630303 0.33831852551664776 eab0de043d67f441c7fd1e335f0ca38708e6ebf7  -
-eks wye 4 0.38139939387114097 0.13418874328430463 456d988ecb3bf1b75f057fc6e9fe70db464e9388  -
-wye pan 5 0.5732889198020006  0.8636244699032729  eab0de043d67f441c7fd1e335f0ca38708e6ebf7  -
-
-
-

Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system date command for the current time in nanoseconds versus computing it in process:

-
$ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small
-a   b   i x                   y                   t                    t_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.513903817 0
-eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.514722876 0.000819
-wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895
-eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929
-wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.517518828 0.000971
-
-
-
$ mlr --opprint put '$t=systime()' then step -a delta -f t data/small
-a   b   i x                   y                   t                 t_delta
-pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.518699 0
-eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.518717 0.000018
-wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006
-eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004
-wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.518730 0.000003
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/etymology.html b/docs6/_build/html/etymology.html deleted file mode 100644 index c9401628b..000000000 --- a/docs6/_build/html/etymology.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - Why call it Miller? — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Why call it Miller?

-

The Unix toolkit was created in the 1970s and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the classic toolkit style: if this were music, Miller would be a tribute album. Likewise, since commands are subcommands of the mlr executable, the result is a band, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the Steve Miller Band.

-

(Additionally, and far more prosaically … just as a miller is someone who grinds and mixes grain into flour to extend its usefulness, Miller grinds and mixes data for you.)

-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/faq.html b/docs6/_build/html/faq.html deleted file mode 100644 index dc22a2a75..000000000 --- a/docs6/_build/html/faq.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - FAQ — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

FAQ

-
-

No output at all

-

Try od -xcv and/or cat -e on your file to check for non-printable characters.

-

If you’re using Miller version less than 5.0.0 (try mlr --version on your system to find out), when the line-ending-autodetect feature was introduced, please see http://johnkerl.org/miller-releases/miller-4.5.0/doc/index.html.

-
-
-

Fields not selected

-

Check the field-separators of the data, e.g. with the command-line head program. Example: for CSV, Miller’s default record separator is comma; if your data is tab-delimited, e.g. aTABbTABc, then Miller won’t find three fields named a, b, and c but rather just one named aTABbTABc. Solution in this case: mlr --fs tab {remaining arguments ...}.

-

Also try od -xcv and/or cat -e on your file to check for non-printable characters.

-
-
-

Diagnosing delimiter specifications

-
# Use the `file` command to see if there are CR/LF terminators (in this case,
-# there are not):
-$ file data/colours.csv
-data/colours.csv: UTF-8 Unicode text
-
-# Look at the file to find names of fields
-$ cat data/colours.csv
-KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR
-masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz
-masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah
-
-# Extract a few fields:
-$ mlr --csv cut -f KEY,PL,RO data/colours.csv
-(only blank lines appear)
-
-# Use XTAB output format to get a sharper picture of where records/fields
-# are being split:
-$ mlr --icsv --oxtab cat data/colours.csv
-KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz
-
-KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah
-
-# Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being
-# treated as a single field name in the CSV header, and likewise each
-# subsequent line is being treated as a single field value. This is because
-# the default field separator is a comma but we have semicolons here.
-# Use XTAB again with different field separator (--fs semicolon):
- mlr --icsv --ifs semicolon --oxtab cat data/colours.csv
-KEY masterdata_colourcode_1
-DE  Weiß
-EN  White
-ES  Blanco
-FI  Valkoinen
-FR  Blanc
-IT  Bianco
-NL  Wit
-PL  Biały
-RO  Alb
-TR  Beyaz
-
-KEY masterdata_colourcode_2
-DE  Schwarz
-EN  Black
-ES  Negro
-FI  Musta
-FR  Noir
-IT  Nero
-NL  Zwart
-PL  Czarny
-RO  Negru
-TR  Siyah
-
-# Using the new field-separator, retry the cut:
- mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv
-KEY;PL;RO
-masterdata_colourcode_1;Biały;Alb
-masterdata_colourcode_2;Czarny;Negru
-
-
-
-
-

How do I suppress numeric conversion?

-

TL;DR use put -S.

-

Within mlr put and mlr filter, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string:

-
$ cat data/scan-example-1.tbl
-value
-1
-2.0
-3x
-hello
-
-
-
$ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl
-value copy     type
-1     1        int
-2.0   2.000000 float
-3x    3x       string
-hello hello    string
-
-
-

The numeric-conversion rule is simple:

-
    -
  • Try to scan as integer ("1" should be int);

  • -
  • If that doesn’t succeed, try to scan as float ("1.0" should be float);

  • -
  • If that doesn’t succeed, leave the value as a string ("1x" is string).

  • -
-

This is a sensible default: you should be able to put '$z = $x + $y' without having to write '$z = int($x) + float($y)'. Also note that default output format for floating-point numbers created by put (and other verbs such as stats1) is six decimal places; you can override this using mlr --ofmt. Also note that Miller uses your system’s C library functions whenever possible: e.g. sscanf for converting strings to integer or floating-point.

-

But now suppose you have data like these:

-
$ cat data/scan-example-2.tbl
-value
-0001
-0002
-0005
-0005WA
-0006
-0007
-0007WA
-0008
-0009
-0010
-
-
-
$ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl
-value  copy     type
-0001   1        int
-0002   2        int
-0005   5        int
-0005WA 0005WA   string
-0006   6        int
-0007   7        int
-0007WA 0007WA   string
-0008   8.000000 float
-0009   9.000000 float
-0010   8        int
-
-
-

The same conversion rules as above are being used. Namely:

-
    -
  • By default field values are inferred to int, else float, else string;

  • -
  • leading zeroes indicate octal for integers (sscanf semantics);

  • -
  • since 0008 doesn’t scan as integer (leading 0 requests octal but 8 isn’t a valid octal digit), the float scan is tried next and it succeeds;

  • -
  • default floating-point output format is 6 decimal places (override with mlr --ofmt).

  • -
-

Taken individually the rules make sense; taken collectively they produce a mishmash of types here.

-

The solution is to use the -S flag for mlr put and/or mlr filter. Then all field values are left as string. You can type-coerce on demand using syntax like '$z = int($x) + float($y)'. (See also DSL reference; see also https://github.com/johnkerl/miller/issues/150.)

-
$ mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl
-value  copy   type
-0001   0001   string
-0002   0002   string
-0005   0005   string
-0005WA 0005WA string
-0006   0006   string
-0007   0007   string
-0007WA 0007WA string
-0008   0008   string
-0009   0009   string
-0010   0010   string
-
-
-
-
-

How do I examine then-chaining?

-

Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step.

-

First, look at the input data:

-
$ cat data/then-example.csv
-Status,Payment_Type,Amount
-paid,cash,10.00
-pending,debit,20.00
-paid,cash,50.00
-pending,credit,40.00
-paid,debit,30.00
-
-
-

Next, run the first step of your command, omitting anything from the first then onward:

-
$ mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv
-Status  Payment_Type count
-paid    cash         2
-pending debit        1
-pending credit       1
-paid    debit        1
-
-
-

After that, run it with the next then step included:

-
$ mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv
-Status  Payment_Type count
-paid    cash         2
-pending debit        1
-pending credit       1
-paid    debit        1
-
-
-

Now if you use then to include another verb after that, the columns Status, Payment_Type, and count will be the input to that verb.

-

Note, by the way, that you’ll get the same results using pipes:

-
$ mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count
-Status  Payment_Type count
-paid    cash         2
-pending debit        1
-pending credit       1
-paid    debit        1
-
-
-
-
-

I assigned $9 and it’s not 9th

-

Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with --implicit-csv-header, Miller will sequentially assign keys of the form 1, 2, etc. But these are not integer array indices: they’re just field names taken from the initial field ordering in the input data.

-
$ echo x,y,z | mlr --dkvp cat
-1=x,2=y,3=z
-
-
-
$ echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"'
-1=x,2=y,3=z,6=a,4=b,55=cde
-
-
-
$ echo x,y,z | mlr --nidx cat
-x,y,z
-
-
-
$ echo x,y,z | mlr --csv --implicit-csv-header cat
-1,2,3
-x,y,z
-
-
-
$ echo x,y,z | mlr --dkvp rename 2,999
-1=x,999=y,3=z
-
-
-
$ echo x,y,z | mlr --dkvp rename 2,newname
-1=x,newname=y,3=z
-
-
-
$ echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2
-3,1,2
-z,x,y
-
-
-
-
-

How can I filter by date?

-

Given input like

-
$ cat dates.csv
-date,event
-2018-02-03,initialization
-2018-03-07,discovery
-2018-02-03,allocation
-
-
-

we can use strptime to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset’s date-formatting to the strptime format-string. For example:

-
$ mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv
-date,event
-2018-03-07,discovery
-
-
-

Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 – thanks @aborruso!

-
-
-

How can I handle commas-as-data in various formats?

-

CSV handles this well and by design:

-
$ cat commas.csv
-Name,Role
-"Xiao, Lin",administrator
-"Khavari, Darius",tester
-
-
-

Likewise Tabular JSON:

-
$ mlr --icsv --ojson cat commas.csv
-{ "Name": "Xiao, Lin", "Role": "administrator" }
-{ "Name": "Khavari, Darius", "Role": "tester" }
-
-
-

For Miller’s vertical-tabular format there is no escaping for carriage returns, but commas work fine:

-
$ mlr --icsv --oxtab cat commas.csv
-Name Xiao, Lin
-Role administrator
-
-Name Khavari, Darius
-Role tester
-
-
-

But for Key-value_pairs and index-numbered, commas are the default field separator. And – as of Miller 5.4.0 anyway – there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters:

-
$ mlr --icsv --odkvp cat commas.csv
-Name=Xiao, Lin,Role=administrator
-Name=Khavari, Darius,Role=tester
-
-
-

One solution is to use a different delimiter, such as a pipe character:

-
$ mlr --icsv --odkvp --ofs pipe cat commas.csv
-Name=Xiao, Lin|Role=administrator
-Name=Khavari, Darius|Role=tester
-
-
-

To be extra-sure to avoid data/delimiter clashes, you can also use control -characters as delimiters – here, control-A:

-
$ mlr --icsv --odkvp --ofs '\001'  cat commas.csv | cat -v
-Name=Xiao, Lin^ARole=administrator
-Name=Khavari, Darius^ARole=tester
-
-
-
-
-

How can I handle field names with special symbols in them?

-

Simply surround the field names with curly braces:

-
$ echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}'
-x.a=3,y:b=4,z/c=5,product.all=60
-
-
-
-
-

How to escape ‘?’ in regexes?

-

One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression.

-
$ cat data/question.dat
-a=is it?,b=it is!
-$ mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat
-a is it?
-b it is!
-c is it ...
-$ mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat
-a is it?
-b it is!
-c is it ...
-
-
-

The ssub function exists precisely for this reason: so you don’t have to escape anything.

-
-
-

How can I put single-quotes into strings?

-

This is a little tricky due to the shell’s handling of quotes. For simplicity, let’s first put an update script into a file:

-
$a = "It's OK, I said, then 'for now'."
-
-
-
$ echo a=bcd | mlr put -f data/single-quote-example.mlr
-a=It's OK, I said, then 'for now'.
-
-
-

So, it’s simple: Miller’s DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem.

-

Without putting the update expression in a file, it’s messier:

-
$ echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."'
-a=It's OK, I said, 'for now'.
-
-
-

The idea is that the outermost single-quotes are to protect the put expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it outside the single-quoting for the shell. The pieces are the following, all concatenated together:

-
    -
  • $a="It

  • -
  • \'

  • -
  • s OK, I said,

  • -
  • \'

  • -
  • for now

  • -
  • \'

  • -
  • .

  • -
-
-
-

Why doesn’t mlr cut put fields in the order I want?

-

Example: columns x,i,a were requested but they appear here in the order a,i,x:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr cut -f x,i,a data/small
-a=pan,i=1,x=0.3467901443380824
-a=eks,i=2,x=0.7586799647899636
-a=wye,i=3,x=0.20460330576630303
-a=eks,i=4,x=0.38139939387114097
-a=wye,i=5,x=0.5732889198020006
-
-
-

The issue is that Miller’s cut, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the Unix/Linux system cut command, which has the same semantics.

-

The solution is to use the -o option:

-
$ mlr cut -o -f x,i,a data/small
-x=0.3467901443380824,i=1,a=pan
-x=0.7586799647899636,i=2,a=eks
-x=0.20460330576630303,i=3,a=wye
-x=0.38139939387114097,i=4,a=eks
-x=0.5732889198020006,i=5,a=wye
-
-
-
-
-

NR is not consecutive after then-chaining

-

Given this input data:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

why don’t I see NR=1 and NR=2 here??

-
$ mlr filter '$x > 0.5' then put '$NR = NR' data/small
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NR=2
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NR=5
-
-
-

The reason is that NR is computed for the original input records and isn’t dynamically updated. By contrast, NF is dynamically updated: it’s the number of fields in the current record, and if you add/remove a field, the value of NF will change:

-
$ echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF'
-nf1=3,u=4,nf2=5,nf3=3
-
-
-

NR, by contrast (and FNR as well), retains the value from the original input stream, and records may be dropped by a filter within a then-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows:

-
$ mlr --opprint --from data/small put '
-  begin{ @nr1 = 0 }
-  @nr1 += 1;
-  $nr1 = @nr1
-' \
-then filter '$x>0.5' \
-then put '
-  begin{ @nr2 = 0 }
-  @nr2 += 1;
-  $nr2 = @nr2
-'
-a   b   i x                  y                  nr1 nr2
-eks pan 2 0.7586799647899636 0.5221511083334797 2   1
-wye pan 5 0.5732889198020006 0.8636244699032729 5   2
-
-
-

Or, simply use mlr cat -n:

-
$ mlr filter '$x > 0.5' then cat -n data/small
-n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
-
-

Why am I not seeing all possible joins occur?

-

This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.

-

For example, the right file here has nine records, and the left file should add in the hostname column – so the join output should also have 9 records:

-
$ mlr --icsvlite --opprint cat data/join-u-left.csv
-hostname              ipaddr
-nadir.east.our.org    10.3.1.18
-zenith.west.our.org   10.3.1.27
-apoapsis.east.our.org 10.4.5.94
-
-
-
$ mlr --icsvlite --opprint cat data/join-u-right.csv
-ipaddr    timestamp  bytes
-10.3.1.27 1448762579 4568
-10.3.1.18 1448762578 8729
-10.4.5.94 1448762579 17445
-10.3.1.27 1448762589 12
-10.3.1.18 1448762588 44558
-10.4.5.94 1448762589 8899
-10.3.1.27 1448762599 0
-10.3.1.18 1448762598 73425
-10.4.5.94 1448762599 12200
-
-
-
$ mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv
-ipaddr    hostname              timestamp  bytes
-10.3.1.27 zenith.west.our.org   1448762579 4568
-10.4.5.94 apoapsis.east.our.org 1448762579 17445
-10.4.5.94 apoapsis.east.our.org 1448762589 8899
-10.4.5.94 apoapsis.east.our.org 1448762599 12200
-
-
-

The issue is that Miller’s join, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the Unix/Linux system join command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input.

-

The solution (besides pre-sorting the input files on the join keys) is to simply use mlr join -u (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input:

-
$ mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv
-ipaddr    hostname              timestamp  bytes
-10.3.1.27 zenith.west.our.org   1448762579 4568
-10.3.1.18 nadir.east.our.org    1448762578 8729
-10.4.5.94 apoapsis.east.our.org 1448762579 17445
-10.3.1.27 zenith.west.our.org   1448762589 12
-10.3.1.18 nadir.east.our.org    1448762588 44558
-10.4.5.94 apoapsis.east.our.org 1448762589 8899
-10.3.1.27 zenith.west.our.org   1448762599 0
-10.3.1.18 nadir.east.our.org    1448762598 73425
-10.4.5.94 apoapsis.east.our.org 1448762599 12200
-
-
-

General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file.

-
-
-

How to rectangularize after joins with unpaired?

-

Suppose you have the following two data files:

-
id,code
-3,0000ff
-2,00ff00
-4,ff0000
-
-
-
id,color
-4,red
-2,green
-
-
-

Joining on color the results are as expected:

-
$ mlr --csv join -j id -f data/color-codes.csv data/color-names.csv
-id,code,color
-4,ff0000,red
-2,00ff00,green
-
-
-

However, if we ask for left-unpaireds, since there’s no color column, we get a row not having the same column names as the other:

-
$ mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv
-id,code,color
-4,ff0000,red
-2,00ff00,green
-
-id,code
-3,0000ff
-
-
-

To fix this, we can use unsparsify:

-
$ mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv
-id,code,color
-4,ff0000,red
-2,00ff00,green
-3,0000ff,
-
-
-

Thanks to @aborruso for the tip!

-
-
-

What about XML or JSON file formats?

-

Miller handles tabular data, which is a list of records each having fields which are key-value pairs. Miller also doesn’t require that each record have the same field names (see also Record-heterogeneity). Regardless, tabular data is a non-recursive data structure.

-

XML, JSON, etc. are, by contrast, all recursive or nested data structures. For example, in JSON you can represent a hash map whose values are lists of lists.

-

Now, you can put tabular data into these formats – since list-of-key-value-pairs is one of the things representable in XML or JSON. Example:

-
# DKVP
-x=1,y=2
-z=3
-
-
-
# XML
-<table>
-  <record>
-    <field>
-      <key> x </key> <value> 1 </value>
-    </field>
-    <field>
-      <key> y </key> <value> 2 </value>
-    </field>
-  </record>
-  <record>
-    <field>
-      <key> z </key> <value> 3 </value>
-    </field>
-  </record>
-</table>
-
-
-
# JSON
-[{"x":1,"y":2},{"z":3}]
-
-
-

However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics – only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form – this is a general text-processing problem.

-

Miller does support tabular data represented in JSON: please see File formats. See also jq for a truly powerful, JSON-specific tool.

-

For XML, my suggestion is to use a tool like ff-extractor to do format conversion.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/feature-comparison.html b/docs6/_build/html/feature-comparison.html deleted file mode 100644 index 8921bd8bc..000000000 --- a/docs6/_build/html/feature-comparison.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - Unix-toolkit context — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Unix-toolkit context

-

How does Miller fit within the Unix toolkit (grep, sed, awk, etc.)?

-
-

File-format awareness

-

Miller respects CSV headers. If you do mlr --csv cat *.csv then the header line is written once:

-
$ cat data/a.csv
-a,b,c
-1,2,3
-4,5,6
-
-
-
$ cat data/b.csv
-a,b,c
-7,8,9
-
-
-
$ mlr --csv cat data/a.csv data/b.csv
-a,b,c
-1,2,3
-4,5,6
-7,8,9
-
-
-
$ mlr --csv sort -nr b data/a.csv data/b.csv
-a,b,c
-7,8,9
-4,5,6
-1,2,3
-
-
-

Likewise with mlr sort, mlr tac, and so on.

-
-
-

awk-like features: mlr filter and mlr put

-
    -
  • mlr filter includes/excludes records based on a filter expression, e.g. mlr filter '$count > 10'.

  • -
  • mlr put adds a new field as a function of others, e.g. mlr put '$xy = $x * $y' or mlr put '$counter = NR'.

  • -
  • The $name syntax is straight from awk’s $1 $2 $3 (adapted to name-based indexing), as are the variables FS, OFS, RS, ORS, NF, NR, and FILENAME. The ENV[...] syntax is from Ruby.

  • -
  • While awk functions are record-based, Miller subcommands (or verbs) are stream-based: each of them maps a stream of records into another stream of records.

  • -
  • Like awk, Miller (as of v5.0.0) allows you to define new functions within its put and filter expression language. Further programmability comes from chaining with then.

  • -
  • As with awk, $-variables are stream variables and all verbs (such as cut, stats1, put, etc.) as well as put/filter statements operate on streams. This means that you define actions to be done on each record and then stream your data through those actions. The built-in variables NF, NR, etc. change from one line to another, $x is a label for field x in the current record, and the input to sqrt($x) changes from one record to the next. The expression language for the put and filter verbs additionally allows you to define begin {...} and end {...} blocks for actions to be taken before and after records are processed, respectively.

  • -
  • As with awk, Miller’s put/filter language lets you set @sum=0 before records are read, then update that sum on each record, then print its value at the end. Unlike awk, Miller makes syntactically explicit the difference between variables with extent across all records (names starting with @, such as @sum) and variables which are local to the current expression (names starting without @, such as sum).

  • -
  • Miller can be faster than awk, cut, and so on, depending on platform; see also Performance. In particular, Miller’s DSL syntax is parsed into C control structures at startup time, with the bulk data-stream processing all done in C.

  • -
-
-
-

See also

-

See Verbs reference for more on Miller’s subcommands cat, cut, head, sort, tac, tail, top, and uniq, as well as DSL reference for more on the awk-like mlr filter and mlr put.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/features.html b/docs6/_build/html/features.html deleted file mode 100644 index b79f6b34d..000000000 --- a/docs6/_build/html/features.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - Features — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Features

-

Miller is like awk, sed, cut, join, and sort for name-indexed data such as -CSV, TSV, and tabular JSON. You get to work with your data using named -fields, without needing to count positional column indices.

-

This is something the Unix toolkit always could have done, and arguably -always should have done. It operates on key-value-pair data while the familiar -Unix tools operate on integer-indexed fields: if the natural data structure for -the latter is the array, then Miller’s natural data structure is the -insertion-ordered hash map. This encompasses a variety of data formats, -including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle -positionally-indexed data as a special case.)

-
    -
  • Miller is multi-purpose: it’s useful for data cleaning, data reduction, statistical reporting, devops, system administration, log-file processing, format conversion, and database-query post-processing.

  • -
  • You can use Miller to snarf and munge log-file data, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing.

  • -
  • Miller complements data-analysis tools such as R, pandas, etc.: you can use Miller to clean and prepare your data. While you can do basic statistics entirely in Miller, its streaming-data feature and single-pass algorithms enable you to reduce very large data sets.

  • -
  • Miller complements SQL databases: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples here and here.) You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry.

  • -
  • Miller also goes beyond the classic Unix tools by stepping fully into our modern, no-SQL world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved.

  • -
  • Miller is streaming: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (sort, tac, stats1), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in tail -f contexts.

  • -
  • Miller is pipe-friendly and interoperates with the Unix toolkit

  • -
  • Miller’s I/O formats include tabular pretty-printing, positionally indexed (Unix-toolkit style), CSV, JSON, and others

  • -
  • Miller does conversion between formats

  • -
  • Miller’s processing is format-aware: e.g. CSV sort and tac keep header lines first

  • -
  • Miller has high-throughput performance on par with the Unix toolkit

  • -
  • Not unlike jq (for JSON), Miller is written in portable, modern C, with zero runtime dependencies. You can download or compile a single binary, scp it to a faraway machine, and expect it to work.

  • -
-

Releases and release notes: https://github.com/johnkerl/miller/releases.

-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/file-formats.html b/docs6/_build/html/file-formats.html deleted file mode 100644 index 95581ffe1..000000000 --- a/docs6/_build/html/file-formats.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - - - - File formats — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

File formats

-

Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON – and other formats you’re likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data.

-
-

Examples

-
$ mlr --usage-data-format-examples
-  DKVP: delimited key-value pairs (Miller default format)
-  +---------------------+
-  | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
-  +---------------------+
-
-  NIDX: implicitly numerically indexed (Unix-toolkit style)
-  +---------------------+
-  | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
-  | fox jumped          | Record 2: "1" => "fox", "2" => "jumped"
-  +---------------------+
-
-  CSV/CSV-lite: comma-separated values with separate header line
-  +---------------------+
-  | apple,bat,cog       |
-  | 1,2,3               | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | 4,5,6               | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +---------------------+
-
-  Tabular JSON: nested objects are supported, although arrays within them are not:
-  +---------------------+
-  | {                   |
-  |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  |  "bat": 2,          |
-  |  "cog": 3           |
-  | }                   |
-  | {                   |
-  |   "dish": {         | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
-  |     "egg": 7,       |
-  |     "flint": 8      |
-  |   },                |
-  |   "garlic": ""      |
-  | }                   |
-  +---------------------+
-
-  PPRINT: pretty-printed tabular
-  +---------------------+
-  | apple bat cog       |
-  | 1     2   3         | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | 4     5   6         | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +---------------------+
-
-  XTAB: pretty-printed transposed tabular
-  +---------------------+
-  | apple 1             | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  | bat   2             |
-  | cog   3             |
-  |                     |
-  | dish 7              | Record 2: "dish" => "7", "egg" => "8"
-  | egg  8              |
-  +---------------------+
-
-  Markdown tabular (supported for output only):
-  +-----------------------+
-  | | apple | bat | cog | |
-  | | ---   | --- | --- | |
-  | | 1     | 2   | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | | 4     | 5   | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +-----------------------+
-
-
-
-
-

CSV/TSV/ASV/USV/etc.

-

When mlr is invoked with the --csv or --csvlite option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See Record-heterogeneity for how Miller handles changes of field names within a single data stream.

-

Miller has record separator RS and field separator FS, just as awk does. For TSV, use --fs tab; to convert TSV to CSV, use --ifs tab --ofs comma, etc. (See also Record/field/pair separators.)

-

TSV (tab-separated values): the following are synonymous pairs:

-
    -
  • --tsv and --csv --fs tab

  • -
  • --itsv and --icsv --ifs tab

  • -
  • --otsv and --ocsv --ofs tab

  • -
  • --tsvlite and --csvlite --fs tab

  • -
  • --itsvlite and --icsvlite --ifs tab

  • -
  • --otsvlite and --ocsvlite --ofs tab

  • -
-

ASV (ASCII-separated values): the flags --asv, --iasv, --oasv, --asvlite, --iasvlite, and --oasvlite are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively.

-

USV (Unicode-separated values): likewise, the flags --usv, --iusv, --ousv, --usvlite, --iusvlite, and --ousvlite use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively.

-

Miller’s --csv flag supports RFC-4180 CSV. This includes CRLF line-terminators by default, regardless of platform.

-

Here are the differences between CSV and CSV-lite:

-
    -
  • CSV supports RFC-4180-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not.

  • -
  • CSV does not allow heterogeneous data; CSV-lite does (see also Record-heterogeneity).

  • -
  • The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader.

  • -
-

Here are things they have in common:

-
    -
  • The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on.

  • -
  • The --implicit-csv-header flag for input and the --headerless-csv-output flag for output.

  • -
-
-
-

DKVP: Key-value pairs

-

Miller’s default file format is DKVP, for delimited key-value pairs. Example:

-
$ mlr cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

Such data are easy to generate, e.g. in Ruby with

-
puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}"
-
-
-
puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',')
-
-
-

or print statements in various languages, e.g.

-
echo "type=3,user=$USER,date=$date\n";
-
-
-
logger.log("type=3,user=$USER,date=$date\n");
-
-
-

Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, dish=7,egg=8,flint is parsed as "dish" => "7", "egg" => "8", "3" => "flint" and dish,egg,flint is parsed as "1" => "dish", "2" => "egg", "3" => "flint".

-

As discussed in Record-heterogeneity, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as

-
resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100, resource=/path/to/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-

etc. and I just log them as needed. Then later, I can use grep, mlr --opprint group-like, etc. -to analyze my logs.

-

See Main reference regarding how to specify separators other than the default equals-sign and comma.

-
-
-

NIDX: Index-numbered (toolkit style)

-

With --inidx --ifs ' ' --repifs, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior.

-

Example with index-numbered output:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-$ mlr --onidx --ofs ' ' cat data/small
-pan pan 1 0.3467901443380824 0.7268028627434533
-eks pan 2 0.7586799647899636 0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006 0.8636244699032729
-
-
-

Example with index-numbered input:

-
$ cat data/mydata.txt
-oh say can you see
-by the dawn's
-early light
-
-$ mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt
-1=oh,2=say,3=can,4=you,5=see
-1=by,2=the,3=dawn's
-1=early,2=light
-
-
-

Example with index-numbered input and output:

-
$ cat data/mydata.txt
-oh say can you see
-by the dawn's
-early light
-
-$ mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt
-say can
-the dawn's
-light
-
-
-
-
-

Tabular JSON

-

JSON is a format which supports arbitrarily deep nesting of “objects” (hashmaps) and “arrays” (lists), while Miller is a tool for handling tabular data only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out jq.)

-

But if you have tabular data represented in JSON then Miller can handle that for you.

-
-

Single-level JSON objects

-

An array of single-level objects is, quite simply, a table:

-
$ mlr --json head -n 2 then cut -f color,shape data/json-example-1.json
-{ "color": "yellow", "shape": "triangle" }
-{ "color": "red", "shape": "square" }
-
-$ mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json
-{
-  "color": "yellow",
-  "u": 0.6321695890307647,
-  "v": 0.9887207810889004
-}
-{
-  "color": "red",
-  "u": 0.21966833570651523,
-  "v": 0.001257332190235938
-}
-
-$ mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json
-shape    u_mean   u_stddev u_count
-triangle 0.583995 0.131184 3
-square   0.409355 0.365428 4
-circle   0.366013 0.209094 3
-
-
-
-
-

Nested JSON objects

-

Additionally, Miller can tabularize nested objects by concatentating keys:

-
$ mlr --json --jvstack head -n 2 data/json-example-2.json
-{
-  "flag": 1,
-  "i": 11,
-  "attributes": {
-    "color": "yellow",
-    "shape": "triangle"
-  },
-  "values": {
-    "u": 0.632170,
-    "v": 0.988721,
-    "w": 0.436498,
-    "x": 5.798188
-  }
-}
-{
-  "flag": 1,
-  "i": 15,
-  "attributes": {
-    "color": "red",
-    "shape": "square"
-  },
-  "values": {
-    "u": 0.219668,
-    "v": 0.001257,
-    "w": 0.792778,
-    "x": 2.944117
-  }
-}
-
-$ mlr --ijson --opprint head -n 4 data/json-example-2.json
-flag i  attributes:color attributes:shape values:u values:v values:w values:x
-1    11 yellow           triangle         0.632170 0.988721 0.436498 5.798188
-1    15 red              square           0.219668 0.001257 0.792778 2.944117
-1    16 red              circle           0.209017 0.290052 0.138103 5.065034
-0    48 red              square           0.956274 0.746720 0.775542 7.117831
-
-
-

Note in particular that as far as Miller’s put and filter, as well as other I/O formats, are concerned, these are simply field names with colons in them:

-
$ mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json
-{
-  "flag": 1,
-  "i": 11,
-  "attributes": {
-    "color": "yellow",
-    "shape": "triangle"
-  },
-  "values": {
-    "u": 0.632170,
-    "v": 0.988721,
-    "w": 0.436498,
-    "x": 5.798188,
-    "uv": 0.625040
-  }
-}
-
-
-
-
-

Arrays

-

Arrays aren’t supported in Miller’s put/filter DSL. By default, JSON arrays are read in as integer-keyed maps.

-

Suppose we have arrays like this in our input data:

-
$ cat data/json-example-3.json
-{
-  "label": "orange",
-  "values": [12.2, 13.8, 17.2]
-}
-{
-  "label": "purple",
-  "values": [27.0, 32.4]
-}
-
-
-

Then integer indices (starting from 0 and counting up) are used as map keys:

-
$ mlr --ijson --oxtab cat data/json-example-3.json
-label    orange
-values:0 12.2
-values:1 13.8
-values:2 17.2
-
-label    purple
-values:0 27.0
-values:1 32.4
-
-
-

When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output:

-
$ mlr --json --jvstack cat data/json-example-3.json
-{
-  "label": "orange",
-  "values": {
-    "0": 12.2,
-    "1": 13.8,
-    "2": 17.2
-  }
-}
-{
-  "label": "purple",
-  "values": {
-    "0": 27.0,
-    "1": 32.4
-  }
-}
-
-
-

This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all.

-

You might also use mlr --json-skip-arrays-on-input or mlr --json-fatal-arrays-on-input.

-

To truly handle JSON, please use a JSON-processing tool such as jq.

-
-
-

Formatting JSON options

-

JSON isn’t a parameterized format, so RS, FS, PS aren’t specifiable. Nonetheless, you can do the following:

-
    -
  • Use --jvstack to pretty-print JSON objects with multi-line (vertically stacked) spacing. By default, each Miller record (JSON object) is one per line.

  • -
  • Keystroke-savers: --jsonx simply means --json --jvstack, and --ojsonx simply means --ojson --jvstack.

  • -
  • Use --jlistwrap to print the sequence of JSON objects wrapped in an outermost [ and ]. By default, these aren’t printed.

  • -
  • Use --jquoteall to double-quote all object values. By default, integers, floating-point numbers, and booleans true and false are not double-quoted when they appear as JSON-object keys.

  • -
  • Use --jflatsep yourstringhere to specify the string used for key concatenation: this defaults to a single colon.

  • -
  • Use --jofmt to force Miller to apply the global --ofmt to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in %lf, %le, or %lg. Miller floats are double-precision so behavior using %f, %d, etc. is undefined. Second note: 0.123 is valid JSON; .123 is not. Thus this feature allows you to emit JSON which may be unparseable by other tools.

  • -
-

Again, please see jq for a truly powerful, JSON-specific tool.

-
-
-

JSON non-streaming

-

The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in tail -f contexts.

-
-
-
-

PPRINT: Pretty-printed tabular

-

Miller’s pretty-print format is like CSV, but column-aligned. For example, compare

-
$ mlr --ocsv cat data/small
-a,b,i,x,y
-pan,pan,1,0.3467901443380824,0.7268028627434533
-eks,pan,2,0.7586799647899636,0.5221511083334797
-wye,wye,3,0.20460330576630303,0.33831852551664776
-eks,wye,4,0.38139939387114097,0.13418874328430463
-wye,pan,5,0.5732889198020006,0.8636244699032729
-
-$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-

Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won’t work on tail -f contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory.

-

See Record-heterogeneity for how Miller handles changes of field names within a single data stream.

-

For output only (this isn’t supported in the input-scanner as of 5.0.0) you can use --barred with pprint output format:

-
$ mlr --opprint --barred cat data/small
-+-----+-----+---+---------------------+---------------------+
-| a   | b   | i | x                   | y                   |
-+-----+-----+---+---------------------+---------------------+
-| pan | pan | 1 | 0.3467901443380824  | 0.7268028627434533  |
-| eks | pan | 2 | 0.7586799647899636  | 0.5221511083334797  |
-| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 |
-| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 |
-| wye | pan | 5 | 0.5732889198020006  | 0.8636244699032729  |
-+-----+-----+---+---------------------+---------------------+
-
-
-
-
-

XTAB: Vertical tabular

-

This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also -ngrid for an entirely different, very powerful option). Namely:

-
$ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat
-1          2 3  4  5                          6               7
-nobody     * -2 -2 Unprivileged User          /var/empty      /usr/bin/false
-root       * 0  0  System Administrator       /var/root       /bin/sh
-daemon     * 1  1  System Services            /var/root       /usr/bin/false
-_uucp      * 4  4  Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico
-_taskgated * 13 13 Task Gate Daemon           /var/empty      /usr/bin/false
-_networkd  * 24 24 Network Services           /var/networkd   /usr/bin/false
-
-$ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat
-1 nobody
-2 *
-3 -2
-4 -2
-5 Unprivileged User
-6 /var/empty
-7 /usr/bin/false
-
-1 root
-2 *
-3 0
-4 0
-5 System Administrator
-6 /var/root
-7 /bin/sh
-
-$ grep -v '^#' /etc/passwd | head -n 2 | \
-  mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell
-[
-{
-  "name": "nobody",
-  "password": "*",
-  "uid": -2,
-  "gid": -2,
-  "gecos": "Unprivileged User",
-  "home_dir": "/var/empty",
-  "shell": "/usr/bin/false"
-}
-,{
-  "name": "root",
-  "password": "*",
-  "uid": 0,
-  "gid": 0,
-  "gecos": "System Administrator",
-  "home_dir": "/var/root",
-  "shell": "/bin/sh"
-}
-]
-
-
-
-
-

Markdown tabular

-

Markdown format looks like this:

-
$ mlr --omd cat data/small
-| a | b | i | x | y |
-| --- | --- | --- | --- | --- |
-| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 |
-| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 |
-| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 |
-| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 |
-| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 |
-
-
-

which renders like this when dropped into various web tools (e.g. github comments):

-_images/omd.png -

As of Miller 4.3.0, markdown format is supported only for output, not input.

-
-
-

Data-conversion keystroke-savers

-

While you can do format conversion using mlr --icsv --ojson cat myfile.csv, there are also keystroke-savers for this purpose, such as mlr --c2j cat myfile.csv. For a complete list:

-
$ mlr --usage-format-conversion-keystroke-saver-options
-As keystroke-savers for format-conversion you may use the following:
-        --c2t --c2d --c2n --c2j --c2x --c2p --c2m
-  --t2c       --t2d --t2n --t2j --t2x --t2p --t2m
-  --d2c --d2t       --d2n --d2j --d2x --d2p --d2m
-  --n2c --n2t --n2d       --n2j --n2x --n2p --n2m
-  --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
-  --x2c --x2t --x2d --x2n --x2j       --x2p --x2m
-  --p2c --p2t --p2d --p2n --p2j --p2x       --p2m
-The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
-PPRINT, and markdown, respectively. Note that markdown format is available for
-output only.
-
-
-
-
-

Autodetect of line endings

-

Default line endings (--irs and --ors) are 'auto' which means autodetect from the input file format, as long as the input file(s) have lines ending in either LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).

-

If both IRS and ORS are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you’re running on.

-

The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF.

-

If you use --ors {something else} with (default or explicitly specified) --irs auto then line endings are autodetected on input and set to what you specify on output.

-

If you use --irs {something else} with (default or explicitly specified) --ors auto then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.

-

See also Record/field/pair separators for more information about record/field/pair separators.

-
-
-

Comments in data

-

You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered:

-
$ mlr --usage-comments-in-data
-  --skip-comments                 Ignore commented lines (prefixed by "#")
-                                  within the input.
-  --skip-comments-with {string}   Ignore commented lines within input, with
-                                  specified prefix.
-  --pass-comments                 Immediately print commented lines (prefixed by "#")
-                                  within the input.
-  --pass-comments-with {string}   Immediately print commented lines within input, with
-                                  specified prefix.
-Notes:
-* Comments are only honored at the start of a line.
-* In the absence of any of the above four options, comments are data like
-  any other text.
-* When pass-comments is used, comment lines are written to standard output
-  immediately upon being read; they are not part of the record stream.
-  Results may be counterintuitive. A suggestion is to place comments at the
-  start of data files.
-
-
-

Examples:

-
$ cat data/budget.csv
-# Asana -- here are the budget figures you asked for!
-type,quantity
-purple,456.78
-green,678.12
-orange,123.45
-
-$ mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv
-type   quantity
-green  678.12
-purple 456.78
-orange 123.45
-
-$ mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv
-# Asana -- here are the budget figures you asked for!
-type   quantity
-green  678.12
-purple 456.78
-orange 123.45
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/genindex.html b/docs6/_build/html/genindex.html deleted file mode 100644 index cfae987b3..000000000 --- a/docs6/_build/html/genindex.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - Index — Miller 5.10.2 documentation - - - - - - - - - - - - - - -
-
-
-
- - -

Index

- -
- -
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/index.html b/docs6/_build/html/index.html deleted file mode 100644 index 73c2a3e49..000000000 --- a/docs6/_build/html/index.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - Miller Docs v2 — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs6/_build/html/install.html b/docs6/_build/html/install.html deleted file mode 100644 index 19a2add93..000000000 --- a/docs6/_build/html/install.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - Installation — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Installation

-
-

Prebuilt executables via package managers

-

Homebrew installation support for OSX is available via

-
brew update && brew install miller
-
-
-

…and also via MacPorts:

-
sudo port selfupdate && sudo port install miller
-
-
-

You may already have the mlr executable available in your platform’s package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following:

-
sudo apt-get install miller
-
-
-
sudo apt install miller
-
-
-
sudo yum install miller
-
-
-

On Windows, Miller is available via Chocolatey:

-
choco install miller
-
-
-
-
-

Prebuilt executables via GitHub per release

-

Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts).

-

Miller is autobuilt for Linux using Travis on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of SikhNerd on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for Windows using the Appveyor continuous-build system: https://ci.appveyor.com/project/johnkerl/miller.

-

Miller releases from 5.1.0 onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select Latest Build and then Artifacts to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release.

-
-
-

Building from source

-

Please see Building from source.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/internationalization.html b/docs6/_build/html/internationalization.html deleted file mode 100644 index 89014119a..000000000 --- a/docs6/_build/html/internationalization.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - Internationalization — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Internationalization

-

Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.)

-

By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes:

- -

Meanwhile, regular expressions and the DSL functions sub and gsub function correctly, albeit without explicit intentional support.

-

Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter).

-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/log-processing-examples.html b/docs6/_build/html/log-processing-examples.html deleted file mode 100644 index bf2f111ae..000000000 --- a/docs6/_build/html/log-processing-examples.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - - - Log-processing examples — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Log-processing examples

-

Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here’s where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can grep or what have you. Also it means not every line needs to have the same list of field names (“schema”).

-

Again, all the examples in the CSV section apply here – just change the input-format flags. But there’s more you can do when not all the records have the same shape.

-

Writing a program – in any language whatsoever – you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it.

-

Suppose your program has printed something like this:

-
$ cat log.txt
-op=enter,time=1472819681
-op=cache,type=A9,hit=0
-op=cache,type=A4,hit=1
-time=1472819690,batch_size=100,num_filtered=237
-op=cache,type=A1,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A1,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A1,hit=1
-time=1472819705,batch_size=100,num_filtered=348
-op=cache,type=A4,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A4,hit=1
-time=1472819713,batch_size=100,num_filtered=493
-op=cache,type=A9,hit=1
-op=cache,type=A1,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=1
-time=1472819720,batch_size=100,num_filtered=554
-op=cache,type=A1,hit=0
-op=cache,type=A4,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A4,hit=0
-op=cache,type=A4,hit=0
-op=cache,type=A9,hit=0
-time=1472819736,batch_size=100,num_filtered=612
-op=cache,type=A1,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-op=cache,type=A4,hit=1
-op=cache,type=A1,hit=1
-op=cache,type=A9,hit=0
-op=cache,type=A9,hit=0
-time=1472819742,batch_size=100,num_filtered=728
-
-
-

Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system grep command, or Miller’s having-fields, or is_present, we can pick out the parts we want and analyze them:

-
$ grep op=cache log.txt \
-  | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type
-type hit_mean
-A1   0.857143
-A4   0.714286
-A9   0.090909
-
-
-
$ mlr --from log.txt --opprint \
-  filter 'is_present($batch_size)' \
-  then step -a delta -f time,num_filtered \
-  then sec2gmt time
-time                 batch_size num_filtered time_delta num_filtered_delta
-2016-09-02T12:34:50Z 100        237          0          0
-2016-09-02T12:35:05Z 100        348          15         111
-2016-09-02T12:35:13Z 100        493          8          145
-2016-09-02T12:35:20Z 100        554          7          61
-2016-09-02T12:35:36Z 100        612          16         58
-2016-09-02T12:35:42Z 100        728          6          116
-
-
-

Alternatively, we can simply group the similar data for a better look:

-
$ mlr --opprint group-like log.txt
-op    time
-enter 1472819681
-
-op    type hit
-cache A9   0
-cache A4   1
-cache A1   1
-cache A9   0
-cache A1   1
-cache A9   0
-cache A9   0
-cache A1   1
-cache A4   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   1
-cache A9   1
-cache A1   1
-cache A9   0
-cache A9   0
-cache A9   1
-cache A1   0
-cache A4   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   0
-cache A4   0
-cache A9   0
-cache A1   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   1
-cache A1   1
-cache A9   0
-cache A9   0
-
-time       batch_size num_filtered
-1472819690 100        237
-1472819705 100        348
-1472819713 100        493
-1472819720 100        554
-1472819736 100        612
-1472819742 100        728
-
-
-
$ mlr --opprint group-like then sec2gmt time log.txt
-op    time
-enter 2016-09-02T12:34:41Z
-
-op    type hit
-cache A9   0
-cache A4   1
-cache A1   1
-cache A9   0
-cache A1   1
-cache A9   0
-cache A9   0
-cache A1   1
-cache A4   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   1
-cache A9   1
-cache A1   1
-cache A9   0
-cache A9   0
-cache A9   1
-cache A1   0
-cache A4   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   0
-cache A4   0
-cache A9   0
-cache A1   1
-cache A9   0
-cache A9   0
-cache A9   0
-cache A9   0
-cache A4   1
-cache A1   1
-cache A9   0
-cache A9   0
-
-time                 batch_size num_filtered
-2016-09-02T12:34:50Z 100        237
-2016-09-02T12:35:05Z 100        348
-2016-09-02T12:35:13Z 100        493
-2016-09-02T12:35:20Z 100        554
-2016-09-02T12:35:36Z 100        612
-2016-09-02T12:35:42Z 100        728
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/manpage.html b/docs6/_build/html/manpage.html deleted file mode 100644 index 3636a45ed..000000000 --- a/docs6/_build/html/manpage.html +++ /dev/null @@ -1,2478 +0,0 @@ - - - - - - - - Manpage — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Manpage

-

This is simply a copy of what you should see on running man mlr at a command prompt, once Miller is installed on your system.

-
MILLER(1)                                                        MILLER(1)
-
-
-
-NAME
-       miller - like awk, sed, cut, join, and sort for name-indexed data such
-       as CSV and tabular JSON.
-
-SYNOPSIS
-       Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or
-       more file names}
-
-
-DESCRIPTION
-       Miller operates on key-value-pair data while the familiar Unix tools
-       operate on integer-indexed fields: if the natural data structure for
-       the latter is the array, then Miller's natural data structure is the
-       insertion-ordered hash map.  This encompasses a variety of data
-       formats, including but not limited to the familiar CSV, TSV, and JSON.
-       (Miller can handle positionally-indexed data as a special case.) This
-       manpage documents Miller v5.10.1.
-
-EXAMPLES
-   COMMAND-LINE SYNTAX
-       mlr --csv cut -f hostname,uptime mydata.csv
-       mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv
-       mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
-       grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
-       mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
-       mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
-       mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
-       mlr stats2 -a linreg-pca -f u,v -g shape data/*
-       mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
-       mlr --from estimates.tbl put '
-     for (k,v in $*) {
-       if (is_numeric(v) && k =~ "^[t-z].*$") {
-         $sum += v; $count += 1
-       }
-     }
-     $mean = $sum / $count # no assignment if count unset'
-       mlr --from infile.dat put -f analyze.mlr
-       mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
-       mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
-       mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
-       mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-   DATA FORMATS
-     DKVP: delimited key-value pairs (Miller default format)
-     +---------------------+
-     | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-     | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
-     +---------------------+
-
-     NIDX: implicitly numerically indexed (Unix-toolkit style)
-     +---------------------+
-     | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
-     | fox jumped          | Record 2: "1" => "fox", "2" => "jumped"
-     +---------------------+
-
-     CSV/CSV-lite: comma-separated values with separate header line
-     +---------------------+
-     | apple,bat,cog       |
-     | 1,2,3               | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-     | 4,5,6               | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-     +---------------------+
-
-     Tabular JSON: nested objects are supported, although arrays within them are not:
-     +---------------------+
-     | {                   |
-     |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-     |  "bat": 2,          |
-     |  "cog": 3           |
-     | }                   |
-     | {                   |
-     |   "dish": {         | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
-     |     "egg": 7,       |
-     |     "flint": 8      |
-     |   },                |
-     |   "garlic": ""      |
-     | }                   |
-     +---------------------+
-
-     PPRINT: pretty-printed tabular
-     +---------------------+
-     | apple bat cog       |
-     | 1     2   3         | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-     | 4     5   6         | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-     +---------------------+
-
-     XTAB: pretty-printed transposed tabular
-     +---------------------+
-     | apple 1             | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-     | bat   2             |
-     | cog   3             |
-     |                     |
-     | dish 7              | Record 2: "dish" => "7", "egg" => "8"
-     | egg  8              |
-     +---------------------+
-
-     Markdown tabular (supported for output only):
-     +-----------------------+
-     | | apple | bat | cog | |
-     | | ---   | --- | --- | |
-     | | 1     | 2   | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-     | | 4     | 5   | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-     +-----------------------+
-
-OPTIONS
-       In the following option flags, the version with "i" designates the
-       input stream, "o" the output stream, and the version without prefix
-       sets the option for both input and output stream. For example: --irs
-       sets the input record separator, --ors the output record separator, and
-       --rs sets both the input and output separator to the given value.
-
-   HELP OPTIONS
-     -h or --help                 Show this message.
-     --version                    Show the software version.
-     {verb name} --help           Show verb-specific help.
-     --help-all-verbs             Show help on all verbs.
-     -l or --list-all-verbs       List only verb names.
-     -L                           List only verb names, one per line.
-     -f or --help-all-functions   Show help on all built-in functions.
-     -F                           Show a bare listing of built-in functions by name.
-     -k or --help-all-keywords    Show help on all keywords.
-     -K                           Show a bare listing of keywords by name.
-
-   VERB LIST
-    altkv bar bootstrap cat check clean-whitespace count count-distinct
-    count-similar cut decimate fill-down filter format-values fraction grep
-    group-by group-like having-fields head histogram join label least-frequent
-    merge-fields most-frequent nest nothing put regularize remove-empty-columns
-    rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle
-    skip-trivial-records sort sort-within-records stats1 stats2 step tac tail tee
-    top uniq unsparsify
-
-   FUNCTION LIST
-    + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~
-    > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub
-    substr tolower toupper truncate capitalize lstrip rstrip strip
-    collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan
-    atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10
-    log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh
-    sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms
-    fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt
-    sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime
-    strftime_local strptime strptime_local systime is_absent is_bool is_boolean
-    is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty
-    is_not_map is_not_null is_null is_numeric is_present is_string
-    asserting_absent asserting_bool asserting_boolean asserting_empty
-    asserting_empty_map asserting_float asserting_int asserting_map
-    asserting_nonempty_map asserting_not_empty asserting_not_map
-    asserting_not_null asserting_null asserting_numeric asserting_present
-    asserting_string boolean float fmtnum hexfmt int string typeof depth haskey
-    joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv
-    splitkvx splitnv splitnvx
-
-       Please use "mlr --help-function {function name}" for function-specific help.
-
-   I/O FORMATTING
-     --idkvp   --odkvp   --dkvp      Delimited key-value pairs, e.g "a=1,b=2"
-                                     (this is Miller's default format).
-
-     --inidx   --onidx   --nidx      Implicitly-integer-indexed fields
-                                     (Unix-toolkit style).
-     -T                              Synonymous with "--nidx --fs tab".
-
-     --icsv    --ocsv    --csv       Comma-separated value (or tab-separated
-                                     with --fs tab, etc.)
-
-     --itsv    --otsv    --tsv       Keystroke-savers for "--icsv --ifs tab",
-                                     "--ocsv --ofs tab", "--csv --fs tab".
-     --iasv    --oasv    --asv       Similar but using ASCII FS 0x1f and RS 0x1e
-     --iusv    --ousv    --usv       Similar but using Unicode FS U+241F (UTF-8 0xe2909f)
-                                     and RS U+241E (UTF-8 0xe2909e)
-
-     --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated
-                                     with --fs tab, etc.). The 'lite' CSV does not handle
-                                     RFC-CSV double-quoting rules; is slightly faster;
-                                     and handles heterogeneity in the input stream via
-                                     empty newline followed by new header line. See also
-                                     http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.
-
-     --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab",
-                                     "--ocsvlite --ofs tab", "--csvlite --fs tab".
-     -t                              Synonymous with --tsvlite.
-     --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e
-     --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f)
-                                     and RS U+241E (UTF-8 0xe2909e)
-
-     --ipprint --opprint --pprint    Pretty-printed tabular (produces no
-                                     output until all input is in).
-                         --right     Right-justifies all fields for PPRINT output.
-                         --barred    Prints a border around PPRINT output
-                                     (only available for output).
-
-               --omd                 Markdown-tabular (only available for output).
-
-     --ixtab   --oxtab   --xtab      Pretty-printed vertical-tabular.
-                         --xvright   Right-justifies values for XTAB format.
-
-     --ijson   --ojson   --json      JSON tabular: sequence or list of one-level
-                                     maps: {...}{...} or [{...},{...}].
-       --json-map-arrays-on-input    JSON arrays are unmillerable. --json-map-arrays-on-input
-       --json-skip-arrays-on-input   is the default: arrays are converted to integer-indexed
-       --json-fatal-arrays-on-input  maps. The other two options cause them to be skipped, or
-                                     to be treated as errors.  Please use the jq tool for full
-                                     JSON (pre)processing.
-                         --jvstack   Put one key-value pair per line for JSON
-                                     output.
-                   --jsonx --ojsonx  Keystroke-savers for --json --jvstack
-                   --jsonx --ojsonx  and --ojson --jvstack, respectively.
-                         --jlistwrap Wrap JSON output in outermost [ ].
-                       --jknquoteint Do not quote non-string map keys in JSON output.
-                        --jvquoteall Quote map values in JSON output, even if they're
-                                     numeric.
-                 --jflatsep {string} Separator for flattening multi-level JSON keys,
-                                     e.g. '{"a":{"b":3}}' becomes a:b => 3 for
-                                     non-JSON formats. Defaults to :.
-
-     -p is a keystroke-saver for --nidx --fs space --repifs
-
-     Examples: --csv for CSV-formatted input and output; --idkvp --opprint for
-     DKVP-formatted input and pretty-printed output.
-
-     Please use --iformat1 --oformat2 rather than --format1 --oformat2.
-     The latter sets up input and output flags for format1, not all of which
-     are overridden in all cases by setting output format to format2.
-
-   COMMENTS IN DATA
-     --skip-comments                 Ignore commented lines (prefixed by "#")
-                                     within the input.
-     --skip-comments-with {string}   Ignore commented lines within input, with
-                                     specified prefix.
-     --pass-comments                 Immediately print commented lines (prefixed by "#")
-                                     within the input.
-     --pass-comments-with {string}   Immediately print commented lines within input, with
-                                     specified prefix.
-       Notes:
-       * Comments are only honored at the start of a line.
-       * In the absence of any of the above four options, comments are data like
-     any other text.
-       * When pass-comments is used, comment lines are written to standard output
-     immediately upon being read; they are not part of the record stream.
-     Results may be counterintuitive. A suggestion is to place comments at the
-     start of data files.
-
-   FORMAT-CONVERSION KEYSTROKE-SAVERS
-       As keystroke-savers for format-conversion you may use the following:
-           --c2t --c2d --c2n --c2j --c2x --c2p --c2m
-     --t2c       --t2d --t2n --t2j --t2x --t2p --t2m
-     --d2c --d2t       --d2n --d2j --d2x --d2p --d2m
-     --n2c --n2t --n2d       --n2j --n2x --n2p --n2m
-     --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
-     --x2c --x2t --x2d --x2n --x2j       --x2p --x2m
-     --p2c --p2t --p2d --p2n --p2j --p2x       --p2m
-       The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
-       PPRINT, and markdown, respectively. Note that markdown format is available for
-       output only.
-
-   COMPRESSED I/O
-     --prepipe {command} This allows Miller to handle compressed inputs. You can do
-     without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...".
-
-     However, when multiple input files are present, between-file separations are
-     lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can
-     specify an action to be taken on each input file. This pre-pipe command must
-     be able to read from standard input; it will be invoked with
-       {command} < {filename}.
-     Examples:
-       mlr --prepipe 'gunzip'
-       mlr --prepipe 'zcat -cf'
-       mlr --prepipe 'xz -cd'
-       mlr --prepipe cat
-       mlr --prepipe-gunzip
-       mlr --prepipe-zcat
-     Note that this feature is quite general and is not limited to decompression
-     utilities. You can use it to apply per-file filters of your choice.
-     For output compression (or other) utilities, simply pipe the output:
-       mlr ... | {your compression command}
-
-     There are shorthands --prepipe-zcat and --prepipe-gunzip which are
-     valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc
-     files since that would put execution of the prepipe command under
-     control of the .mlrrc file.
-
-   SEPARATORS
-     --rs     --irs     --ors              Record separators, e.g. 'lf' or '\r\n'
-     --fs     --ifs     --ofs  --repifs    Field separators, e.g. comma
-     --ps     --ips     --ops              Pair separators, e.g. equals sign
-
-     Notes about line endings:
-     * Default line endings (--irs and --ors) are "auto" which means autodetect from
-       the input file format, as long as the input file(s) have lines ending in either
-       LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as
-       carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).
-     * If both irs and ors are auto (which is the default) then LF input will lead to LF
-       output and CRLF input will lead to CRLF output, regardless of the platform you're
-       running on.
-     * The line-ending autodetector triggers on the first line ending detected in the input
-       stream. E.g. if you specify a CRLF-terminated file on the command line followed by an
-       LF-terminated file then autodetected line endings will be CRLF.
-     * If you use --ors {something else} with (default or explicitly specified) --irs auto
-       then line endings are autodetected on input and set to what you specify on output.
-     * If you use --irs {something else} with (default or explicitly specified) --ors auto
-       then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.
-
-     Notes about all other separators:
-     * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats
-       do key-value pairs appear juxtaposed.
-     * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;
-       XTAB records are separated by two or more consecutive IFS/OFS -- i.e.
-       a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs
-       auto for XTAB format. (XTAB's default IFS/OFS are "auto".)
-     * OFS must be single-character for PPRINT format. This is because it is used
-       with repetition for alignment; multi-character separators would make
-       alignment impossible.
-     * OPS may be multi-character for XTAB format, in which case alignment is
-       disabled.
-     * TSV is simply CSV using tab as field separator ("--fs tab").
-     * FS/PS are ignored for markdown format; RS is used.
-     * All FS and PS options are ignored for JSON format, since they are not relevant
-       to the JSON format.
-     * You can specify separators in any of the following ways, shown by example:
-       - Type them out, quoting as necessary for shell escapes, e.g.
-         "--fs '|' --ips :"
-       - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'".
-       - To avoid backslashing, you can use any of the following names:
-         cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals
-     * Default separators by format:
-         File format  RS       FS       PS
-         gen          N/A      (N/A)    (N/A)
-         dkvp         auto     ,        =
-         json         auto     (N/A)    (N/A)
-         nidx         auto     space    (N/A)
-         csv          auto     ,        (N/A)
-         csvlite      auto     ,        (N/A)
-         markdown     auto     (N/A)    (N/A)
-         pprint       auto     space    (N/A)
-         xtab         (N/A)    auto     space
-
-   CSV-SPECIFIC OPTIONS
-     --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1
-                        of input files. Tip: combine with "label" to recreate
-                        missing headers.
-     --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,
-                        fill remaining keys with empty string. If a data line has more
-                        fields than the header line, use integer field labels as in
-                        the implicit-header case.
-     --headerless-csv-output   Print only CSV data lines.
-     -N                 Keystroke-saver for --implicit-csv-header --headerless-csv-output.
-
-   DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT
-     --quote-all        Wrap all fields in double quotes
-     --quote-none       Do not wrap any fields in double quotes, even if they have
-                        OFS or ORS in them
-     --quote-minimal    Wrap fields in double quotes only if they have OFS or ORS
-                        in them (default)
-     --quote-numeric    Wrap fields in double quotes only if they have numbers
-                        in them
-     --quote-original   Wrap fields in double quotes if and only if they were
-                        quoted on input. This isn't sticky for computed fields:
-                        e.g. if fields a and b were quoted on input and you do
-                        "put '$c = $a . $b'" then field c won't inherit a or b's
-                        was-quoted-on-input flag.
-
-   NUMERICAL FORMATTING
-     --ofmt {format}    E.g. %.18lf, %.0lf. Please use sprintf-style codes for
-                        double-precision. Applies to verbs which compute new
-                        values, e.g. put, stats1, stats2. See also the fmtnum
-                        function within mlr put (mlr --help-all-functions).
-                        Defaults to %lf.
-
-   OTHER OPTIONS
-     --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
-                        urand()/urandint()/urand32().
-     --nr-progress-mod {m}, with m a positive integer: print filename and record
-                        count to stderr every m input records.
-     --from {filename}  Use this to specify an input file before the verb(s),
-                        rather than after. May be used more than once. Example:
-                        "mlr --from a.dat --from b.dat cat" is the same as
-                        "mlr cat a.dat b.dat".
-     -n                 Process no input files, nor standard input either. Useful
-                        for mlr put with begin/end statements only. (Same as --from
-                        /dev/null.) Also useful in "mlr -n put -v '...'" for
-                        analyzing abstract syntax trees (if that's your thing).
-     -I                 Process files in-place. For each file name on the command
-                        line, output is written to a temp file in the same
-                        directory, which is then renamed over the original. Each
-                        file is processed in isolation: if the output format is
-                        CSV, CSV headers will be present in each output file;
-                        statistics are only over each file's own records; and so on.
-
-   THEN-CHAINING
-       Output of one verb may be chained as input to another using "then", e.g.
-     mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color
-
-   AUXILIARY COMMANDS
-       Miller has a few otherwise-standalone executables packaged within it.
-       They do not participate in any other parts of Miller.
-       Available subcommands:
-     aux-list
-     lecat
-     termcvt
-     hex
-     unhex
-     netbsd-strptime
-       For more information, please invoke mlr {subcommand} --help
-
-MLRRC
-       You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc.
-       For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file
-       and that will be the default input/output format unless otherwise specified on the command line.
-
-       The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional.
-       Hash-style comments and blank lines are ignored.
-
-       Sample .mlrrc:
-       # Input and output formats are CSV by default (unless otherwise specified
-       # on the mlr command line):
-       csv
-       # These are no-ops for CSV, but when I do use JSON output, I want these
-       # pretty-printing options to be used:
-       jvstack
-       jlistwrap
-
-       How to specify location of .mlrrc:
-       * If $MLRRC is set:
-     o If its value is "__none__" then no .mlrrc files are processed.
-     o Otherwise, its value (as a filename) is loaded and processed. If there are syntax
-       errors, they abort mlr with a usage message (as if you had mistyped something on the
-       command line). If the file can't be loaded at all, though, it is silently skipped.
-     o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is
-       set in the environment.
-       * Otherwise:
-     o If $HOME/.mlrrc exists, it's then processed as above.
-     o If ./.mlrrc exists, it's then also processed as above.
-     (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.)
-
-       See also:
-       https://johnkerl.org/miller/doc/customization.html
-
-VERBS
-   altkv
-       Usage: mlr altkv [no options]
-       Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.
-
-   bar
-       Usage: mlr bar [options]
-       Replaces a numeric field with a number of asterisks, allowing for cheesy
-       bar plots. These align best with --opprint or --oxtab output format.
-       Options:
-       -f   {a,b,c}  Field names to convert to bars.
-       -c   {character}  Fill character: default '*'.
-       -x   {character}  Out-of-bounds character: default '#'.
-       -b   {character}  Blank character: default '.'.
-       --lo {lo}     Lower-limit value for min-width bar: default '0.000000'.
-       --hi {hi}     Upper-limit value for max-width bar: default '100.000000'.
-       -w   {n}      Bar-field width: default '40'.
-       --auto                Automatically computes limits, ignoring --lo and --hi.
-                     Holds all records in memory before producing any output.
-
-   bootstrap
-       Usage: mlr bootstrap [options]
-       Emits an n-sample, with replacement, of the input records.
-       Options:
-       -n {number} Number of samples to output. Defaults to number of input records.
-               Must be non-negative.
-       See also mlr sample and mlr shuffle.
-
-   cat
-       Usage: mlr cat [options]
-       Passes input records directly to output. Most useful for format conversion.
-       Options:
-       -n    Prepend field "n" to each record with record-counter starting at 1
-       -g {comma-separated field name(s)} When used with -n/-N, writes record-counters
-             keyed by specified field name(s).
-       -v    Write a low-level record-structure dump to stderr.
-       -N {name} Prepend field {name} to each record with record-counter starting at 1
-
-   check
-       Usage: mlr check
-       Consumes records without printing any output.
-       Useful for doing a well-formatted check on input data.
-
-   clean-whitespace
-       Usage: mlr clean-whitespace [options]
-       For each record, for each field in the record, whitespace-cleans the keys and
-       values. Whitespace-cleaning entails stripping leading and trailing whitespace,
-       and replacing multiple whitespace with singles. For finer-grained control,
-       please see the DSL functions lstrip, rstrip, strip, collapse_whitespace,
-       and clean_whitespace.
-
-       Options:
-       -k|--keys-only        Do not touch values.
-       -v|--values-only  Do not touch keys.
-       It is an error to specify -k as well as -v -- to clean keys and values,
-       leave off -k as well as -v.
-
-   count
-       Usage: mlr count [options]
-       Prints number of records, optionally grouped by distinct values for specified field names.
-
-       Options:
-       -g {a,b,c}    Field names for distinct count.
-       -n        Show only the number of distinct values. Not interesting without -g.
-       -o {name}     Field name for output count. Default "count".
-
-   count-distinct
-       Usage: mlr count-distinct [options]
-       Prints number of records having distinct values for specified field names.
-       Same as uniq -c.
-
-       Options:
-       -f {a,b,c}    Field names for distinct count.
-       -n        Show only the number of distinct values. Not compatible with -u.
-       -o {name}     Field name for output count. Default "count".
-                 Ignored with -u.
-       -u        Do unlashed counts for multiple field names. With -f a,b and
-                 without -u, computes counts for distinct combinations of a
-                 and b field values. With -f a,b and with -u, computes counts
-                 for distinct a field values and counts for distinct b field
-                 values separately.
-
-   count-similar
-       Usage: mlr count-similar [options]
-       Ingests all records, then emits each record augmented by a count of
-       the number of other records having the same group-by field values.
-       Options:
-       -g {d,e,f} Group-by-field names for counts.
-       -o {name}  Field name for output count. Default "count".
-
-   cut
-       Usage: mlr cut [options]
-       Passes through input records with specified fields included/excluded.
-       -f {a,b,c}   Field names to include for cut.
-       -o           Retain fields in the order specified here in the argument list.
-                    Default is to retain them in the order found in the input data.
-       -x|--complement      Exclude, rather than include, field names specified by -f.
-       -r           Treat field names as regular expressions. "ab", "a.*b" will
-                    match any field name containing the substring "ab" or matching
-                    "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may
-                    be used. The -o flag is ignored when -r is present.
-       Examples:
-     mlr cut -f hostname,status
-     mlr cut -x -f hostname,status
-     mlr cut -r -f '^status$,sda[0-9]'
-     mlr cut -r -f '^status$,"sda[0-9]"'
-     mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive)
-
-   decimate
-       Usage: mlr decimate [options]
-       -n {count}    Decimation factor; default 10
-       -b        Decimate by printing first of every n.
-       -e        Decimate by printing last of every n (default).
-       -g {a,b,c}    Optional group-by-field names for decimate counts
-       Passes through one of every n records, optionally by category.
-
-   fill-down
-       Usage: mlr fill-down [options]
-       -f {a,b,c}      Field names for fill-down
-       -a|--only-if-absent Field names for fill-down
-       If a given record has a missing value for a given field, fill that from
-       the corresponding value from a previous record, if any.
-       By default, a 'missing' field either is absent, or has the empty-string value.
-       With -a, a field is 'missing' only if it is absent.
-
-   filter
-       Usage: mlr filter [options] {expression}
-       Prints records for which {expression} evaluates to true.
-       If there are multiple semicolon-delimited expressions, all of them are
-       evaluated and the last one is used as the filter criterion.
-
-       Conversion options:
-       -S: Keeps field values as strings with no type inference to int or float.
-       -F: Keeps field values as strings or floats with no inference to int.
-       All field values are type-inferred to int/float/string unless this behavior is
-       suppressed with -S or -F.
-
-       Output/formatting options:
-       --oflatsep {string}: Separator to use when flattening multi-level @-variables
-       to output records for emit. Default ":".
-       --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
-       --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
-       Any of the output-format command-line flags (see mlr -h). Example: using
-     mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
-       the input is CSV, the output is pretty-print tabular, but the tee-file output
-       is written in JSON format.
-       --no-fflush: for emit, tee, print, and dump, don't call fflush() after every
-       record.
-
-       Expression-specification options:
-       -f {filename}: the DSL expression is taken from the specified file rather
-       than from the command line. Outer single quotes wrapping the expression
-       should not be placed in the file. If -f is specified more than once,
-       all input files specified using -f are concatenated to produce the expression.
-       (For example, you can define functions in one file and call them from another.)
-       -e {expression}: You can use this after -f to add an expression. Example use
-       case: define functions/subroutines in a file you specify with -f, then call
-       them with an expression you specify with -e.
-       (If you mix -e and -f then the expressions are evaluated in the order encountered.
-       Since the expression pieces are simply concatenated, please be sure to use intervening
-       semicolons to separate expressions.)
-
-       -s name=value: Predefines out-of-stream variable @name to have value "value".
-       Thus mlr filter put -s foo=97 '$column += @foo' is like
-       mlr filter put 'begin {@foo = 97} $column += @foo'.
-       The value part is subject to type-inferencing as specified by -S/-F.
-       May be specified more than once, e.g. -s name1=value1 -s name2=value2.
-       Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE
-
-       Tracing options:
-       -v: Prints the expressions's AST (abstract syntax tree), which gives
-       full transparency on the precedence and associativity rules of
-       Miller's grammar, to stdout.
-       -a: Prints a low-level stack-allocation trace to stdout.
-       -t: Prints a low-level parser trace to stderr.
-       -T: Prints a every statement to stderr as it is executed.
-
-       Other options:
-       -x: Prints records for which {expression} evaluates to false.
-
-       Please use a dollar sign for field names and double-quotes for string
-       literals. If field names have special characters such as "." then you might
-       use braces, e.g. '${field.name}'. Miller built-in variables are
-       NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
-       variables. The environment-variable name may be an expression, e.g. a field
-       value.
-
-       Use # to comment to end of line.
-
-       Examples:
-     mlr filter 'log10($count) > 4.0'
-     mlr filter 'FNR == 2'         (second record in each file)
-     mlr filter 'urand() < 0.001'  (subsampling)
-     mlr filter '$color != "blue" && $value > 4.2'
-     mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'
-     mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)'
-     mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd'
-     mlr filter '
-       NR == 1 ||
-      #NR == 2 ||
-       NR == 3
-     '
-
-       Please see https://miller.readthedocs.io/en/latest/reference.html for more information
-       including function list. Or "mlr -f". Please also see "mlr grep" which is
-       useful when you don't yet know which field name(s) you're looking for.
-       Please see in particular:
-     http://www.johnkerl.org/miller/doc/reference-verbs.html#filter
-
-   format-values
-       Usage: mlr format-values [options]
-       Applies format strings to all field values, depending on autodetected type.
-       * If a field value is detected to be integer, applies integer format.
-       * Else, if a field value is detected to be float, applies float format.
-       * Else, applies string format.
-
-       Note: this is a low-keystroke way to apply formatting to many fields. To get
-       finer control, please see the fmtnum function within the mlr put DSL.
-
-       Note: this verb lets you apply arbitrary format strings, which can produce
-       undefined behavior and/or program crashes.  See your system's "man printf".
-
-       Options:
-       -i {integer format} Defaults to "%lld".
-                       Examples: "%06lld", "%08llx".
-                       Note that Miller integers are long long so you must use
-                       formats which apply to long long, e.g. with ll in them.
-                       Undefined behavior results otherwise.
-       -f {float format}   Defaults to "%lf".
-                       Examples: "%8.3lf", "%.6le".
-                       Note that Miller floats are double-precision so you must
-                       use formats which apply to double, e.g. with l[efg] in them.
-                       Undefined behavior results otherwise.
-       -s {string format}  Defaults to "%s".
-                       Examples: "_%s", "%08s".
-                       Note that you must use formats which apply to string, e.g.
-                       with s in them. Undefined behavior results otherwise.
-       -n              Coerce field values autodetected as int to float, and then
-                       apply the float format.
-
-   fraction
-       Usage: mlr fraction [options]
-       For each record's value in specified fields, computes the ratio of that
-       value to the sum of values in that field over all input records.
-       E.g. with input records      x=1  x=2  x=3  and  x=4, emits output records
-       x=1,x_fraction=0.1  x=2,x_fraction=0.2  x=3,x_fraction=0.3  and      x=4,x_fraction=0.4
-
-       Note: this is internally a two-pass algorithm: on the first pass it retains
-       input records and accumulates sums; on the second pass it computes quotients
-       and emits output records. This means it produces no output until all input is read.
-
-       Options:
-       -f {a,b,c}    Field name(s) for fraction calculation
-       -g {d,e,f}    Optional group-by-field name(s) for fraction counts
-       -p        Produce percents [0..100], not fractions [0..1]. Output field names
-                 end with "_percent" rather than "_fraction"
-       -c        Produce cumulative distributions, i.e. running sums: each output
-                 value folds in the sum of the previous for the specified group
-                 E.g. with input records  x=1  x=2  x=3  and  x=4, emits output records
-                 x=1,x_cumulative_fraction=0.1  x=2,x_cumulative_fraction=0.3
-                 x=3,x_cumulative_fraction=0.6  and  x=4,x_cumulative_fraction=1.0
-
-   grep
-       Usage: mlr grep [options] {regular expression}
-       Passes through records which match {regex}.
-       Options:
-       -i    Use case-insensitive search.
-       -v    Invert: pass through records which do not match the regex.
-       Note that "mlr filter" is more powerful, but requires you to know field names.
-       By contrast, "mlr grep" allows you to regex-match the entire record. It does
-       this by formatting each record in memory as DKVP, using command-line-specified
-       ORS/OFS/OPS, and matching the resulting line against the regex specified
-       here. In particular, the regex is not applied to the input stream: if you
-       have CSV with header line "x,y,z" and data line "1,2,3" then the regex will
-       be matched, not against either of these lines, but against the DKVP line
-       "x=1,y=2,z=3".  Furthermore, not all the options to system grep are supported,
-       and this command is intended to be merely a keystroke-saver. To get all the
-       features of system grep, you can do
-     "mlr --odkvp ... | grep ... | mlr --idkvp ..."
-
-   group-by
-       Usage: mlr group-by {comma-separated field names}
-       Outputs records in batches having identical values at specified field names.
-
-   group-like
-       Usage: mlr group-like
-       Outputs records in batches having identical field names.
-
-   having-fields
-       Usage: mlr having-fields [options]
-       Conditionally passes through records depending on each record's field names.
-       Options:
-     --at-least      {comma-separated names}
-     --which-are     {comma-separated names}
-     --at-most       {comma-separated names}
-     --all-matching  {regular expression}
-     --any-matching  {regular expression}
-     --none-matching {regular expression}
-       Examples:
-     mlr having-fields --which-are amount,status,owner
-     mlr having-fields --any-matching 'sda[0-9]'
-     mlr having-fields --any-matching '"sda[0-9]"'
-     mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive)
-
-   head
-       Usage: mlr head [options]
-       -n {count}    Head count to print; default 10
-       -g {a,b,c}    Optional group-by-field names for head counts
-       Passes through the first n records, optionally by category.
-       Without -g, ceases consuming more input (i.e. is fast) when n
-       records have been read.
-
-   histogram
-       Usage: mlr histogram [options]
-       -f {a,b,c}    Value-field names for histogram counts
-       --lo {lo}     Histogram low value
-       --hi {hi}     Histogram high value
-       --nbins {n}   Number of histogram bins
-       --auto            Automatically computes limits, ignoring --lo and --hi.
-                 Holds all values in memory before producing any output.
-       -o {prefix}   Prefix for output field name. Default: no prefix.
-       Just a histogram. Input values < lo or > hi are not counted.
-
-   join
-       Usage: mlr join [options]
-       Joins records from specified left file name with records from all file names
-       at the end of the Miller argument list.
-       Functionality is essentially the same as the system "join" command, but for
-       record streams.
-       Options:
-     -f {left file name}
-     -j {a,b,c}   Comma-separated join-field names for output
-     -l {a,b,c}   Comma-separated join-field names for left input file;
-                  defaults to -j values if omitted.
-     -r {a,b,c}   Comma-separated join-field names for right input file(s);
-                  defaults to -j values if omitted.
-     --lp {text}  Additional prefix for non-join output field names from
-                  the left file
-     --rp {text}  Additional prefix for non-join output field names from
-                  the right file(s)
-     --np         Do not emit paired records
-     --ul         Emit unpaired records from the left file
-     --ur         Emit unpaired records from the right file(s)
-     -s|--sorted-input  Require sorted input: records must be sorted
-                  lexically by their join-field names, else not all records will
-                  be paired. The only likely use case for this is with a left
-                  file which is too big to fit into system memory otherwise.
-     -u           Enable unsorted input. (This is the default even without -u.)
-                  In this case, the entire left file will be loaded into memory.
-     --prepipe {command} As in main input options; see mlr --help for details.
-                  If you wish to use a prepipe command for the main input as well
-                  as here, it must be specified there as well as here.
-       File-format options default to those for the right file names on the Miller
-       argument list, but may be overridden for the left file as follows. Please see
-       the main "mlr --help" for more information on syntax for these arguments.
-     -i {one of csv,dkvp,nidx,pprint,xtab}
-     --irs {record-separator character}
-     --ifs {field-separator character}
-     --ips {pair-separator character}
-     --repifs
-     --repips
-       Please use "mlr --usage-separator-options" for information on specifying separators.
-       Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information
-       including examples.
-
-   label
-       Usage: mlr label {new1,new2,new3,...}
-       Given n comma-separated names, renames the first n fields of each record to
-       have the respective name. (Fields past the nth are left with their original
-       names.) Particularly useful with --inidx or --implicit-csv-header, to give
-       useful names to otherwise integer-indexed fields.
-       Examples:
-     "echo 'a b c d' | mlr --inidx --odkvp cat"       gives "1=a,2=b,3=c,4=d"
-     "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d"
-
-   least-frequent
-       Usage: mlr least-frequent [options]
-       Shows the least frequently occurring distinct values for specified field names.
-       The first entry is the statistical anti-mode; the remaining are runners-up.
-       Options:
-       -f {one or more comma-separated field names}. Required flag.
-       -n {count}. Optional flag defaulting to 10.
-       -b      Suppress counts; show only field values.
-       -o {name}   Field name for output count. Default "count".
-       See also "mlr most-frequent".
-
-   merge-fields
-       Usage: mlr merge-fields [options]
-       Computes univariate statistics for each input record, accumulated across
-       specified fields.
-       Options:
-       -a {sum,count,...}  Names of accumulators. One or more of:
-     count     Count instances of fields
-     mode      Find most-frequently-occurring values for fields; first-found wins tie
-     antimode  Find least-frequently-occurring values for fields; first-found wins tie
-     sum       Compute sums of specified fields
-     mean      Compute averages (sample means) of specified fields
-     stddev    Compute sample standard deviation of specified fields
-     var       Compute sample variance of specified fields
-     meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
-     skewness  Compute sample skewness of specified fields
-     kurtosis  Compute sample kurtosis of specified fields
-     min       Compute minimum values of specified fields
-     max       Compute maximum values of specified fields
-       -f {a,b,c}  Value-field names on which to compute statistics. Requires -o.
-       -r {a,b,c}  Regular expressions for value-field names on which to compute
-               statistics. Requires -o.
-       -c {a,b,c}  Substrings for collapse mode. All fields which have the same names
-               after removing substrings will be accumulated together. Please see
-               examples below.
-       -i      Use interpolated percentiles, like R's type=7; default like type=1.
-               Not sensical for string-valued fields.
-       -o {name}   Output field basename for -f/-r.
-       -k      Keep the input fields which contributed to the output statistics;
-               the default is to omit them.
-       -F      Computes integerable things (e.g. count) in floating point.
-
-       String-valued data make sense unless arithmetic on them is required,
-       e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
-       numbers are less than strings.
-
-       Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8".
-       Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo
-     produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are
-     summed over.
-       Example: mlr merge-fields -a sum,count -r in_,out_ -o bar
-     produces "bar_sum=15,bar_count=4" since all four fields are summed over.
-       Example: mlr merge-fields -a sum,count -c in_,out_
-     produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1"
-     since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to
-     "b_y", and "b_out_x" collapses to "b_x".
-
-   most-frequent
-       Usage: mlr most-frequent [options]
-       Shows the most frequently occurring distinct values for specified field names.
-       The first entry is the statistical mode; the remaining are runners-up.
-       Options:
-       -f {one or more comma-separated field names}. Required flag.
-       -n {count}. Optional flag defaulting to 10.
-       -b      Suppress counts; show only field values.
-       -o {name}   Field name for output count. Default "count".
-       See also "mlr least-frequent".
-
-   nest
-       Usage: mlr nest [options]
-       Explodes specified field values into separate fields/records, or reverses this.
-       Options:
-     --explode,--implode   One is required.
-     --values,--pairs      One is required.
-     --across-records,--across-fields One is required.
-     -f {field name}       Required.
-     --nested-fs {string}  Defaults to ";". Field separator for nested values.
-     --nested-ps {string}  Defaults to ":". Pair separator for nested key-value pairs.
-     --evar {string}       Shorthand for --explode --values ---across-records --nested-fs {string}
-     --ivar {string}       Shorthand for --implode --values ---across-records --nested-fs {string}
-       Please use "mlr --usage-separator-options" for information on specifying separators.
-
-       Examples:
-
-     mlr nest --explode --values --across-records -f x
-     with input record "x=a;b;c,y=d" produces output records
-       "x=a,y=d"
-       "x=b,y=d"
-       "x=c,y=d"
-     Use --implode to do the reverse.
-
-     mlr nest --explode --values --across-fields -f x
-     with input record "x=a;b;c,y=d" produces output records
-       "x_1=a,x_2=b,x_3=c,y=d"
-     Use --implode to do the reverse.
-
-     mlr nest --explode --pairs --across-records -f x
-     with input record "x=a:1;b:2;c:3,y=d" produces output records
-       "a=1,y=d"
-       "b=2,y=d"
-       "c=3,y=d"
-
-     mlr nest --explode --pairs --across-fields -f x
-     with input record "x=a:1;b:2;c:3,y=d" produces output records
-       "a=1,b=2,c=3,y=d"
-
-       Notes:
-       * With --pairs, --implode doesn't make sense since the original field name has
-     been lost.
-       * The combination "--implode --values --across-records" is non-streaming:
-     no output records are produced until all input records have been read. In
-     particular, this means it won't work in tail -f contexts. But all other flag
-     combinations result in streaming (tail -f friendly) data processing.
-       * It's up to you to ensure that the nested-fs is distinct from your data's IFS:
-     e.g. by default the former is semicolon and the latter is comma.
-       See also mlr reshape.
-
-   nothing
-       Usage: mlr nothing
-       Drops all input records. Useful for testing, or after tee/print/etc. have
-       produced other output.
-
-   put
-       Usage: mlr put [options] {expression}
-       Adds/updates specified field(s). Expressions are semicolon-separated and must
-       either be assignments, or evaluate to boolean.  Booleans with following
-       statements in curly braces control whether those statements are executed;
-       booleans without following curly braces do nothing except side effects (e.g.
-       regex-captures into \1, \2, etc.).
-
-       Conversion options:
-       -S: Keeps field values as strings with no type inference to int or float.
-       -F: Keeps field values as strings or floats with no inference to int.
-       All field values are type-inferred to int/float/string unless this behavior is
-       suppressed with -S or -F.
-
-       Output/formatting options:
-       --oflatsep {string}: Separator to use when flattening multi-level @-variables
-       to output records for emit. Default ":".
-       --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
-       --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
-       Any of the output-format command-line flags (see mlr -h). Example: using
-     mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
-       the input is CSV, the output is pretty-print tabular, but the tee-file output
-       is written in JSON format.
-       --no-fflush: for emit, tee, print, and dump, don't call fflush() after every
-       record.
-
-       Expression-specification options:
-       -f {filename}: the DSL expression is taken from the specified file rather
-       than from the command line. Outer single quotes wrapping the expression
-       should not be placed in the file. If -f is specified more than once,
-       all input files specified using -f are concatenated to produce the expression.
-       (For example, you can define functions in one file and call them from another.)
-       -e {expression}: You can use this after -f to add an expression. Example use
-       case: define functions/subroutines in a file you specify with -f, then call
-       them with an expression you specify with -e.
-       (If you mix -e and -f then the expressions are evaluated in the order encountered.
-       Since the expression pieces are simply concatenated, please be sure to use intervening
-       semicolons to separate expressions.)
-
-       -s name=value: Predefines out-of-stream variable @name to have value "value".
-       Thus mlr put put -s foo=97 '$column += @foo' is like
-       mlr put put 'begin {@foo = 97} $column += @foo'.
-       The value part is subject to type-inferencing as specified by -S/-F.
-       May be specified more than once, e.g. -s name1=value1 -s name2=value2.
-       Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE
-
-       Tracing options:
-       -v: Prints the expressions's AST (abstract syntax tree), which gives
-       full transparency on the precedence and associativity rules of
-       Miller's grammar, to stdout.
-       -a: Prints a low-level stack-allocation trace to stdout.
-       -t: Prints a low-level parser trace to stderr.
-       -T: Prints a every statement to stderr as it is executed.
-
-       Other options:
-       -q: Does not include the modified record in the output stream. Useful for when
-       all desired output is in begin and/or end blocks.
-
-       Please use a dollar sign for field names and double-quotes for string
-       literals. If field names have special characters such as "." then you might
-       use braces, e.g. '${field.name}'. Miller built-in variables are
-       NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
-       variables. The environment-variable name may be an expression, e.g. a field
-       value.
-
-       Use # to comment to end of line.
-
-       Examples:
-     mlr put '$y = log10($x); $z = sqrt($y)'
-     mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0
-     mlr put '$x>0.0;  $y=log10($x); $z=sqrt($y)'   # does all three statements
-     mlr put '$a =~ "([a-z]+)_([0-9]+);  $b = "left_\1"; $c = "right_\2"'
-     mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }'
-     mlr put '$filename = FILENAME'
-     mlr put '$colored_shape = $color . "_" . $shape'
-     mlr put '$y = cos($theta); $z = atan2($y, $x)'
-     mlr put '$name = sub($name, "http.*com"i, "")'
-     mlr put -q '@sum += $x; end {emit @sum}'
-     mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}'
-     mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}'
-     mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'
-     mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'
-     mlr put '
-       $x = 1;
-      #$y = 2;
-       $z = 3
-     '
-
-       Please see also 'mlr -k' for examples using redirected output.
-
-       Please see https://miller.readthedocs.io/en/latest/reference.html for more information
-       including function list. Or "mlr -f".
-       Please see in particular:
-     http://www.johnkerl.org/miller/doc/reference-verbs.html#put
-
-   regularize
-       Usage: mlr regularize
-       For records seen earlier in the data stream with same field names in
-       a different order, outputs them with field names in the previously
-       encountered order.
-       Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8
-       output as          a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8
-
-   remove-empty-columns
-       Usage: mlr remove-empty-columns
-       Omits fields which are empty on every input row. Non-streaming.
-
-   rename
-       Usage: mlr rename [options] {old1,new1,old2,new2,...}
-       Renames specified fields.
-       Options:
-       -r     Treat old field  names as regular expressions. "ab", "a.*b"
-              will match any field name containing the substring "ab" or
-              matching "a.*b", respectively; anchors of the form "^ab$",
-              "^a.*b$" may be used. New field names may be plain strings,
-              or may contain capture groups of the form "\1" through
-              "\9". Wrapping the regex in double quotes is optional, but
-              is required if you wish to follow it with 'i' to indicate
-              case-insensitivity.
-       -g     Do global replacement within each field name rather than
-              first-match replacement.
-       Examples:
-       mlr rename old_name,new_name'
-       mlr rename old_name_1,new_name_1,old_name_2,new_name_2'
-       mlr rename -r 'Date_[0-9]+,Date,'  Rename all such fields to be "Date"
-       mlr rename -r '"Date_[0-9]+",Date' Same
-       mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015
-       mlr rename -r '"name"i,Name'   Rename "name", "Name", "NAME", etc. to "Name"
-
-   reorder
-       Usage: mlr reorder [options]
-       -f {a,b,c}   Field names to reorder.
-       -e       Put specified field names at record end: default is to put
-                them at record start.
-       Examples:
-       mlr reorder    -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3".
-       mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2".
-
-   repeat
-       Usage: mlr repeat [options]
-       Copies input records to output records multiple times.
-       Options must be exactly one of the following:
-     -n {repeat count}  Repeat each input record this many times.
-     -f {field name}    Same, but take the repeat count from the specified
-                        field name of each input record.
-       Example:
-     echo x=0 | mlr repeat -n 4 then put '$x=urand()'
-       produces:
-    x=0.488189
-    x=0.484973
-    x=0.704983
-    x=0.147311
-       Example:
-     echo a=1,b=2,c=3 | mlr repeat -f b
-       produces:
-     a=1,b=2,c=3
-     a=1,b=2,c=3
-       Example:
-     echo a=1,b=2,c=3 | mlr repeat -f c
-       produces:
-     a=1,b=2,c=3
-     a=1,b=2,c=3
-     a=1,b=2,c=3
-
-   reshape
-       Usage: mlr reshape [options]
-       Wide-to-long options:
-     -i {input field names}   -o {key-field name,value-field name}
-     -r {input field regexes} -o {key-field name,value-field name}
-     These pivot/reshape the input data such that the input fields are removed
-     and separate records are emitted for each key/value pair.
-     Note: this works with tail -f and produces output records for each input
-     record seen.
-       Long-to-wide options:
-     -s {key-field name,value-field name}
-     These pivot/reshape the input data to undo the wide-to-long operation.
-     Note: this does not work with tail -f; it produces output records only after
-     all input records have been read.
-
-       Examples:
-
-     Input file "wide.txt":
-       time       X           Y
-       2009-01-01 0.65473572  2.4520609
-       2009-01-02 -0.89248112 0.2154713
-       2009-01-03 0.98012375  1.3179287
-
-     mlr --pprint reshape -i X,Y -o item,value wide.txt
-       time       item value
-       2009-01-01 X    0.65473572
-       2009-01-01 Y    2.4520609
-       2009-01-02 X    -0.89248112
-       2009-01-02 Y    0.2154713
-       2009-01-03 X    0.98012375
-       2009-01-03 Y    1.3179287
-
-     mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt
-       time       item value
-       2009-01-01 X    0.65473572
-       2009-01-01 Y    2.4520609
-       2009-01-02 X    -0.89248112
-       2009-01-02 Y    0.2154713
-       2009-01-03 X    0.98012375
-       2009-01-03 Y    1.3179287
-
-     Input file "long.txt":
-       time       item value
-       2009-01-01 X    0.65473572
-       2009-01-01 Y    2.4520609
-       2009-01-02 X    -0.89248112
-       2009-01-02 Y    0.2154713
-       2009-01-03 X    0.98012375
-       2009-01-03 Y    1.3179287
-
-     mlr --pprint reshape -s item,value long.txt
-       time       X           Y
-       2009-01-01 0.65473572  2.4520609
-       2009-01-02 -0.89248112 0.2154713
-       2009-01-03 0.98012375  1.3179287
-       See also mlr nest.
-
-   sample
-       Usage: mlr sample [options]
-       Reservoir sampling (subsampling without replacement), optionally by category.
-       -k {count}    Required: number of records to output, total, or by group if using -g.
-       -g {a,b,c}    Optional: group-by-field names for samples.
-       See also mlr bootstrap and mlr shuffle.
-
-   sec2gmt
-       Usage: mlr sec2gmt [options] {comma-separated list of field names}
-       Replaces a numeric field representing seconds since the epoch with the
-       corresponding GMT timestamp; leaves non-numbers as-is. This is nothing
-       more than a keystroke-saver for the sec2gmt function:
-     mlr sec2gmt time1,time2
-       is the same as
-     mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'
-       Options:
-       -1 through -9: format the seconds using 1..9 decimal places, respectively.
-
-   sec2gmtdate
-       Usage: mlr sec2gmtdate {comma-separated list of field names}
-       Replaces a numeric field representing seconds since the epoch with the
-       corresponding GMT year-month-day timestamp; leaves non-numbers as-is.
-       This is nothing more than a keystroke-saver for the sec2gmtdate function:
-     mlr sec2gmtdate time1,time2
-       is the same as
-     mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'
-
-   seqgen
-       Usage: mlr seqgen [options]
-       Produces a sequence of counters.  Discards the input record stream. Produces
-       output as specified by the following options:
-       -f {name} Field name for counters; default "i".
-       --start {number} Inclusive start value; default "1".
-       --stop  {number} Inclusive stop value; default "100".
-       --step  {number} Step value; default "1".
-       Start, stop, and/or step may be floating-point. Output is integer if start,
-       stop, and step are all integers. Step may be negative. It may not be zero
-       unless start == stop.
-
-   shuffle
-       Usage: mlr shuffle {no options}
-       Outputs records randomly permuted. No output records are produced until
-       all input records are read.
-       See also mlr bootstrap and mlr sample.
-
-   skip-trivial-records
-       Usage: mlr skip-trivial-records [options]
-       Passes through all records except:
-       * those with zero fields;
-       * those for which all fields have empty value.
-
-   sort
-       Usage: mlr sort {flags}
-       Flags:
-     -f  {comma-separated field names}  Lexical ascending
-     -n  {comma-separated field names}  Numerical ascending; nulls sort last
-     -nf {comma-separated field names}  Same as -n
-     -r  {comma-separated field names}  Lexical descending
-     -nr {comma-separated field names}  Numerical descending; nulls sort first
-       Sorts records primarily by the first specified field, secondarily by the second
-       field, and so on.  (Any records not having all specified sort keys will appear
-       at the end of the output, in the order they were encountered, regardless of the
-       specified sort order.) The sort is stable: records that compare equal will sort
-       in the order they were encountered in the input record stream.
-
-       Example:
-     mlr sort -f a,b -nr x,y,z
-       which is the same as:
-     mlr sort -f a -f b -nr x -nr y -nr z
-
-   sort-within-records
-       Usage: mlr sort-within-records [no options]
-       Outputs records sorted lexically ascending by keys.
-
-   stats1
-       Usage: mlr stats1 [options]
-       Computes univariate statistics for one or more given fields, accumulated across
-       the input record stream.
-       Options:
-       -a {sum,count,...}  Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or
-                       one or more of:
-      count     Count instances of fields
-      mode      Find most-frequently-occurring values for fields; first-found wins tie
-      antimode  Find least-frequently-occurring values for fields; first-found wins tie
-      sum       Compute sums of specified fields
-      mean      Compute averages (sample means) of specified fields
-      stddev    Compute sample standard deviation of specified fields
-      var       Compute sample variance of specified fields
-      meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
-      skewness  Compute sample skewness of specified fields
-      kurtosis  Compute sample kurtosis of specified fields
-      min       Compute minimum values of specified fields
-      max       Compute maximum values of specified fields
-       -f {a,b,c}   Value-field names on which to compute statistics
-       --fr {regex} Regex for value-field names on which to compute statistics
-                (compute statistics on values in all field names matching regex)
-       --fx {regex} Inverted regex for value-field names on which to compute statistics
-                (compute statistics on values in all field names not matching regex)
-       -g {d,e,f}   Optional group-by-field names
-       --gr {regex} Regex for optional group-by-field names
-                (group by values in field names matching regex)
-       --gx {regex} Inverted regex for optional group-by-field names
-                (group by values in field names not matching regex)
-       --grfx {regex} Shorthand for --gr {regex} --fx {that same regex}
-       -i       Use interpolated percentiles, like R's type=7; default like type=1.
-                Not sensical for string-valued fields.
-       -s       Print iterative stats. Useful in tail -f contexts (in which
-                case please avoid pprint-format output since end of input
-                stream will never be seen).
-       -F       Computes integerable things (e.g. count) in floating point.
-       Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape
-       Example: mlr stats1 -a count,mode -f size
-       Example: mlr stats1 -a count,mode -f size -g shape
-       Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$'
-            This computes count and mode statistics on all field names beginning
-            with a through h, grouped by all field names starting with k.
-       Notes:
-       * p50 and median are synonymous.
-       * min and max output the same results as p0 and p100, respectively, but use
-     less memory.
-       * String-valued data make sense unless arithmetic on them is required,
-     e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
-     numbers are less than strings.
-       * count and mode allow text input; the rest require numeric input.
-     In particular, 1 and 1.0 are distinct text for count and mode.
-       * When there are mode ties, the first-encountered datum wins.
-
-   stats2
-       Usage: mlr stats2 [options]
-       Computes bivariate statistics for one or more given field-name pairs,
-       accumulated across the input record stream.
-       -a {linreg-ols,corr,...}  Names of accumulators: one or more of:
-     linreg-pca   Linear regression using principal component analysis
-     linreg-ols   Linear regression using ordinary least squares
-     r2           Quality metric for linreg-ols (linreg-pca emits its own)
-     logireg      Logistic regression
-     corr         Sample correlation
-     cov          Sample covariance
-     covx         Sample-covariance matrix
-       -f {a,b,c,d}   Value-field name-pairs on which to compute statistics.
-                  There must be an even number of names.
-       -g {e,f,g}     Optional group-by-field names.
-       -v         Print additional output for linreg-pca.
-       -s         Print iterative stats. Useful in tail -f contexts (in which
-                  case please avoid pprint-format output since end of input
-                  stream will never be seen).
-       --fit              Rather than printing regression parameters, applies them to
-                  the input data to compute new fit fields. All input records are
-                  held in memory until end of input stream. Has effect only for
-                  linreg-ols, linreg-pca, and logireg.
-       Only one of -s or --fit may be used.
-       Example: mlr stats2 -a linreg-pca -f x,y
-       Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape
-       Example: mlr stats2 -a corr -f x,y
-
-   step
-       Usage: mlr step [options]
-       Computes values dependent on the previous record, optionally grouped
-       by category.
-
-       Options:
-       -a {delta,rsum,...}   Names of steppers: comma-separated, one or more of:
-     delta    Compute differences in field(s) between successive records
-     shift    Include value(s) in field(s) from previous record, if any
-     from-first Compute differences in field(s) from first record
-     ratio    Compute ratios in field(s) between successive records
-     rsum     Compute running sums of field(s) between successive records
-     counter  Count instances of field(s) between successive records
-     ewma     Exponentially weighted moving average over successive records
-       -f {a,b,c} Value-field names on which to compute statistics
-       -g {d,e,f} Optional group-by-field names
-       -F     Computes integerable things (e.g. counter) in floating point.
-       -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no
-              smoothing), near under under 1 is light smoothing, near over 0 is
-              heavy smoothing. Multiple weights may be specified, e.g.
-              "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted
-              is "-d 0.5".
-       -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to
-              the -d values. If supplied, the number of -o values must be the same
-              as the number of -d values.
-
-       Examples:
-     mlr step -a rsum -f request_size
-     mlr step -a delta -f request_size -g hostname
-     mlr step -a ewma -d 0.1,0.9 -f x,y
-     mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y
-     mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name
-
-       Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or
-       https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
-       for more information on EWMA.
-
-   tac
-       Usage: mlr tac
-       Prints records in reverse order from the order in which they were encountered.
-
-   tail
-       Usage: mlr tail [options]
-       -n {count}    Tail count to print; default 10
-       -g {a,b,c}    Optional group-by-field names for tail counts
-       Passes through the last n records, optionally by category.
-
-   tee
-       Usage: mlr tee [options] {filename}
-       Passes through input records (like mlr cat) but also writes to specified output
-       file, using output-format flags from the command line (e.g. --ocsv). See also
-       the "tee" keyword within mlr put, which allows data-dependent filenames.
-       Options:
-       -a:      append to existing file, if any, rather than overwriting.
-       --no-fflush: don't call fflush() after every record.
-       Any of the output-format command-line flags (see mlr -h). Example: using
-     mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...
-       the input is CSV, the output is pretty-print tabular, but the tee-file output
-       is written in JSON format.
-
-   top
-       Usage: mlr top [options]
-       -f {a,b,c}    Value-field names for top counts.
-       -g {d,e,f}    Optional group-by-field names for top counts.
-       -n {count}    How many records to print per category; default 1.
-       -a        Print all fields for top-value records; default is
-                 to print only value and group-by fields. Requires a single
-                 value-field name only.
-       --min             Print top smallest values; default is top largest values.
-       -F        Keep top values as floats even if they look like integers.
-       -o {name}     Field name for output indices. Default "top_idx".
-       Prints the n records with smallest/largest values at specified fields,
-       optionally by category.
-
-   uniq
-       Usage: mlr uniq [options]
-       Prints distinct values for specified field names. With -c, same as
-       count-distinct. For uniq, -f is a synonym for -g.
-
-       Options:
-       -g {d,e,f}    Group-by-field names for uniq counts.
-       -c        Show repeat counts in addition to unique values.
-       -n        Show only the number of distinct values.
-       -o {name}     Field name for output count. Default "count".
-       -a        Output each unique record only once. Incompatible with -g.
-                 With -c, produces unique records, with repeat counts for each.
-                 With -n, produces only one record which is the unique-record count.
-                 With neither -c nor -n, produces unique records.
-
-   unsparsify
-       Usage: mlr unsparsify [options]
-       Prints records with the union of field names over all input records.
-       For field names absent in a given record but present in others, fills in a
-       value. Without -f, this verb retains all input before producing any output.
-
-       Options:
-       --fill-with {filler string}  What to fill absent fields with. Defaults to
-                                the empty string.
-       -f {a,b,c} Specify field names to be operated on. Any other fields won't be
-                                modified, and operation will be streaming.
-
-       Example: if the input is two records, one being 'a=1,b=2' and the other
-       being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and
-       'a=,b=3,c=4'.
-
-FUNCTIONS FOR FILTER/PUT
-   +
-       (class=arithmetic #args=2): Addition.
-
-       + (class=arithmetic #args=1): Unary plus.
-
-   -
-       (class=arithmetic #args=2): Subtraction.
-
-       - (class=arithmetic #args=1): Unary minus.
-
-   *
-       (class=arithmetic #args=2): Multiplication.
-
-   /
-       (class=arithmetic #args=2): Division.
-
-   //
-       (class=arithmetic #args=2): Integer division: rounds to negative (pythonic).
-
-   .+
-       (class=arithmetic #args=2): Addition, with integer-to-integer overflow
-
-       .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow.
-
-   .-
-       (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow.
-
-       .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow.
-
-   .*
-       (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow.
-
-   ./
-       (class=arithmetic #args=2): Division, with integer-to-integer overflow.
-
-   .//
-       (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow.
-
-   %
-       (class=arithmetic #args=2): Remainder; never negative-valued (pythonic).
-
-   **
-       (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix
-       operator.
-
-   |
-       (class=arithmetic #args=2): Bitwise OR.
-
-   ^
-       (class=arithmetic #args=2): Bitwise XOR.
-
-   &
-       (class=arithmetic #args=2): Bitwise AND.
-
-   ~
-       (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the
-       regex-match operator: try '$y = ~$x'.
-
-   <<
-       (class=arithmetic #args=2): Bitwise left-shift.
-
-   >>
-       (class=arithmetic #args=2): Bitwise right-shift.
-
-   bitcount
-       (class=arithmetic #args=1): Count of 1-bits
-
-   ==
-       (class=boolean #args=2): String/numeric equality. Mixing number and string
-       results in string compare.
-
-   !=
-       (class=boolean #args=2): String/numeric inequality. Mixing number and string
-       results in string compare.
-
-   =~
-       (class=boolean #args=2): String (left-hand side) matches regex (right-hand
-       side), e.g. '$name =~ "^a.*b$"'.
-
-   !=~
-       (class=boolean #args=2): String (left-hand side) does not match regex
-       (right-hand side), e.g. '$name !=~ "^a.*b$"'.
-
-   >
-       (class=boolean #args=2): String/numeric greater-than. Mixing number and string
-       results in string compare.
-
-   >=
-       (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number
-       and string results in string compare.
-
-   <
-       (class=boolean #args=2): String/numeric less-than. Mixing number and string
-       results in string compare.
-
-   <=
-       (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number
-       and string results in string compare.
-
-   &&
-       (class=boolean #args=2): Logical AND.
-
-   ||
-       (class=boolean #args=2): Logical OR.
-
-   ^^
-       (class=boolean #args=2): Logical XOR.
-
-   !
-       (class=boolean #args=1): Logical negation.
-
-   ? :
-       (class=boolean #args=3): Ternary operator.
-
-   .
-       (class=string #args=2): String concatenation.
-
-   gsub
-       (class=string #args=3): Example: '$name=gsub($name, "old", "new")'
-       (replace all).
-
-   regextract
-       (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")'
-       .
-
-   regextract_or_else
-       (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")'
-       .
-
-   strlen
-       (class=string #args=1): String length.
-
-   sub
-       (class=string #args=3): Example: '$name=sub($name, "old", "new")'
-       (replace once).
-
-   ssub
-       (class=string #args=3): Like sub but does no regexing. No characters are special.
-
-   substr
-       (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n
-       inclusive. Negative indices -len .. -1 alias to 0 .. len-1.
-
-   tolower
-       (class=string #args=1): Convert string to lowercase.
-
-   toupper
-       (class=string #args=1): Convert string to uppercase.
-
-   truncate
-       (class=string #args=2): Truncates string first argument to max length of int second argument.
-
-   capitalize
-       (class=string #args=1): Convert string's first character to uppercase.
-
-   lstrip
-       (class=string #args=1): Strip leading whitespace from string.
-
-   rstrip
-       (class=string #args=1): Strip trailing whitespace from string.
-
-   strip
-       (class=string #args=1): Strip leading and trailing whitespace from string.
-
-   collapse_whitespace
-       (class=string #args=1): Strip repeated whitespace from string.
-
-   clean_whitespace
-       (class=string #args=1): Same as collapse_whitespace and strip.
-
-   system
-       (class=string #args=1): Run command string, yielding its stdout minus final carriage return.
-
-   abs
-       (class=math #args=1): Absolute value.
-
-   acos
-       (class=math #args=1): Inverse trigonometric cosine.
-
-   acosh
-       (class=math #args=1): Inverse hyperbolic cosine.
-
-   asin
-       (class=math #args=1): Inverse trigonometric sine.
-
-   asinh
-       (class=math #args=1): Inverse hyperbolic sine.
-
-   atan
-       (class=math #args=1): One-argument arctangent.
-
-   atan2
-       (class=math #args=2): Two-argument arctangent.
-
-   atanh
-       (class=math #args=1): Inverse hyperbolic tangent.
-
-   cbrt
-       (class=math #args=1): Cube root.
-
-   ceil
-       (class=math #args=1): Ceiling: nearest integer at or above.
-
-   cos
-       (class=math #args=1): Trigonometric cosine.
-
-   cosh
-       (class=math #args=1): Hyperbolic cosine.
-
-   erf
-       (class=math #args=1): Error function.
-
-   erfc
-       (class=math #args=1): Complementary error function.
-
-   exp
-       (class=math #args=1): Exponential function e**x.
-
-   expm1
-       (class=math #args=1): e**x - 1.
-
-   floor
-       (class=math #args=1): Floor: nearest integer at or below.
-
-   invqnorm
-       (class=math #args=1): Inverse of normal cumulative distribution
-       function. Note that invqorm(urand()) is normally distributed.
-
-   log
-       (class=math #args=1): Natural (base-e) logarithm.
-
-   log10
-       (class=math #args=1): Base-10 logarithm.
-
-   log1p
-       (class=math #args=1): log(1-x).
-
-   logifit
-       (class=math #args=3): Given m and b from logistic regression, compute
-       fit: $yhat=logifit($x,$m,$b).
-
-   madd
-       (class=math #args=3): a + b mod m (integers)
-
-   max
-       (class=math variadic): max of n numbers; null loses
-
-   mexp
-       (class=math #args=3): a ** b mod m (integers)
-
-   min
-       (class=math variadic): Min of n numbers; null loses
-
-   mmul
-       (class=math #args=3): a * b mod m (integers)
-
-   msub
-       (class=math #args=3): a - b mod m (integers)
-
-   pow
-       (class=math #args=2): Exponentiation; same as **.
-
-   qnorm
-       (class=math #args=1): Normal cumulative distribution function.
-
-   round
-       (class=math #args=1): Round to nearest integer.
-
-   roundm
-       (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is
-       the same as round($x/$m)*$m
-
-   sgn
-       (class=math #args=1): +1 for positive input, 0 for zero input, -1 for
-       negative input.
-
-   sin
-       (class=math #args=1): Trigonometric sine.
-
-   sinh
-       (class=math #args=1): Hyperbolic sine.
-
-   sqrt
-       (class=math #args=1): Square root.
-
-   tan
-       (class=math #args=1): Trigonometric tangent.
-
-   tanh
-       (class=math #args=1): Hyperbolic tangent.
-
-   urand
-       (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval.
-       Int-valued example: '$n=floor(20+urand()*11)'.
-
-   urandrange
-       (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b).
-
-   urand32
-       (class=math #args=0): Integer uniformly distributed 0 and 2**32-1
-       inclusive.
-
-   urandint
-       (class=math #args=2): Integer uniformly distributed between inclusive
-       integer endpoints.
-
-   dhms2fsec
-       (class=time #args=1): Recovers floating-point seconds as in
-       dhms2fsec("5d18h53m20.250000s") = 500000.250000
-
-   dhms2sec
-       (class=time #args=1): Recovers integer seconds as in
-       dhms2sec("5d18h53m20s") = 500000
-
-   fsec2dhms
-       (class=time #args=1): Formats floating-point seconds as in
-       fsec2dhms(500000.25) = "5d18h53m20.250000s"
-
-   fsec2hms
-       (class=time #args=1): Formats floating-point seconds as in
-       fsec2hms(5000.25) = "01:23:20.250000"
-
-   gmt2sec
-       (class=time #args=1): Parses GMT timestamp as integer seconds since
-       the epoch.
-
-   localtime2sec
-       (class=time #args=1): Parses local timestamp as integer seconds since
-       the epoch. Consults $TZ environment variable.
-
-   hms2fsec
-       (class=time #args=1): Recovers floating-point seconds as in
-       hms2fsec("01:23:20.250000") = 5000.250000
-
-   hms2sec
-       (class=time #args=1): Recovers integer seconds as in
-       hms2sec("01:23:20") = 5000
-
-   sec2dhms
-       (class=time #args=1): Formats integer seconds as in sec2dhms(500000)
-       = "5d18h53m20s"
-
-   sec2gmt
-       (class=time #args=1): Formats seconds since epoch (integer part)
-       as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z".
-       Leaves non-numbers as-is.
-
-       sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n
-       decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
-       Leaves non-numbers as-is.
-
-   sec2gmtdate
-       (class=time #args=1): Formats seconds since epoch (integer part)
-       as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28".
-       Leaves non-numbers as-is.
-
-   sec2localtime
-       (class=time #args=1): Formats seconds since epoch (integer part)
-       as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z".
-       Consults $TZ environment variable. Leaves non-numbers as-is.
-
-       sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n
-       decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
-       Consults $TZ environment variable. Leaves non-numbers as-is.
-
-   sec2localdate
-       (class=time #args=1): Formats seconds since epoch (integer part)
-       as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28".
-       Consults $TZ environment variable. Leaves non-numbers as-is.
-
-   sec2hms
-       (class=time #args=1): Formats integer seconds as in
-       sec2hms(5000) = "01:23:20"
-
-   strftime
-       (class=time #args=2): Formats seconds since the epoch as timestamp, e.g.
-       strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and
-       strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z".
-       Format strings are as in the C library (please see "man strftime" on your system),
-       with the Miller-specific addition of "%1S" through "%9S" which format the seconds
-       with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.)
-       See also strftime_local.
-
-   strftime_local
-       (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone.
-
-   strptime
-       (class=time #args=2): Parses timestamp as floating-point seconds since the epoch,
-       e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000,
-       and  strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000.
-       See also strptime_local.
-
-   strptime_local
-       (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone.
-
-   systime
-       (class=time #args=0): Floating-point seconds since the epoch,
-       e.g. 1440768801.748936.
-
-   is_absent
-       (class=typing #args=1): False if field is present in input, true otherwise
-
-   is_bool
-       (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean.
-
-   is_boolean
-       (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool.
-
-   is_empty
-       (class=typing #args=1): True if field is present in input with empty string value, false otherwise.
-
-   is_empty_map
-       (class=typing #args=1): True if argument is a map which is empty.
-
-   is_float
-       (class=typing #args=1): True if field is present with value inferred to be float
-
-   is_int
-       (class=typing #args=1): True if field is present with value inferred to be int
-
-   is_map
-       (class=typing #args=1): True if argument is a map.
-
-   is_nonempty_map
-       (class=typing #args=1): True if argument is a map which is non-empty.
-
-   is_not_empty
-       (class=typing #args=1): False if field is present in input with empty value, true otherwise
-
-   is_not_map
-       (class=typing #args=1): True if argument is not a map.
-
-   is_not_null
-       (class=typing #args=1): False if argument is null (empty or absent), true otherwise.
-
-   is_null
-       (class=typing #args=1): True if argument is null (empty or absent), false otherwise.
-
-   is_numeric
-       (class=typing #args=1): True if field is present with value inferred to be int or float
-
-   is_present
-       (class=typing #args=1): True if field is present in input, false otherwise.
-
-   is_string
-       (class=typing #args=1): True if field is present with string (including empty-string) value
-
-   asserting_absent
-       (class=typing #args=1): Returns argument if it is absent in the input data, else
-       throws an error.
-
-   asserting_bool
-       (class=typing #args=1): Returns argument if it is present with boolean value, else
-       throws an error.
-
-   asserting_boolean
-       (class=typing #args=1): Returns argument if it is present with boolean value, else
-       throws an error.
-
-   asserting_empty
-       (class=typing #args=1): Returns argument if it is present in input with empty value,
-       else throws an error.
-
-   asserting_empty_map
-       (class=typing #args=1): Returns argument if it is a map with empty value, else
-       throws an error.
-
-   asserting_float
-       (class=typing #args=1): Returns argument if it is present with float value, else
-       throws an error.
-
-   asserting_int
-       (class=typing #args=1): Returns argument if it is present with int value, else
-       throws an error.
-
-   asserting_map
-       (class=typing #args=1): Returns argument if it is a map, else throws an error.
-
-   asserting_nonempty_map
-       (class=typing #args=1): Returns argument if it is a non-empty map, else throws
-       an error.
-
-   asserting_not_empty
-       (class=typing #args=1): Returns argument if it is present in input with non-empty
-       value, else throws an error.
-
-   asserting_not_map
-       (class=typing #args=1): Returns argument if it is not a map, else throws an error.
-
-   asserting_not_null
-       (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent),
-       else throws an error.
-
-   asserting_null
-       (class=typing #args=1): Returns argument if it is null (empty or absent), else throws
-       an error.
-
-   asserting_numeric
-       (class=typing #args=1): Returns argument if it is present with int or float value,
-       else throws an error.
-
-   asserting_present
-       (class=typing #args=1): Returns argument if it is present in input, else throws
-       an error.
-
-   asserting_string
-       (class=typing #args=1): Returns argument if it is present with string (including
-       empty-string) value, else throws an error.
-
-   boolean
-       (class=conversion #args=1): Convert int/float/bool/string to boolean.
-
-   float
-       (class=conversion #args=1): Convert int/float/bool/string to float.
-
-   fmtnum
-       (class=conversion #args=2): Convert int/float/bool to string using
-       printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers
-       are all long long or double. If you use formats like %d or %f, behavior is undefined.
-
-   hexfmt
-       (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff".
-
-   int
-       (class=conversion #args=1): Convert int/float/bool/string to int.
-
-   string
-       (class=conversion #args=1): Convert int/float/bool/string to string.
-
-   typeof
-       (class=conversion #args=1): Convert argument to type of argument (e.g.
-       MT_STRING). For debug.
-
-   depth
-       (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0.
-
-   haskey
-       (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or
-       'haskey(mymap, mykey)'. Error if 1st argument is not a map.
-
-   joink
-       (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'.
-
-   joinkv
-       (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")'
-
-   joinv
-       (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'.
-
-   leafcount
-       (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps,
-       same as length.
-
-   length
-       (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1.
-
-   mapdiff
-       (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg.
-       With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed.
-
-   mapexcept
-       (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset.
-       E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'.
-
-   mapselect
-       (class=maps variadic): Returns a map with only keys from remaining arguments set.
-       E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'.
-
-   mapsum
-       (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with
-       key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'.
-
-   splitkv
-       (class=maps #args=3): Splits string by separators into map with type inference.
-       E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'.
-
-   splitkvx
-       (class=maps #args=3): Splits string by separators into map without type inference (keys and
-       values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives
-       '{"a" : "1", "b" : "2", "c" : "3"}'.
-
-   splitnv
-       (class=maps #args=2): Splits string by separator into integer-indexed map with type inference.
-       E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'.
-
-   splitnvx
-       (class=maps #args=2): Splits string by separator into integer-indexed map without type
-       inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'.
-
-KEYWORDS FOR PUT AND FILTER
-   all
-       all: used in "emit", "emitp", and "unset" as a synonym for @*
-
-   begin
-       begin: defines a block of statements to be executed before input records
-       are ingested. The body statements must be wrapped in curly braces.
-       Example: 'begin { @count = 0 }'
-
-   bool
-       bool: declares a boolean local variable in the current curly-braced scope.
-       Type-checking happens at assignment: 'bool b = 1' is an error.
-
-   break
-       break: causes execution to continue after the body of the current
-       for/while/do-while loop.
-
-   call
-       call: used for invoking a user-defined subroutine.
-       Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'
-
-   continue
-       continue: causes execution to skip the remaining statements in the body of
-       the current for/while/do-while loop. For-loop increments are still applied.
-
-   do
-       do: with "while", introduces a do-while loop. The body statements must be wrapped
-       in curly braces.
-
-   dump
-       dump: prints all currently defined out-of-stream variables immediately
-     to stdout as JSON.
-
-     With >, >>, or |, the data do not become part of the output record stream but
-     are instead redirected.
-
-     The > and >> are for write and append, as in the shell, but (as with awk) the
-     file-overwrite for > is on first write, not per record. The | is for piping to
-     a process which will process the data. There will be one open file for each
-     distinct file name (for > and >>) or one subordinate process for each distinct
-     value of the piped-to command (for |). Output-formatting flags are taken from
-     the main command line.
-
-     Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
-     Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
-     Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
-     Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'
-
-   edump
-       edump: prints all currently defined out-of-stream variables immediately
-     to stderr as JSON.
-
-     Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'
-
-   elif
-       elif: the way Miller spells "else if". The body statements must be wrapped
-       in curly braces.
-
-   else
-       else: terminates an if/elif/elif chain. The body statements must be wrapped
-       in curly braces.
-
-   emit
-       emit: inserts an out-of-stream variable into the output record stream. Hashmap
-     indices present in the data but not slotted by emit arguments are not output.
-
-     With >, >>, or |, the data do not become part of the output record stream but
-     are instead redirected.
-
-     The > and >> are for write and append, as in the shell, but (as with awk) the
-     file-overwrite for > is on first write, not per record. The | is for piping to
-     a process which will process the data. There will be one open file for each
-     distinct file name (for > and >>) or one subordinate process for each distinct
-     value of the piped-to command (for |). Output-formatting flags are taken from
-     the main command line.
-
-     You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-     etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-     Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, $*'
-     Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, mapexcept($*, "a")'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
-     Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'
-
-     Please see http://johnkerl.org/miller/doc for more information.
-
-   emitf
-       emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
-     output record stream.
-
-     With >, >>, or |, the data do not become part of the output record stream but
-     are instead redirected.
-
-     The > and >> are for write and append, as in the shell, but (as with awk) the
-     file-overwrite for > is on first write, not per record. The | is for piping to
-     a process which will process the data. There will be one open file for each
-     distinct file name (for > and >>) or one subordinate process for each distinct
-     value of the piped-to command (for |). Output-formatting flags are taken from
-     the main command line.
-
-     You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-     etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
-     Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
-     Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'
-
-     Please see http://johnkerl.org/miller/doc for more information.
-
-   emitp
-       emitp: inserts an out-of-stream variable into the output record stream.
-     Hashmap indices present in the data but not slotted by emitp arguments are
-     output concatenated with ":".
-
-     With >, >>, or |, the data do not become part of the output record stream but
-     are instead redirected.
-
-     The > and >> are for write and append, as in the shell, but (as with awk) the
-     file-overwrite for > is on first write, not per record. The | is for piping to
-     a process which will process the data. There will be one open file for each
-     distinct file name (for > and >>) or one subordinate process for each distinct
-     value of the piped-to command (for |). Output-formatting flags are taken from
-     the main command line.
-
-     You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-     etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
-     Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
-     Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'
-
-     Please see http://johnkerl.org/miller/doc for more information.
-
-   end
-       end: defines a block of statements to be executed after input records
-       are ingested. The body statements must be wrapped in curly braces.
-       Example: 'end { emit @count }'
-       Example: 'end { eprint "Final count is " . @count }'
-
-   eprint
-       eprint: prints expression immediately to stderr.
-     Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)'
-     Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }'
-     Example: mlr --from f.dat put  '(NR % 1000 == 0) { eprint "Checkpoint ".NR}'
-
-   eprintn
-       eprintn: prints expression immediately to stderr, without trailing newline.
-     Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""'
-
-   false
-       false: the boolean literal value.
-
-   filter
-       filter: includes/excludes the record in the output record stream.
-
-     Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'
-
-     Instead of put with 'filter false' you can simply use put -q.  The following
-     uses the input record to accumulate data but only prints the running sum
-     without printing the input record:
-
-     Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'
-
-   float
-       float: declares a floating-point local variable in the current curly-braced scope.
-       Type-checking happens at assignment: 'float x = 0' is an error.
-
-   for
-       for: defines a for-loop using one of three styles. The body statements must
-       be wrapped in curly braces.
-       For-loop over stream record:
-     Example:  'for (k, v in $*) { ... }'
-       For-loop over out-of-stream variables:
-     Example: 'for (k, v in @counts) { ... }'
-     Example: 'for ((k1, k2), v in @counts) { ... }'
-     Example: 'for ((k1, k2, k3), v in @*) { ... }'
-       C-style for-loop:
-     Example:  'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'
-
-   func
-       func: used for defining a user-defined function.
-       Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'
-
-   if
-       if: starts an if/elif/elif chain. The body statements must be wrapped
-       in curly braces.
-
-   in
-       in: used in for-loops over stream records or out-of-stream variables.
-
-   int
-       int: declares an integer local variable in the current curly-braced scope.
-       Type-checking happens at assignment: 'int x = 0.0' is an error.
-
-   map
-       map: declares an map-valued local variable in the current curly-braced scope.
-       Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is
-       always OK. map b = a is OK or not depending on whether a is a map.
-
-   num
-       num: declares an int/float local variable in the current curly-braced scope.
-       Type-checking happens at assignment: 'num b = true' is an error.
-
-   print
-       print: prints expression immediately to stdout.
-     Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
-     Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
-     Example: mlr --from f.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-   printn
-       printn: prints expression immediately to stdout, without trailing newline.
-     Example: mlr --from f.dat put -q 'printn "."; end { print "" }'
-
-   return
-       return: specifies the return value from a user-defined function.
-       Omitted return statements (including via if-branches) result in an absent-null
-       return value, which in turns results in a skipped assignment to an LHS.
-
-   stderr
-       stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename
-     to print to standard error.
-
-   stdout
-       stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename
-     to print to standard output.
-
-   str
-       str: declares a string local variable in the current curly-braced scope.
-       Type-checking happens at assignment.
-
-   subr
-       subr: used for defining a subroutine.
-       Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'
-
-   tee
-       tee: prints the current record to specified file.
-     This is an immediate print to the specified file (except for pprint format
-     which of course waits until the end of the input stream to format all output).
-
-     The > and >> are for write and append, as in the shell, but (as with awk) the
-     file-overwrite for > is on first write, not per record. The | is for piping to
-     a process which will process the data. There will be one open file for each
-     distinct file name (for > and >>) or one subordinate process for each distinct
-     value of the piped-to command (for |). Output-formatting flags are taken from
-     the main command line.
-
-     You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-     etc., to control the format of the output. See also mlr -h.
-
-     emit with redirect and tee with redirect are identical, except tee can only
-     output $*.
-
-     Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
-     Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
-     Example: mlr --from f.dat put 'tee >  stderr, $*'
-     Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
-     Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
-     Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-     Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-
-   true
-       true: the boolean literal value.
-
-   unset
-       unset: clears field(s) from the current record, or an out-of-stream or local variable.
-
-     Example: mlr --from f.dat put 'unset $x'
-     Example: mlr --from f.dat put 'unset $*'
-     Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }'
-     Example: mlr --from f.dat put '...; unset @sums'
-     Example: mlr --from f.dat put '...; unset @sums["green"]'
-     Example: mlr --from f.dat put '...; unset @*'
-
-   var
-       var: declares an untyped local variable in the current curly-braced scope.
-       Examples: 'var a=1', 'var xyz=""'
-
-   while
-       while: introduces a while loop, or with "do", introduces a do-while loop.
-       The body statements must be wrapped in curly braces.
-
-   ENV
-       ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]'
-
-   FILENAME
-       FILENAME: evaluates to the name of the current file being processed.
-
-   FILENUM
-       FILENUM: evaluates to the number of the current file being processed,
-       starting with 1.
-
-   FNR
-       FNR: evaluates to the number of the current record within the current file
-       being processed, starting with 1. Resets at the start of each file.
-
-   IFS
-       IFS: evaluates to the input field separator from the command line.
-
-   IPS
-       IPS: evaluates to the input pair separator from the command line.
-
-   IRS
-       IRS: evaluates to the input record separator from the command line,
-       or to LF or CRLF from the input data if in autodetect mode (which is
-       the default).
-
-   M_E
-       M_E: the mathematical constant e.
-
-   M_PI
-       M_PI: the mathematical constant pi.
-
-   NF
-       NF: evaluates to the number of fields in the current record.
-
-   NR
-       NR: evaluates to the number of the current record over all files
-       being processed, starting with 1. Does not reset at the start of each file.
-
-   OFS
-       OFS: evaluates to the output field separator from the command line.
-
-   OPS
-       OPS: evaluates to the output pair separator from the command line.
-
-   ORS
-       ORS: evaluates to the output record separator from the command line,
-       or to LF or CRLF from the input data if in autodetect mode (which is
-       the default).
-
-AUTHOR
-       Miller is written by John Kerl <kerl.john.r@gmail.com>.
-
-       This manual page has been composed from Miller's help output by Eric
-       MSP Veith <eveith@veith-m.de>.
-
-SEE ALSO
-       awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and
-       MIME Type for Comma-Separated Values (CSV) Files, the miller website
-       http://johnkerl.org/miller/doc
-
-
-
-                              2021-03-22                         MILLER(1)
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/objects.inv b/docs6/_build/html/objects.inv deleted file mode 100644 index 1b921f99ef61de5a6e2c7e6316bc988850d103bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3150 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 diff --git a/docs6/_build/html/originality.html b/docs6/_build/html/originality.html deleted file mode 100644 index a0f760f8a..000000000 --- a/docs6/_build/html/originality.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - How original is Miller? — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

How original is Miller?

-

It isn’t. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include awk, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools:

-

The Unix toolkit: Intentional similarities as described in Unix-toolkit context.

-

Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites:

- -

RecordStream: Miller owes particular inspiration to RecordStream. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the sort, stats1 (analog of RecordStream’s collate), and delta operations, as well as filter and put, and pretty-print formatting.

-

stats_m: A third source of lineage is my Python stats_m module. This includes simple single-pass algorithms which form Miller’s stats1 and stats2 subcommands.

-

SQL: Fourthly, Miller’s group-by command name is from SQL, as is the term aggregate.

-

Added value: Miller’s added values include:

-
    -
  • Name-indexing, compared to the Unix toolkit’s positional indexing.

  • -
  • Raw speed, compared to awk, RecordStream, stats_m, or various other kinds of Python/Ruby/etc. scripts one can easily create.

  • -
  • Compact keystroking for many common tasks, with a decent amount of flexibility.

  • -
  • Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases.

  • -
  • Various file formats, and on-the-fly format conversion.

  • -
-

jq: Miller does for name-indexed text what jq does for JSON. If you’re not already familiar with jq, please check it out!.

-

What about similar tools?

-

Here’s a comprehensive list: https://github.com/dbohdan/structured-text-tools. Last I knew it doesn’t mention rows so here’s a plug for that as well. As it turns out, I learned about most of these after writing Miller.

-

What about DOTADIW? One of the key points of the Unix philosophy is that a tool should do one thing and do it well. Hence sort and cut do just one thing. Why does Miller put awk-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also Main reference)? This is a fair question. First note that many standard tools, such as awk and perl, do quite a few things – as does jq. But I could have pushed for putting format awareness and name-indexing options into cut, awk, and so on (so you could do cut -f hostname,uptime or awk '{sum += $x*$y}END{print sum}'). Patching cut, sort, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features.

-

Why not use Perl/Python/Ruby etc.? Maybe you should. With those tools you’ll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you’ll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking.

-

When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I’d need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I’d get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I’d get the language’s eval for free and I wouldn’t need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I’d gotten good enough performance from the latter I’d have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL.

-

No, really, why one more command-line data-manipulation tool? I wrote Miller because I was frustrated with tools like grep, sed, and so on being line-aware without being format-aware. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of RecordStream combined with the raw speed of the Unix toolkit. Miller does precisely that.

-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/performance.html b/docs6/_build/html/performance.html deleted file mode 100644 index 3992f8eaa..000000000 --- a/docs6/_build/html/performance.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - Performance — Miller 5.10.2 documentation - - - - - - - - - - - - - - - -
-
-
-
- -
-

Performance

-
-

Disclaimer

-

In a previous version of this page (see here) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples:

-
    -
  • Miller’s principal strength is that it handles key-value data in various formats while the system tools do not. So if you time mlr sort on a CSV file against system sort, it’s not relevant to say which is faster by how many percent – Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, awk doesn’t respect header lines, although you can code up some CSV-handling using if (NR==1) { ... } else { ... }. And that’s just CSV: I don’t know any simple way to get sort, awk, etc. to handle DKVP, JSON, etc. – which is the main rreason I wrote Miller.

  • -
  • Implementations differ by platform: one awk may be fundamentally faster than another, and mawk has a very efficient bytecode implementation – which handles positionally indexed data far faster than Miller does.

  • -
  • The system sort command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants.

  • -
  • Etc.

  • -
-
-
-

Summary

-

Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in grep, sed, etc.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/quick-examples.html b/docs6/_build/html/quick-examples.html deleted file mode 100644 index 70ee7ec82..000000000 --- a/docs6/_build/html/quick-examples.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - Quick examples — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Quick examples

-_images/cover-combined.png -

Column select:

-
% mlr --csv cut -f hostname,uptime mydata.csv
-
-
-

Add new columns as function of other columns:

-
% mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
-
-
-

Row filter:

-
% mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv
-
-
-

Apply column labels and pretty-print:

-
% grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
-
-
-

Join multiple data sources on key columns:

-
% mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
-
-
-

Multiple formats including JSON:

-
% mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
-
-
-

Aggregate per-column statistics:

-
% mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
-
-
-

Linear regression:

-
% mlr stats2 -a linreg-pca -f u,v -g shape data/*
-
-
-

Aggregate custom per-column statistics:

-
% mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
-
-
-

Iterate over data using DSL expressions:

-
% mlr --from estimates.tbl put '
-  for (k,v in $*) {
-    if (is_numeric(v) && k =~ "^[t-z].*$") {
-      $sum += v; $count += 1
-    }
-  }
-  $mean = $sum / $count # no assignment if count unset
-'
-
-
-

Run DSL expressions from a script file:

-
% mlr --from infile.dat put -f analyze.mlr
-
-
-

Split/reduce output to multiple filenames:

-
% mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
-
-
-

Compressed I/O:

-
% mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
-
-
-

Interoperate with other data-processing tools using standard pipes:

-
% mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
-
-
-

Tap/trace:

-
% mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/record-heterogeneity.html b/docs6/_build/html/record-heterogeneity.html deleted file mode 100644 index 61d22373e..000000000 --- a/docs6/_build/html/record-heterogeneity.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - - Record-heterogeneity — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Record-heterogeneity

-

We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error.

-

But heterogeneous data abound (today’s no-SQL databases for example). Miller handles this.

-
-

For I/O

-
-

CSV and pretty-print

-

Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example:

-
$ cat data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr --ocsvlite cat data/het.dkvp
-resource,loadsec,ok
-/path/to/file,0.45,true
-
-record_count,resource
-100,/path/to/file
-
-resource,loadsec,ok
-/path/to/second/file,0.32,true
-
-record_count,resource
-150,/path/to/second/file
-
-resource,loadsec,ok
-/some/other/path,0.97,false
-
-
-
$ mlr --opprint cat data/het.dkvp
-resource      loadsec ok
-/path/to/file 0.45    true
-
-record_count resource
-100          /path/to/file
-
-resource             loadsec ok
-/path/to/second/file 0.32    true
-
-record_count resource
-150          /path/to/second/file
-
-resource         loadsec ok
-/some/other/path 0.97    false
-
-
-

Miller handles explicit header changes as just shown. If your CSV input contains ragged data – if there are implicit header changes – you can use --allow-ragged-csv-input (or keystroke-saver --ragged). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows:

-
$ cat data/ragged.csv
-a,b,c
-1,2,3
-4,5
-6,7,8,9
-
-
-
$ mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv
-a 1
-b 2
-c 3
-
-a 4
-b 5
-c
-
-a 6
-b 7
-c 8
-4 9
-
-
-

You may also find Miller’s group-like feature handy (see also Main reference):

-
$ mlr --ocsvlite group-like data/het.dkvp
-resource,loadsec,ok
-/path/to/file,0.45,true
-/path/to/second/file,0.32,true
-/some/other/path,0.97,false
-
-record_count,resource
-100,/path/to/file
-150,/path/to/second/file
-
-
-
$ mlr --opprint group-like data/het.dkvp
-resource             loadsec ok
-/path/to/file        0.45    true
-/path/to/second/file 0.32    true
-/some/other/path     0.97    false
-
-record_count resource
-100          /path/to/file
-150          /path/to/second/file
-
-
-
-
-

Key-value-pair, vertical-tabular, and index-numbered formats

-

For these formats, record-heterogeneity comes naturally:

-
$ cat data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr --onidx --ofs ' ' cat data/het.dkvp
-/path/to/file 0.45 true
-100 /path/to/file
-/path/to/second/file 0.32 true
-150 /path/to/second/file
-/some/other/path 0.97 false
-
-
-
$ mlr --oxtab cat data/het.dkvp
-resource /path/to/file
-loadsec  0.45
-ok       true
-
-record_count 100
-resource     /path/to/file
-
-resource /path/to/second/file
-loadsec  0.32
-ok       true
-
-record_count 150
-resource     /path/to/second/file
-
-resource /some/other/path
-loadsec  0.97
-ok       false
-
-
-
$ mlr --oxtab group-like data/het.dkvp
-resource /path/to/file
-loadsec  0.45
-ok       true
-
-resource /path/to/second/file
-loadsec  0.32
-ok       true
-
-resource /some/other/path
-loadsec  0.97
-ok       false
-
-record_count 100
-resource     /path/to/file
-
-record_count 150
-resource     /path/to/second/file
-
-
-
-
-
-

For processing

-

Miller operates on specified fields and takes the rest along: for example, if you are sorting on the count field then all records in the input stream must have a count field but the other fields can vary, and moreover the sorted-on field name(s) don’t need to be in the same position on each line:

-
$ cat data/sort-het.dkvp
-count=500,color=green
-count=600
-status=ok,count=250,hours=0.22
-status=ok,count=200,hours=3.4
-count=300,color=blue
-count=100,color=green
-count=450
-
-
-
$ mlr sort -n count data/sort-het.dkvp
-count=100,color=green
-status=ok,count=200,hours=3.4
-status=ok,count=250,hours=0.22
-count=300,color=blue
-count=450
-count=500,color=green
-count=600
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/reference-dsl.html b/docs6/_build/html/reference-dsl.html deleted file mode 100644 index c5e18d6ba..000000000 --- a/docs6/_build/html/reference-dsl.html +++ /dev/null @@ -1,4459 +0,0 @@ - - - - - - - - DSL reference — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

DSL reference

-
-

Overview

-

Here’s comparison of verbs and put/filter DSL expressions:

-

Example:

-
$ mlr stats1 -a sum -f x -g a data/small
-a=pan,x_sum=0.346790
-a=eks,x_sum=1.140079
-a=wye,x_sum=0.777892
-
-
-
    -
  • Verbs are coded in C

  • -
  • They run a bit faster

  • -
  • They take fewer keystrokes

  • -
  • There is less to learn

  • -
  • Their customization is limited to each verb’s options

  • -
-

Example:

-
$ mlr  put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small
-a=pan,x_sum=0.346790
-a=eks,x_sum=1.140079
-a=wye,x_sum=0.777892
-
-
-
    -
  • You get to write your own DSL expressions

  • -
  • They run a bit slower

  • -
  • They take more keystrokes

  • -
  • There is more to learn

  • -
  • They are highly customizable

  • -
-

Please see Verbs reference for information on verbs other than put and filter.

-

The essential usages of mlr filter and mlr put are for record-selection and record-updating expressions, respectively. For example, given the following input data:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

you might retain only the records whose a field has value eks:

-
$ mlr filter '$a == "eks"' data/small
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-
-
-

or you might add a new field which is a function of existing fields:

-
$ mlr put '$ab = $a . "_" . $b ' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ab=pan_pan
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ab=eks_pan
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ab=wye_wye
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ab=eks_wye
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ab=wye_pan
-
-
-

The two verbs mlr filter and mlr put are essentially the same. The only differences are:

-
    -
  • Expressions sent to mlr filter must end with a boolean expression, which is the filtering criterion;

  • -
  • mlr filter expressions may not reference the filter keyword within them; and

  • -
  • mlr filter expressions may not use tee, emit, emitp, or emitf.

  • -
-

All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement.

-

There are more details and more choices, of course, as detailed in the following sections.

-
-
-

Syntax

-
-

Expression formatting

-

Multiple expressions may be given, separated by semicolons, and each may refer to the ones before:

-
$ ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j'
-i j  k
-0 1  1
-1 2  3
-2 3  5
-3 4  7
-4 5  9
-5 6  11
-6 7  13
-7 8  15
-8 9  17
-9 10 19
-
-
-

Newlines within the expression are ignored, which can help increase legibility of complex expressions:

-
$ mlr --opprint put '
-  $nf       = NF;
-  $nr       = NR;
-  $fnr      = FNR;
-  $filenum  = FILENUM;
-  $filename = FILENAME
-' data/small data/small2
-a   b   i     x                    y                    nf nr fnr filenum filename
-pan pan 1     0.3467901443380824   0.7268028627434533   5  1  1   1       data/small
-eks pan 2     0.7586799647899636   0.5221511083334797   5  2  2   1       data/small
-wye wye 3     0.20460330576630303  0.33831852551664776  5  3  3   1       data/small
-eks wye 4     0.38139939387114097  0.13418874328430463  5  4  4   1       data/small
-wye pan 5     0.5732889198020006   0.8636244699032729   5  5  5   1       data/small
-pan eks 9999  0.267481232652199086 0.557077185510228001 5  6  1   2       data/small2
-wye eks 10000 0.734806020620654365 0.884788571337605134 5  7  2   2       data/small2
-pan wye 10001 0.870530722602517626 0.009854780514656930 5  8  3   2       data/small2
-hat wye 10002 0.321507044286237609 0.568893318795083758 5  9  4   2       data/small2
-pan zee 10003 0.272054845593895200 0.425789896597056627 5  10 5   2       data/small2
-
-
-
$ mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium
-x_y_corr
--0.747994
-
-
-
-
-

Expressions from files

-

The simplest way to enter expressions for put and filter is between single quotes on the command line, e.g.

-
$ mlr --from data/small put '$xy = sqrt($x**2 + $y**2)'
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584
-
-
-
$ mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)'
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584
-
-
-

You may, though, find it convenient to put expressions into files for reuse, and read them -using the -f option. For example:

-
$ cat data/fe-example-3.mlr
-func f(a, b) {
-  return sqrt(a**2 + b**2)
-}
-$xy = f($x, $y)
-
-
-
$ mlr --from data/small put -f data/fe-example-3.mlr
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584
-
-
-

If you have some of the logic in a file and you want to write the rest on the command line, you can use the -f and -e options together:

-
$ cat data/fe-example-4.mlr
-func f(a, b) {
-  return sqrt(a**2 + b**2)
-}
-
-
-
$ mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)'
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584
-
-
-

A suggested use-case here is defining functions in files, and calling them from command-line expressions.

-

Another suggested use-case is putting default parameter values in files, e.g. using begin{@count=is_present(@count)?@count:10} in the file, where you can precede that using begin{@count=40} using -e.

-

Moreover, you can have one or more -f expressions (maybe one function per file, for example) and one or more -e expressions on the command line. If you mix -f and -e then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don’t forget intervening semicolons: e.g. not mlr put -e '$x=1' -e '$y=2 ...' but rather mlr put -e '$x=1;' -e '$y=2' ....)

-
-
-

Semicolons, commas, newlines, and curly braces

-

Miller uses semicolons as statement separators, not statement terminators. This means you can write:

-
mlr put 'x=1'
-mlr put 'x=1;$y=2'
-mlr put 'x=1;$y=2;'
-mlr put 'x=1;;;;$y=2;'
-
-
-

Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below).

-
$ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}  $foo = "bar"'
-x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar
-
-
-
$ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"'
-x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar
-
-
-

Semicolons are required between statements even if those statements are on separate lines. Newlines are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines:

-
mlr put '
-  $x = 1
-  $y = 2 # Syntax error
-'
-
-mlr put '
-  $x = 1;
-  $y = 2 # This is OK
-'
-
-
-

Trailing commas are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case:

-
$ mlr --csvlite --from data/a.csv put '
-  func f(
-    num a,
-    num b,
-  ): num {
-    return a**2 + b**2;
-  }
-  $* = {
-    "s": $a + $b,
-    "t": $a - $b,
-    "u": f(
-      $a,
-      $b,
-    ),
-    "v": NR,
-  }
-'
-s,t,u,v
-3,-1,5.000000,1
-9,-1,41.000000,2
-
-
-

Bodies for all compound statements must be enclosed in curly braces, even if the body is a single statement:

-
mlr put 'if ($x == 1) $y = 2' # Syntax error
-
-
-
mlr put 'if ($x == 1) { $y = 2 }' # This is OK
-
-
-

Bodies for compound statements may be empty:

-
mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable
-
-
-
-
-
-

Variables

-

Miller has the following kinds of variables:

-

Built-in variables such as NF, NF, FILENAME, M_PI, and M_E. These are all capital letters and are read-only (although some of them change value from one record to another).

-

Fields of stream records, accessed using the $ prefix. These refer to fields of the current data-stream record. For example, in echo x=1,y=2 | mlr put '$z = $x + $y', $x and $y refer to input fields, and $z refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as $*.

-

Out-of-stream variables accessed using the @ prefix. These refer to data which persist from one record to the next, including in begin and end blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as @*.

-

Local variables are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables.

-

Keywords are not variables, but since their names are reserved, you cannot use these names for local variables.

-
-

Built-in variables

-

These are written all in capital letters, such as NR, NF, FILENAME, and only a small, specific set of them is defined by Miller.

-

Namely, Miller supports the following five built-in variables for filter and put, all awk-inspired: NF, NR, FNR, FILENUM, and FILENAME, as well as the mathematical constants M_PI and M_E. Lastly, the ENV hashmap allows read access to environment variables, e.g. ENV["HOME"] or ENV["foo_".$hostname].

-
$ mlr filter 'FNR == 2' data/small*
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533
-a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134
-
-
-
$ mlr put '$fnr = FNR' data/small*
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,fnr=1
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,fnr=2
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,fnr=3
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,fnr=4
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,fnr=5
-1=a,2=b,3=i,4=x,5=y,fnr=1
-1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533,fnr=2
-1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797,fnr=3
-1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776,fnr=4
-1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463,fnr=5
-1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729,fnr=6
-a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001,fnr=1
-a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134,fnr=2
-a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930,fnr=3
-a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758,fnr=4
-a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627,fnr=5
-
-
-

Their values of NF, NR, FNR, FILENUM, and FILENAME change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ENV is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution.

-

Their scope is global: you can refer to them in any filter or put statement. Their values are assigned by the input-record reader:

-
$ mlr --csv put '$nr = NR' data/a.csv
-a,b,c,nr
-1,2,3,1
-4,5,6,2
-
-
-
$ mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv
-a,b,c,nr
-1,2,3,1
-1,2,3,1
-1,2,3,1
-4,5,6,2
-4,5,6,2
-4,5,6,2
-
-
-

The extent is for the duration of the put/filter: in a begin statement (which executes before the first input record is consumed) you will find NR=1 and in an end statement (which is executed after the last input record is consumed) you will find NR to be the total number of records ingested.

-

These are all read-only for the mlr put and mlr filter DSLs: they may be assigned from, e.g. $nr=NR, but they may not be assigned to: NR=100 is a syntax error.

-
-
-

Field names

-

Names of fields within stream records must be specified using a $ in filter and put expressions, even though the dollar signs don’t appear in the data stream itself. For integer-indexed data, this looks like awk’s $1,$2,$3, except that Miller allows non-numeric names such as $quantity or $hostname. Likewise, enclose string literals in double quotes in filter expressions even though they don’t appear in file data. In particular, mlr filter '$x=="abc"' passes through the record x=abc.

-

If field names have special characters such as . then you can use braces, e.g. '${field.name}'.

-

You may also use a computed field name in square brackets, e.g.

-
$ echo a=3,b=4 | mlr filter '$["x"] < 0.5'
-
-
-
$ echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b'
-s=green,t=blue,a=3,b=4,green_blue=12
-
-
-

Notes:

-

The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream.

-

Their extent is limited to the current record; their scope is the filter or put command in which they appear.

-

These are read-write: you can do $y=2*$x, $x=$x+1, etc.

-

Records are Miller’s output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with cut, or records are excluded with filter or put -q, etc. Simply assign a value to a field and it will be output.

-
-
-

Positional field names

-

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1).

-

Use $[[3]] to access the name of field 3. More generally, any expression evaluating to an integer can go between $[[ and ]].

-

Then using a computed field name, $[ $[[3]] ] is the value in the third field. This has the shorter equivalent notation $[[[3]]].

-
$ mlr cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$[[3]] = "NEW"' data/small
-a=pan,b=pan,NEW=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,NEW=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,NEW=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,NEW=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,NEW=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$[[[3]]] = "NEW"' data/small
-a=pan,b=pan,i=NEW,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=NEW,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=NEW,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=NEW,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$NEW = $[[NR]]' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=a
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=b
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=i
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=x
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=y
-
-
-
$ mlr put '$NEW = $[[[NR]]]' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=pan
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=pan
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=3
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=0.381399
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=0.863624
-
-
-
$ mlr put '$[[[NR]]] = "NEW"' data/small
-a=NEW,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=NEW,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=NEW,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=NEW
-
-
-

Right-hand side accesses to non-existent fields – i.e. with index less than 1 or greater than NF – return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op.

-
$ mlr put '$[[6]] = "NEW"' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$[[[6]]] = "NEW"' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
-
-

Out-of-stream variables

-

These are prefixed with an at-sign, e.g. @sum. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do @sum += $quanity, or @sum[$color] += $quanity, or @sum[$color][$shape] += $quanity. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. @sum[NR] = $a + $b, @sum[$a."-".$b] = $x, etc.

-

Their names and their values are entirely under your control; they change only when you assign to them.

-

Just as for field names in stream records, if you want to define out-of-stream variables with special characters such as . then you can use braces, e.g. '@{variable.name}["index"]'.

-

You may use a computed key in square brackets, e.g.

-
$ echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all'
-green_blue=12
-
-
-

Out-of-stream variables are scoped to the put command in which they appear. In particular, if you have two or more put commands separated by then, each put will have its own set of out-of-stream variables:

-
$ cat data/a.dkvp
-a=1,b=2,c=3
-a=4,b=5,c=6
-
-
-
$ mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp
-a=10,b=2,c=3
-a=40,b=5,c=6
-sum=5
-sum=50
-
-
-

Out-of-stream variables’ extent is from the start to the end of the record stream, i.e. every time the put or filter statement referring to them is executed.

-

Out-of-stream variables are read-write: you can do $sum=@sum, @sum=$sum, etc.

-
-
-

Indexed out-of-stream variables

-

Using an index on the @count and @sum variables, we get the benefit of the -g (group-by) option which mlr stats1 and various other Miller commands have:

-
$ mlr put -q '
-  @x_count[$a] += 1;
-  @x_sum[$a] += $x;
-  end {
-    emit @x_count, "a";
-    emit @x_sum, "a";
-  }
-' ../data/small
-a=pan,x_count=2
-a=eks,x_count=3
-a=wye,x_count=2
-a=zee,x_count=2
-a=hat,x_count=1
-a=pan,x_sum=0.849416
-a=eks,x_sum=1.751863
-a=wye,x_sum=0.777892
-a=zee,x_sum=1.125680
-a=hat,x_sum=0.031442
-
-
-
$ mlr stats1 -a count,sum -f x -g a ../data/small
-a=pan,x_count=2,x_sum=0.849416
-a=eks,x_count=3,x_sum=1.751863
-a=wye,x_count=2,x_sum=0.777892
-a=zee,x_count=2,x_sum=1.125680
-a=hat,x_count=1,x_sum=0.031442
-
-
-

Indices can be arbitrarily deep – here there are two or more of them:

-
$ mlr --from data/medium put -q '
-  @x_count[$a][$b] += 1;
-  @x_sum[$a][$b] += $x;
-  end {
-    emit (@x_count, @x_sum), "a", "b";
-  }
-'
-a=pan,b=pan,x_count=427,x_sum=219.185129
-a=pan,b=wye,x_count=395,x_sum=198.432931
-a=pan,b=eks,x_count=429,x_sum=216.075228
-a=pan,b=hat,x_count=417,x_sum=205.222776
-a=pan,b=zee,x_count=413,x_sum=205.097518
-a=eks,b=pan,x_count=371,x_sum=179.963030
-a=eks,b=wye,x_count=407,x_sum=196.945286
-a=eks,b=zee,x_count=357,x_sum=176.880365
-a=eks,b=eks,x_count=413,x_sum=215.916097
-a=eks,b=hat,x_count=417,x_sum=208.783171
-a=wye,b=wye,x_count=377,x_sum=185.295850
-a=wye,b=pan,x_count=392,x_sum=195.847900
-a=wye,b=hat,x_count=426,x_sum=212.033183
-a=wye,b=zee,x_count=385,x_sum=194.774048
-a=wye,b=eks,x_count=386,x_sum=204.812961
-a=zee,b=pan,x_count=389,x_sum=202.213804
-a=zee,b=wye,x_count=455,x_sum=233.991394
-a=zee,b=eks,x_count=391,x_sum=190.961778
-a=zee,b=zee,x_count=403,x_sum=206.640635
-a=zee,b=hat,x_count=409,x_sum=191.300006
-a=hat,b=wye,x_count=423,x_sum=208.883010
-a=hat,b=zee,x_count=385,x_sum=196.349450
-a=hat,b=eks,x_count=389,x_sum=189.006793
-a=hat,b=hat,x_count=381,x_sum=182.853532
-a=hat,b=pan,x_count=363,x_sum=168.553807
-
-
-

The idea is that stats1, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do.

-

Begin/end blocks can be mixed with pattern/action blocks. For example:

-
$ mlr put '
-  begin {
-    @num_total = 0;
-    @num_positive = 0;
-  };
-  @num_total += 1;
-  $x > 0.0 {
-    @num_positive += 1;
-    $y = log10($x); $z = sqrt($y)
-  };
-  end {
-    emitf @num_total, @num_positive
-  }
-' data/put-gating-example-1.dkvp
-x=-1
-x=0
-x=1,y=0.000000,z=0.000000
-x=2,y=0.301030,z=0.548662
-x=3,y=0.477121,z=0.690740
-num_total=5,num_positive=3
-
-
-
-
-

Local variables

-

Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can’t be computed using square brackets). There are three kinds of local variables: arguments to functions/subroutines, variables bound within for-loops, and locals defined within control blocks. They may be untyped using var, or typed using num, int, float, str, bool, and map.

-

For example:

-
$ # Here I'm using a specified random-number seed so this example always
-# produces the same output for this web document: in everyday practice we
-# would leave off the --seed 12345 part.
-mlr --seed 12345 seqgen --start 1 --stop 10 then put '
-  func f(a, b) {                          # function arguments a and b
-      r = 0.0;                            # local r scoped to the function
-      for (int i = 0; i < 6; i += 1) {    # local i scoped to the for-loop
-          num u = urand();                # local u scoped to the for-loop
-          r += u;                         # updates r from the enclosing scope
-      }
-      r /= 6;
-      return a + (b - a) * r;
-  }
-  num o = f(10, 20);                      # local to the top-level scope
-  $o = o;
-'
-i=1,o=14.662901
-i=2,o=17.881983
-i=3,o=14.586560
-i=4,o=16.402409
-i=5,o=16.336598
-i=6,o=14.622701
-i=7,o=15.983753
-i=8,o=13.852177
-i=9,o=15.472899
-i=10,o=15.643912
-
-
-

Things which are completely unsurprising, resembling many other languages:

-
    -
  • Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named a then you can reassign the value of a to be something else within the function if you like.

  • -
  • However, you cannot redeclare the type of an argument or a local: var a=1; var a=2 is an error but var a=1;  a=2 is OK.

  • -
  • All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference)

  • -
  • You can define locals (using var, num, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope.

  • -
  • If you assign to a local variable for the first time in a scope without declaring it as var, num, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as if var had been used. (See also Type-checking for an example.) I recommend always declaring variables explicitly to make the intended scoping clear.

  • -
  • Functions and subroutines never have access to locals from their callee (unless passed by value as arguments).

  • -
-

Things which are perhaps surprising compared to other languages:

-
    -
  • Type declarations using var, or typed using num, int, float, str, and bool are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are implicitly declared using var. (Some examples are shown below.)

  • -
  • Type-checking is done at assignment time. For example, float f = 0 is an error (since 0 is an integer), as is float f = 0.0; f = 1. For this reason I prefer to use num over float in most contexts since num encompasses integer and floating-point values. More information about type-checking is at Type-checking.

  • -
  • Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in for (k, v in $*) { ... } for ((k1, k2), v in @*) { ... } if there are k, v, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop.

  • -
  • For C-style triple-for loops, if a for-loop variable is defined using var, int, etc. then it is scoped to that for-loop. E.g. for (i = 0; i < 10; i += 1) { ... } and for (int i = 0; i < 10; i += 1) { ... }. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only.

  • -
-

The following example demonstrates the scope rules:

-
$ cat data/scope-example.mlr
-func f(a) {      # argument is local to the function
-  var b = 100;   # local to the function
-  c = 100;       # local to the function; does not overwrite outer c
-  return a + 1;
-}
-var a = 10;      # local at top level
-var b = 20;      # local at top level
-c = 30;          # local at top level; there is no more-outer-scope c
-if (NR == 3) {
-  var a = 40;    # scoped to the if-statement; doesn't overwrite outer a
-  b = 50;        # not scoped to the if-statement; overwrites outer b
-  c = 60;        # not scoped to the if-statement; overwrites outer c
-  d = 70;        # there is no outer d so a local d is created here
-
-  $inner_a = a;
-  $inner_b = b;
-  $inner_c = c;
-  $inner_d = d;
-}
-$outer_a = a;
-$outer_b = b;
-$outer_c = c;
-$outer_d = d;    # there is no outer d defined so no assignment happens
-
-
-
$ cat data/scope-example.dat
-n=1,x=123
-n=2,x=456
-n=3,x=789
-
-
-
$ mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr
-n       1
-x       123
-outer_a 10
-outer_b 20
-outer_c 30
-
-n       2
-x       456
-outer_a 10
-outer_b 20
-outer_c 30
-
-n       3
-x       789
-inner_a 40
-inner_b 50
-inner_c 60
-inner_d 70
-outer_a 10
-outer_b 50
-outer_c 60
-
-
-

And this example demonstrates the type-declaration rules:

-
$ cat data/type-decl-example.mlr
-subr s(a, str b, int c) {                         # a is implicitly var (untyped).
-                                                  # b is explicitly str.
-                                                  # c is explicitly int.
-                                                  # The type-checking is done at the callsite
-                                                  # when arguments are bound to parameters.
-                                                  #
-    var b = 100;     # error                      # Re-declaration in the same scope is disallowed.
-    int n = 10;                                   # Declaration of variable local to the subroutine.
-    n = 20;                                       # Assignment is OK.
-    int n = 30;      # error                      # Re-declaration in the same scope is disallowed.
-    str n = "abc";   # error                      # Re-declaration in the same scope is disallowed.
-                                                  #
-    float f1 = 1;    # error                      # 1 is an int, not a float.
-    float f2 = 2.0;                               # 2.0 is a float.
-    num f3 = 3;                                   # 3 is a num.
-    num f4 = 4.0;                                 # 4.0 is a num.
-}                                                 #
-                                                  #
-call s(1, 2, 3);                                  # Type-assertion '3 is int' is done here at the callsite.
-                                                  #
-k = "def";                                        # Top-level variable k.
-                                                  #
-for (str k, v in $*) {                            # k and v are bound here, masking outer k.
-  print k . ":" . v;                              # k is explicitly str; v is implicitly var.
-}                                                 #
-                                                  #
-print "k is".k;                                   # k at this scope level is still "def".
-print "v is".v;                                   # v is undefined in this scope.
-                                                  #
-i = -1;                                           #
-for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless
-                                                  # declared local: i is outer, j is local to the loop.
-  print "inner i =" . i;                          #
-  print "inner j =" . j;                          #
-}                                                 #
-print "outer i =" . i;                            # i has been modified by the loop.
-print "outer j =" . j;                            # j is undefined in this scope.
-
-
-
-
-

Map literals

-

Miller’s put/filter DSL has four kinds of hashmaps. Stream records are (single-level) maps from name to value. Out-of-stream variables and local variables can also be maps, although they can be multi-level hashmaps (e.g. @sum[$x][$y]). The fourth kind is map literals. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. "3" rather than 3).

-

For example, the following swaps the input stream’s a and i fields, modifies y, and drops the rest:

-
$ mlr --opprint put '
-  $* = {
-    "a": $i,
-    "i": $a,
-    "y": $y * 10,
-  }
-' data/small
-a i   y
-1 pan 7.268029
-2 eks 5.221511
-3 wye 3.383185
-4 eks 1.341887
-5 wye 8.636245
-
-
-

Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on:

-
$ mlr --from data/small put '
-  func f(map m): map {
-    m["x"] *= 200;
-    return m;
-  }
-  $* = f({"a": $a, "x": $x});
-'
-a=pan,x=69.358029
-a=eks,x=151.735993
-a=wye,x=40.920661
-a=eks,x=76.279879
-a=wye,x=114.657784
-
-
-

Like out-of-stream and local variables, map literals can be multi-level:

-
$ mlr --from data/small put -q '
-  begin {
-    @o = {
-      "nrec": 0,
-      "nkey": {"numeric":0, "non-numeric":0},
-    };
-  }
-  @o["nrec"] += 1;
-  for (k, v in $*) {
-    if (is_numeric(v)) {
-      @o["nkey"]["numeric"] += 1;
-    } else {
-      @o["nkey"]["non-numeric"] += 1;
-    }
-  }
-  end {
-    dump @o;
-  }
-'
-{
-  "nrec": 5,
-  "nkey": {
-    "numeric": 15,
-    "non-numeric": 10
-  }
-}
-
-
-

By default, map-valued expressions are dumped using JSON formatting. If you use dump to print a hashmap with integer keys and you don’t want them double-quoted (JSON-style) then you can use mlr put --jknquoteint. See also mlr put --help.

-
-
-

Type-checking

-

Miller’s put/filter DSLs support two optional kinds of type-checking. One is inline type-tests and type-assertions within expressions. The other is type declarations for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections.

-

Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data.

-
-

Type-test and type-assertion expressions

-

The following is... functions take a value and return a boolean indicating whether the argument is of the indicated type. The assert_... functions return their argument if it is of the specified type, and cause a fatal error otherwise:

-
$ mlr -F | grep ^is
-is_absent
-is_bool
-is_boolean
-is_empty
-is_empty_map
-is_float
-is_int
-is_map
-is_nonempty_map
-is_not_empty
-is_not_map
-is_not_null
-is_null
-is_numeric
-is_present
-is_string
-
-
-
$ mlr -F | grep ^assert
-asserting_absent
-asserting_bool
-asserting_boolean
-asserting_empty
-asserting_empty_map
-asserting_float
-asserting_int
-asserting_map
-asserting_nonempty_map
-asserting_not_empty
-asserting_not_map
-asserting_not_null
-asserting_null
-asserting_numeric
-asserting_present
-asserting_string
-
-
-

Please see Data-cleaning examples for examples of how to use these.

-
-
-

Type-declarations for local variables, function parameter, and function return values

-

Local variables can be defined either untyped as in x = 1, or typed as in int x = 1. Types include var (explicitly untyped), int, float, num (int or float), str, bool, and map. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in int x = 1 or in any subsequent assignments to the same variable farther down in the scope.

-

The reason for num is that int and float typedecls are very precise:

-
float a = 0;   # Runtime error since 0 is int not float
-int   b = 1.0; # Runtime error since 1.0 is float not int
-num   c = 0;   # OK
-num   d = 1.0; # OK
-
-
-

A suggestion is to use num for general use when you want numeric content, and use int when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints).

-

The var type declaration indicates no type restrictions, e.g. var x = 1 has the same type restrictions on x as x = 1. The difference is in intentional shadowing: if you have x = 1 in outer scope and x = 2 in inner scope (e.g. within a for-loop or an if-statement) then outer-scope x has value 2 after the second assignment. But if you have var x = 2 in the inner scope, then you are declaring a variable scoped to the inner block.) For example:

-
x = 1;
-if (NR == 4) {
-  x = 2; # Refers to outer-scope x: value changes from 1 to 2.
-}
-print x; # Value of x is now two
-
-
-
x = 1;
-if (NR == 4) {
-  var x = 2; # Defines a new inner-scope x with value 2
-}
-print x;     # Value of this x is still 1
-
-
-

Likewise function arguments can optionally be typed, with type enforced when the function is called:

-
func f(map m, int i) {
-  ...
-}
-$a = f({1:2, 3:4}, 5);     # OK
-$b = f({1:2, 3:4}, "abc"); # Runtime error
-$c = f({1:2, 3:4}, $x);    # Runtime error for records with non-integer field named x
-if (NR == 4) {
-  var x = 2; # Defines a new inner-scope x with value 2
-}
-print x;     # Value of this x is still 1
-
-
-

Thirdly, function return values can be type-checked at the point of return using : and a typedecl after the parameter list:

-
func f(map m, int i): bool {
-  ...
-  ...
-  if (...) {
-    return "false"; # Runtime error if this branch is taken
-  }
-  ...
-  ...
-  if (...) {
-    return retval; # Runtime error if this function doesn't have an in-scope
-    # boolean-valued variable named retval
-  }
-  ...
-  ...
-  # In Miller if your functions don't explicitly return a value, they return absent-null.
-  # So it would also be a runtime error on reaching the end of this function without
-  # an explicit return statement.
-}
-
-
-
-
-
-

Null data: empty and absent

-

Please see Null data: empty and absent.

-
-
-

Aggregate variable assignments

-

There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the $* syntax:

-
    -
  • Recursive copy of out-of-stream variables

  • -
  • Out-of-stream variable assigned to full stream record

  • -
  • Full stream record assigned to an out-of-stream variable

  • -
-

Example recursive copy of out-of-stream variables:

-
$ mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small
-{
-  "v": {
-    "sum": 2.264762,
-    "count": 5
-  }
-}
-{
-  "v": {
-    "sum": 2.264762,
-    "count": 5
-  },
-  "w": {
-    "sum": 2.264762,
-    "count": 5
-  }
-}
-
-
-

Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that:

-
$ mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-

Example of full stream record assigned to an out-of-stream variable, finding the record for which the x field has the largest value in the input stream:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small
-a   b   i x                  y
-eks pan 2 0.7586799647899636 0.5221511083334797
-
-
-
-
-

Keywords for filter and put

-
$ mlr --help-all-keywords
-all: used in "emit", "emitp", and "unset" as a synonym for @*
-
-begin: defines a block of statements to be executed before input records
-are ingested. The body statements must be wrapped in curly braces.
-Example: 'begin { @count = 0 }'
-
-bool: declares a boolean local variable in the current curly-braced scope.
-Type-checking happens at assignment: 'bool b = 1' is an error.
-
-break: causes execution to continue after the body of the current
-for/while/do-while loop.
-
-call: used for invoking a user-defined subroutine.
-Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'
-
-continue: causes execution to skip the remaining statements in the body of
-the current for/while/do-while loop. For-loop increments are still applied.
-
-do: with "while", introduces a do-while loop. The body statements must be wrapped
-in curly braces.
-
-dump: prints all currently defined out-of-stream variables immediately
-  to stdout as JSON.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'
-
-edump: prints all currently defined out-of-stream variables immediately
-  to stderr as JSON.
-
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'
-
-elif: the way Miller spells "else if". The body statements must be wrapped
-in curly braces.
-
-else: terminates an if/elif/elif chain. The body statements must be wrapped
-in curly braces.
-
-emit: inserts an out-of-stream variable into the output record stream. Hashmap
-  indices present in the data but not slotted by emit arguments are not output.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, $*'
-  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, mapexcept($*, "a")'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
-  Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
-  output record stream.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
-  Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-emitp: inserts an out-of-stream variable into the output record stream.
-  Hashmap indices present in the data but not slotted by emitp arguments are
-  output concatenated with ":".
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
-  Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-end: defines a block of statements to be executed after input records
-are ingested. The body statements must be wrapped in curly braces.
-Example: 'end { emit @count }'
-Example: 'end { eprint "Final count is " . @count }'
-
-eprint: prints expression immediately to stderr.
-  Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)'
-  Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }'
-  Example: mlr --from f.dat put  '(NR % 1000 == 0) { eprint "Checkpoint ".NR}'
-
-eprintn: prints expression immediately to stderr, without trailing newline.
-  Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""'
-
-false: the boolean literal value.
-
-filter: includes/excludes the record in the output record stream.
-
-  Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'
-
-  Instead of put with 'filter false' you can simply use put -q.  The following
-  uses the input record to accumulate data but only prints the running sum
-  without printing the input record:
-
-  Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'
-
-float: declares a floating-point local variable in the current curly-braced scope.
-Type-checking happens at assignment: 'float x = 0' is an error.
-
-for: defines a for-loop using one of three styles. The body statements must
-be wrapped in curly braces.
-For-loop over stream record:
-  Example:  'for (k, v in $*) { ... }'
-For-loop over out-of-stream variables:
-  Example: 'for (k, v in @counts) { ... }'
-  Example: 'for ((k1, k2), v in @counts) { ... }'
-  Example: 'for ((k1, k2, k3), v in @*) { ... }'
-C-style for-loop:
-  Example:  'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'
-
-func: used for defining a user-defined function.
-Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'
-
-if: starts an if/elif/elif chain. The body statements must be wrapped
-in curly braces.
-
-in: used in for-loops over stream records or out-of-stream variables.
-
-int: declares an integer local variable in the current curly-braced scope.
-Type-checking happens at assignment: 'int x = 0.0' is an error.
-
-map: declares an map-valued local variable in the current curly-braced scope.
-Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is
-always OK. map b = a is OK or not depending on whether a is a map.
-
-num: declares an int/float local variable in the current curly-braced scope.
-Type-checking happens at assignment: 'num b = true' is an error.
-
-print: prints expression immediately to stdout.
-  Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
-  Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
-  Example: mlr --from f.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-printn: prints expression immediately to stdout, without trailing newline.
-  Example: mlr --from f.dat put -q 'printn "."; end { print "" }'
-
-return: specifies the return value from a user-defined function.
-Omitted return statements (including via if-branches) result in an absent-null
-return value, which in turns results in a skipped assignment to an LHS.
-
-stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename
-  to print to standard error.
-
-stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename
-  to print to standard output.
-
-str: declares a string local variable in the current curly-braced scope.
-Type-checking happens at assignment.
-
-subr: used for defining a subroutine.
-Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'
-
-tee: prints the current record to specified file.
-  This is an immediate print to the specified file (except for pprint format
-  which of course waits until the end of the input stream to format all output).
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output. See also mlr -h.
-
-  emit with redirect and tee with redirect are identical, except tee can only
-  output $*.
-
-  Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
-  Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
-  Example: mlr --from f.dat put 'tee >  stderr, $*'
-  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
-  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
-  Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-  Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-
-true: the boolean literal value.
-
-unset: clears field(s) from the current record, or an out-of-stream or local variable.
-
-  Example: mlr --from f.dat put 'unset $x'
-  Example: mlr --from f.dat put 'unset $*'
-  Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }'
-  Example: mlr --from f.dat put '...; unset @sums'
-  Example: mlr --from f.dat put '...; unset @sums["green"]'
-  Example: mlr --from f.dat put '...; unset @*'
-
-var: declares an untyped local variable in the current curly-braced scope.
-Examples: 'var a=1', 'var xyz=""'
-
-while: introduces a while loop, or with "do", introduces a do-while loop.
-The body statements must be wrapped in curly braces.
-
-ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]'
-
-FILENAME: evaluates to the name of the current file being processed.
-
-FILENUM: evaluates to the number of the current file being processed,
-starting with 1.
-
-FNR: evaluates to the number of the current record within the current file
-being processed, starting with 1. Resets at the start of each file.
-
-IFS: evaluates to the input field separator from the command line.
-
-IPS: evaluates to the input pair separator from the command line.
-
-IRS: evaluates to the input record separator from the command line,
-or to LF or CRLF from the input data if in autodetect mode (which is
-the default).
-
-M_E: the mathematical constant e.
-
-M_PI: the mathematical constant pi.
-
-NF: evaluates to the number of fields in the current record.
-
-NR: evaluates to the number of the current record over all files
-being processed, starting with 1. Does not reset at the start of each file.
-
-OFS: evaluates to the output field separator from the command line.
-
-OPS: evaluates to the output pair separator from the command line.
-
-ORS: evaluates to the output record separator from the command line,
-or to LF or CRLF from the input data if in autodetect mode (which is
-the default).
-
-
-
-
-
-

Operator precedence

-

Operators are listed in order of decreasing precedence, highest first.

-
Operators              Associativity
----------              -------------
-()                     left to right
-**                    right to left
-! ~ unary+ unary- &    right to left
-binary* / // %         left to right
-binary+ binary- .      left to right
-<< >>                  left to right
-&                      left to right
-^                      left to right
-|                      left to right
-< <= > >=              left to right
-== != =~ !=~           left to right
-&&                     left to right
-^^                     left to right
-||                     left to right
-? :                    right to left
-=                      N/A for Miller (there is no $a=$b=$c)
-
-
-
-
-

Operator and function semantics

-
    -
  • Functions are in general pass-throughs straight to the system-standard C library.

  • -
  • The min and max functions are different from other multi-argument functions which return null if any of their inputs are null: for min and max, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string.

  • -
  • Symmetrically with respect to the bitwise OR, XOR, and AND operators |, ^, &, Miller has logical operators ||, ^^, &&: the logical XOR not existing in C.

  • -
  • The exponentiation operator ** is familiar from many languages.

  • -
  • The regex-match and regex-not-match operators =~ and !=~ are similar to those in Ruby and Perl.

  • -
-
-
-

Control structures

-
-

Pattern-action blocks

-

These are reminiscent of awk syntax. They can be used to allow assignments to be done only when appropriate – e.g. for math-function domain restrictions, regex-matching, and so on:

-
$ mlr cat data/put-gating-example-1.dkvp
-x=-1
-x=0
-x=1
-x=2
-x=3
-
-
-
$ mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp
-x=-1
-x=0
-x=1,y=0.000000,z=0.000000
-x=2,y=0.301030,z=0.548662
-x=3,y=0.477121,z=0.690740
-
-
-
$ mlr cat data/put-gating-example-2.dkvp
-a=abc_123
-a=some other name
-a=xyz_789
-
-
-
$ mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp
-a=abc_123,b=left_abc,c=right_123
-a=some other name
-a=xyz_789,b=left_xyz,c=right_789
-
-
-

This produces heteregenous output which Miller, of course, has no problems with (see Record-heterogeneity). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes put to evaluate the boolean expression (along with any side effects, namely, regex-captures \1, \2, etc.) but doesn’t use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally:

-
$ mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp
-x=-1,y=nan,z=nan
-x=0,y=-inf,z=nan
-x=1,y=0.000000,z=0.000000
-x=2,y=0.301030,z=0.548662
-x=3,y=0.477121,z=0.690740
-
-
-
$ mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp
-a=abc_123,b=left_abc,c=right_123
-a=some other name,b=left_,c=right_
-a=xyz_789,b=left_xyz,c=right_789
-
-
-
-
-

If-statements

-

These are again reminiscent of awk. Pattern-action blocks are a special case of if with no elif or else blocks, no if keyword, and parentheses optional around the boolean expression:

-
mlr put 'NR == 4 {$foo = "bar"}'
-
-
-
mlr put 'if (NR == 4) {$foo = "bar"}'
-
-
-

Compound statements use elif (rather than elsif or else if):

-
mlr put '
-  if (NR == 2) {
-    ...
-  } elif (NR ==4) {
-    ...
-  } elif (NR ==6) {
-    ...
-  } else {
-    ...
-  }
-'
-
-
-
-
-

While and do-while loops

-

Miller’s while and do-while are unsurprising in comparison to various languages, as are break and continue:

-
$ echo x=1,y=2 | mlr put '
-  while (NF < 10) {
-    $[NF+1] = ""
-  }
-  $foo = "bar"
-'
-x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar
-
-
-
$ echo x=1,y=2 | mlr put '
-  do {
-    $[NF+1] = "";
-    if (NF == 5) {
-      break
-    }
-  } while (NF < 10);
-  $foo = "bar"
-'
-x=1,y=2,3=,4=,5=,foo=bar
-
-
-

A break or continue within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. -The existence of while, do-while, and for loops in Miller’s DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in begin or end blocks, and once per record otherwise. For example, while (NR < 10) will never terminate as NR is only incremented between records.

-
-
-

For-loops

-

While Miller’s while and do-while statements are much as in many other languages, for loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of foreach, as in (for example) PHP. There are for-loops over map keys and for-loops over key-value tuples. Additionally, Miller has a C-style triple-for loop with initialize, test, and update statements.

-

As with while and do-while, a break or continue within nested control structures will propagate to the innermost loop enclosing them, if any, and a break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested.

-
-

Key-only for-loops

-

The key variable is always bound to the key of key-value pairs:

-
$ mlr --from data/small put '
-  print "NR = ".NR;
-  for (key in $*) {
-    value = $[key];
-    print "  key:" . key . "  value:".value;
-  }
-
-'
-NR = 1
-  key:a  value:pan
-  key:b  value:pan
-  key:i  value:1
-  key:x  value:0.346790
-  key:y  value:0.726803
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-NR = 2
-  key:a  value:eks
-  key:b  value:pan
-  key:i  value:2
-  key:x  value:0.758680
-  key:y  value:0.522151
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-NR = 3
-  key:a  value:wye
-  key:b  value:wye
-  key:i  value:3
-  key:x  value:0.204603
-  key:y  value:0.338319
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-NR = 4
-  key:a  value:eks
-  key:b  value:wye
-  key:i  value:4
-  key:x  value:0.381399
-  key:y  value:0.134189
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-NR = 5
-  key:a  value:wye
-  key:b  value:pan
-  key:i  value:5
-  key:x  value:0.573289
-  key:y  value:0.863624
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr -n put '
-  end {
-    o = {1:2, 3:{4:5}};
-    for (key in o) {
-      print "  key:" . key . "  valuetype:" . typeof(o[key]);
-    }
-  }
-'
-  key:1  valuetype:int
-  key:3  valuetype:map
-
-
-

Note that the value corresponding to a given key may be gotten as through a computed field name using square brackets as in $[key] for stream records, or by indexing the looped-over variable using square brackets.

-
-
-

Key-value for-loops

-

Single-level keys may be gotten at using either for(k,v) or for((k),v); multi-level keys may be gotten at using for((k1,k2,k3),v) and so on. The v variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn’t deep enough then the loop body won’t be executed.

-
$ cat data/for-srec-example.tbl
-label1 label2 f1  f2  f3
-blue   green  100 240 350
-red    green  120 11  195
-yellow blue   140 0   240
-
-
-
$ mlr --pprint --from data/for-srec-example.tbl put '
-  $sum1 = $f1 + $f2 + $f3;
-  $sum2 = 0;
-  $sum3 = 0;
-  for (key, value in $*) {
-    if (key =~ "^f[0-9]+") {
-      $sum2 += value;
-      $sum3 += $[key];
-    }
-  }
-'
-label1 label2 f1  f2  f3  sum1 sum2 sum3
-blue   green  100 240 350 690  690  690
-red    green  120 11  195 326  326  326
-yellow blue   140 0   240 380  380  380
-
-
-
$ mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }'
-a   b   i x                   y                   a_type b_type i_type x_type y_type
-pan pan 1 0.3467901443380824  0.7268028627434533  string string int    float  float
-eks pan 2 0.7586799647899636  0.5221511083334797  string string int    float  float
-wye wye 3 0.20460330576630303 0.33831852551664776 string string int    float  float
-eks wye 4 0.38139939387114097 0.13418874328430463 string string int    float  float
-wye pan 5 0.5732889198020006  0.8636244699032729  string string int    float  float
-
-
-

Note that the value of the current field in the for-loop can be gotten either using the bound variable value, or through a computed field name using square brackets as in $[key].

-

Important note: to avoid inconsistent looping behavior in case you’re setting new fields (and/or unsetting existing ones) while looping over the record, Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself:

-
$ mlr --from data/small --opprint put '
-  $sum1 = 0;
-  $sum2 = 0;
-  for (k,v in $*) {
-    if (is_numeric(v)) {
-      $sum1 +=v;
-      $sum2 += $[k];
-    }
-  }
-'
-a   b   i x                   y                   sum1     sum2
-pan pan 1 0.3467901443380824  0.7268028627434533  2.073593 8.294372
-eks pan 2 0.7586799647899636  0.5221511083334797  3.280831 13.123324
-wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 14.171687
-eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 18.062353
-wye pan 5 0.5732889198020006  0.8636244699032729  6.436913 25.747654
-
-
-

It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop:

-
$ mlr --from data/small --opprint put '
-  sum = 0;
-  for (k,v in $*) {
-    if (is_numeric(v)) {
-      sum += $[k];
-    }
-  }
-  $sum = sum
-'
-a   b   i x                   y                   sum
-pan pan 1 0.3467901443380824  0.7268028627434533  2.073593
-eks pan 2 0.7586799647899636  0.5221511083334797  3.280831
-wye wye 3 0.20460330576630303 0.33831852551664776 3.542922
-eks wye 4 0.38139939387114097 0.13418874328430463 4.515588
-wye pan 5 0.5732889198020006  0.8636244699032729  6.436913
-
-
-

You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after in, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows:

-
# Parentheses are optional for single key:
-for (k1,           v in @a["b"]["c"]) { ... }
-for ((k1),         v in @a["b"]["c"]) { ... }
-# Parentheses are required for multiple keys:
-for ((k1, k2),     v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable
-for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto
-for ((k1, k2, k3), v in @a { ... }            # Loop over variable starting from basename
-for ((k1, k2, k3), v in @* { ... }            # Loop over all variables (k1 is bound to basename)
-
-
-

That’s confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable @myvar is populated as follows:

-
$ mlr -n put --jknquoteint -q '
-  begin {
-    @myvar = {
-      1: 2,
-      3: { 4 : 5 },
-      6: { 7: { 8: 9 } }
-    }
-  }
-  end { dump }
-'
-{
-  "myvar": {
-    1: 2,
-    3: {
-      4: 5
-    },
-    6: {
-      7: {
-        8: 9
-      }
-    }
-  }
-}
-
-
-

Then we can get at various values as follows:

-
$ mlr -n put --jknquoteint -q '
-  begin {
-    @myvar = {
-      1: 2,
-      3: { 4 : 5 },
-      6: { 7: { 8: 9 } }
-    }
-  }
-  end {
-    for (k, v in @myvar) {
-      print
-        "key=" . k .
-        ",valuetype=" . typeof(v);
-    }
-  }
-'
-key=1,valuetype=int
-key=3,valuetype=map
-key=6,valuetype=map
-
-
-
$ mlr -n put --jknquoteint -q '
-  begin {
-    @myvar = {
-      1: 2,
-      3: { 4 : 5 },
-      6: { 7: { 8: 9 } }
-    }
-  }
-  end {
-    for ((k1, k2), v in @myvar) {
-      print
-        "key1=" . k1 .
-        ",key2=" . k2 .
-        ",valuetype=" . typeof(v);
-    }
-  }
-'
-key1=3,key2=4,valuetype=int
-key1=6,key2=7,valuetype=map
-
-
-
$ mlr -n put --jknquoteint -q '
-  begin {
-    @myvar = {
-      1: 2,
-      3: { 4 : 5 },
-      6: { 7: { 8: 9 } }
-    }
-  }
-  end {
-    for ((k1, k2), v in @myvar[6]) {
-      print
-        "key1=" . k1 .
-        ",key2=" . k2 .
-        ",valuetype=" . typeof(v);
-    }
-  }
-'
-key1=7,key2=8,valuetype=int
-
-
-
-
-

C-style triple-for loops

-

These are supported as follows:

-
$ mlr --from data/small --opprint put '
-  num suma = 0;
-  for (a = 1; a <= NR; a += 1) {
-    suma += a;
-  }
-  $suma = suma;
-'
-a   b   i x                   y                   suma
-pan pan 1 0.3467901443380824  0.7268028627434533  1
-eks pan 2 0.7586799647899636  0.5221511083334797  3
-wye wye 3 0.20460330576630303 0.33831852551664776 6
-eks wye 4 0.38139939387114097 0.13418874328430463 10
-wye pan 5 0.5732889198020006  0.8636244699032729  15
-
-
-
$ mlr --from data/small --opprint put '
-  num suma = 0;
-  num sumb = 0;
-  for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) {
-    suma += a;
-    sumb += b;
-  }
-  $suma = suma;
-  $sumb = sumb;
-'
-a   b   i x                   y                   suma sumb
-pan pan 1 0.3467901443380824  0.7268028627434533  1    1
-eks pan 2 0.7586799647899636  0.5221511083334797  3    3
-wye wye 3 0.20460330576630303 0.33831852551664776 6    7
-eks wye 4 0.38139939387114097 0.13418874328430463 10   15
-wye pan 5 0.5732889198020006  0.8636244699032729  15   31
-
-
-

Notes:

-
    -
  • In for (start; continuation; update) { body }, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. for(i=1;;i+=1)) it defaults to true.

  • -
  • In particular, you may use $-variables and/or @-variables in the start, continuation, and/or update steps (as well as the body, of course).

  • -
  • The typedecls such as int or num are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified.

  • -
  • Miller has no ++ or -- operators.

  • -
  • As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty.

  • -
-
-
-
-

Begin/end blocks

-

Miller supports an awk-like begin/end syntax. The statements in the begin block are executed before any input records are read; the statements in the end block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with begin, you might use a pattern/action block of the form FNR == 1 { ... }.) All statements outside of begin or end are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example:

-
$ mlr put '
-  begin { @sum = 0 };
-  @x_sum += $x;
-  end { emit @x_sum }
-' ../data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697
-a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694
-a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006
-a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059
-a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864
-x_sum=4.536294
-
-
-

Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (not quite as in awk, where they’d default to 0 either way), the above can be written more succinctly as

-
$ mlr put '
-  @x_sum += $x;
-  end { emit @x_sum }
-' ../data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697
-a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694
-a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006
-a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059
-a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864
-x_sum=4.536294
-
-
-

The put -q option is a shorthand which suppresses printing of each output record, with only emit statements being output. So to get only summary outputs, one could write

-
$ mlr put -q '
-  @x_sum += $x;
-  end { emit @x_sum }
-' ../data/small
-x_sum=4.536294
-
-
-

We can do similarly with multiple out-of-stream variables:

-
$ mlr put -q '
-  @x_count += 1;
-  @x_sum += $x;
-  end {
-    emit @x_count;
-    emit @x_sum;
-  }
-' ../data/small
-x_count=10
-x_sum=4.536294
-
-
-

This is of course not much different than

-
$ mlr stats1 -a count,sum -f x ../data/small
-x_count=10,x_sum=4.536294
-
-
-

Note that it’s a syntax error for begin/end blocks to refer to field names (beginning with $), since these execute outside the context of input records.

-
-
-
-

Output statements

-

You can output variable-values or expressions in five ways:

-
    -
  • Assign them to stream-record fields. For example, $cumulative_sum = @sum. For another example, $nr = NR adds a field named nr to each output record, containing the value of the built-in variable NR as of when that record was ingested.

  • -
  • Use the print or eprint keywords which immediately print an expression directly to standard output or standard error, respectively. Note that dump, edump, print, and eprint don’t output records which participate in then-chaining; rather, they’re just immediate prints to stdout/stderr. The printn and eprintn keywords are the same except that they don’t print final newlines. Additionally, you can print to a specified file instead of stdout/stderr.

  • -
  • Use the dump or edump keywords, which immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error (respectively).

  • -
  • Use tee which formats the current stream record (not just an arbitrary string as with print) to a specific file.

  • -
  • Use emit/emitp/emitf to send out-of-stream variables’ current values to the output record stream, e.g. @sum += $x; emit @sum which produces an extra output record such as sum=3.1648382.

  • -
-

For the first two options you are populating the output-records stream which feeds into the next verb in a then-chain (if any), or which otherwise is formatted for output using --o... flags.

-

For the last three options you are sending output directly to standard output, standard error, or a file.

- -
-

Dump statements

-

The dump statement is for printing expressions, including maps, directly to stdout/stderr, respectively:

-
    -
  • There are two variants: dump prints to stdout; edump prints to stderr.

  • -
  • Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a then-chain. (Use emit for that.)

  • -
  • You can use dump to output single strings, numbers, or expressions including map-valued data. Map-valued data are printed as JSON. Miller allows string and integer keys in its map literals while JSON allows only string keys, so use mlr put --jknquoteint if you want integer-valued map keys not double-quoted.

  • -
  • If you use dump (or edump) with no arguments, you get a JSON structure representing the current values of all out-of-stream variables.

  • -
  • As with print, you can redirect output to files.

  • -
  • See also Redirected-output statements for examples.

  • -
-
-
-

Tee statements

-

Records produced by a mlr put go downstream to the next verb in your then-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using tee.

-

The syntax is, by example, mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index. First is tee >, then the filename expression (which can be an expression such as "tap.".$a.".dat"), then a comma, then $*. (Nothing else but $* is teeable.)

-

See also Redirected-output statements for examples.

-
-
-

Redirected-output statements

-

The print, dump tee, emitf, emit, and emitp keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on.

-

Details:

-
    -
  • The print and dump keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present.

  • -
-
$ mlr --help-keyword print
-print: prints expression immediately to stdout.
-  Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
-  Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
-  Example: mlr --from f.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-
-
$ mlr --help-keyword dump
-dump: prints all currently defined out-of-stream variables immediately
-  to stdout as JSON.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
-  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'
-
-
-
    -
  • mlr put sends the current record (possibly modified by the put expression) to the output record stream. Records are then input to the following verb in a then-chain (if any), else printed to standard output (unless put -q). The tee keyword additionally writes the output record to specified file(s) or pipe-to command, or immediately to stdout/stderr.

  • -
-
$ mlr --help-keyword tee
-tee: prints the current record to specified file.
-  This is an immediate print to the specified file (except for pprint format
-  which of course waits until the end of the input stream to format all output).
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output. See also mlr -h.
-
-  emit with redirect and tee with redirect are identical, except tee can only
-  output $*.
-
-  Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
-  Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
-  Example: mlr --from f.dat put 'tee >  stderr, $*'
-  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
-  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
-  Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-  Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'
-
-
-
    -
  • mlr put’s emitf, emitp, and emit send out-of-stream variables to the output record stream. These are then input to the following verb in a then-chain (if any), else printed to standard output. When redirected with >, >>, or |, they instead write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to stdout/stderr.

  • -
-
$ mlr --help-keyword emitf
-emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
-  output record stream.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
-  Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
-  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-
-
$ mlr --help-keyword emitp
-emitp: inserts an out-of-stream variable into the output record stream.
-  Hashmap indices present in the data but not slotted by emitp arguments are
-  output concatenated with ":".
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
-  Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-
-
$ mlr --help-keyword emit
-emit: inserts an out-of-stream variable into the output record stream. Hashmap
-  indices present in the data but not slotted by emit arguments are not output.
-
-  With >, >>, or |, the data do not become part of the output record stream but
-  are instead redirected.
-
-  The > and >> are for write and append, as in the shell, but (as with awk) the
-  file-overwrite for > is on first write, not per record. The | is for piping to
-  a process which will process the data. There will be one open file for each
-  distinct file name (for > and >>) or one subordinate process for each distinct
-  value of the piped-to command (for |). Output-formatting flags are taken from
-  the main command line.
-
-  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
-  etc., to control the format of the output if the output is redirected. See also mlr -h.
-
-  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, $*'
-  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, mapexcept($*, "a")'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
-  Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
-  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'
-
-  Please see http://johnkerl.org/miller/doc for more information.
-
-
-
-
-

Emit statements

-

There are three variants: emitf, emit, and emitp. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using dump), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including $*, map-valued out-of-stream variables, the entire out-of-stream-variable collection @*, map-valued local variables, map literals, or map-valued function return values.

-

Use emitf to output several out-of-stream variables side-by-side in the same output record. For emitf these mustn’t have indexing using @name[...]. Example:

-
$ mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small
-count=5,x_sum=2.264762,y_sum=2.585086
-
-
-

Use emit to output an out-of-stream variable. If it’s non-indexed you’ll get a simple key-value pair:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put -q '@sum += $x; end { dump }' data/small
-{
-  "sum": 2.264762
-}
-
-
-
$ mlr put -q '@sum += $x; end { emit @sum }' data/small
-sum=2.264762
-
-
-

If it’s indexed then use as many names after emit as there are indices:

-
$ mlr put -q '@sum[$a] += $x; end { dump }' data/small
-{
-  "sum": {
-    "pan": 0.346790,
-    "eks": 1.140079,
-    "wye": 0.777892
-  }
-}
-
-
-
$ mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small
-a=pan,sum=0.346790
-a=eks,sum=1.140079
-a=wye,sum=0.777892
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small
-{
-  "sum": {
-    "pan": {
-      "pan": 0.346790
-    },
-    "eks": {
-      "pan": 0.758680,
-      "wye": 0.381399
-    },
-    "wye": {
-      "wye": 0.204603,
-      "pan": 0.573289
-    }
-  }
-}
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small
-a=pan,b=pan,sum=0.346790
-a=eks,b=pan,sum=0.758680
-a=eks,b=wye,sum=0.381399
-a=wye,b=wye,sum=0.204603
-a=wye,b=pan,sum=0.573289
-
-
-
$ mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small
-{
-  "sum": {
-    "pan": {
-      "pan": {
-        "1": 0.346790
-      }
-    },
-    "eks": {
-      "pan": {
-        "2": 0.758680
-      },
-      "wye": {
-        "4": 0.381399
-      }
-    },
-    "wye": {
-      "wye": {
-        "3": 0.204603
-      },
-      "pan": {
-        "5": 0.573289
-      }
-    }
-  }
-}
-
-
-
$ mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small
-a=pan,b=pan,i=1,sum=0.346790
-a=eks,b=pan,i=2,sum=0.758680
-a=eks,b=wye,i=4,sum=0.381399
-a=wye,b=wye,i=3,sum=0.204603
-a=wye,b=pan,i=5,sum=0.573289
-
-
-

Now for emitp: if you have as many names following emit as there are levels in the out-of-stream variable’s hashmap, then emit and emitp do the same thing. Where they differ is when you don’t specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: emitp includes full prefixing (hence the p in emitp) while emit takes the deepest hashmap key as the output-record key:

-
$ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small
-{
-  "sum": {
-    "pan": {
-      "pan": 0.346790
-    },
-    "eks": {
-      "pan": 0.758680,
-      "wye": 0.381399
-    },
-    "wye": {
-      "wye": 0.204603,
-      "pan": 0.573289
-    }
-  }
-}
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small
-a=pan,pan=0.346790
-a=eks,pan=0.758680,wye=0.381399
-a=wye,wye=0.204603,pan=0.573289
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small
-pan=0.346790
-pan=0.758680,wye=0.381399
-wye=0.204603,pan=0.573289
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small
-a=pan,sum:pan=0.346790
-a=eks,sum:pan=0.758680,sum:wye=0.381399
-a=wye,sum:wye=0.204603,sum:pan=0.573289
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small
-sum:pan:pan=0.346790,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:wye:wye=0.204603,sum:wye:pan=0.573289
-
-
-
$ mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small
-sum:pan:pan 0.346790
-sum:eks:pan 0.758680
-sum:eks:wye 0.381399
-sum:wye:wye 0.204603
-sum:wye:pan 0.573289
-
-
-

Use –oflatsep to specify the character which joins multilevel -keys for emitp (it defaults to a colon):

-
$ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small
-a=pan,sum/pan=0.346790
-a=eks,sum/pan=0.758680,sum/wye=0.381399
-a=wye,sum/wye=0.204603,sum/pan=0.573289
-
-
-
$ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small
-sum/pan/pan=0.346790,sum/eks/pan=0.758680,sum/eks/wye=0.381399,sum/wye/wye=0.204603,sum/wye/pan=0.573289
-
-
-
$ mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small
-sum/pan/pan 0.346790
-sum/eks/pan 0.758680
-sum/eks/wye 0.381399
-sum/wye/wye 0.204603
-sum/wye/pan 0.573289
-
-
-
-
-

Multi-emit statements

-

You can emit multiple map-valued expressions side-by-side by -including their names in parentheses:

-
$ mlr --from data/medium --opprint put -q '
-  @x_count[$a][$b] += 1;
-  @x_sum[$a][$b] += $x;
-  end {
-      for ((a, b), _ in @x_count) {
-          @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]
-      }
-      emit (@x_sum, @x_count, @x_mean), "a", "b"
-  }
-'
-a   b   x_sum      x_count x_mean
-pan pan 219.185129 427     0.513314
-pan wye 198.432931 395     0.502362
-pan eks 216.075228 429     0.503672
-pan hat 205.222776 417     0.492141
-pan zee 205.097518 413     0.496604
-eks pan 179.963030 371     0.485076
-eks wye 196.945286 407     0.483895
-eks zee 176.880365 357     0.495463
-eks eks 215.916097 413     0.522799
-eks hat 208.783171 417     0.500679
-wye wye 185.295850 377     0.491501
-wye pan 195.847900 392     0.499612
-wye hat 212.033183 426     0.497730
-wye zee 194.774048 385     0.505907
-wye eks 204.812961 386     0.530604
-zee pan 202.213804 389     0.519830
-zee wye 233.991394 455     0.514267
-zee eks 190.961778 391     0.488393
-zee zee 206.640635 403     0.512756
-zee hat 191.300006 409     0.467726
-hat wye 208.883010 423     0.493813
-hat zee 196.349450 385     0.509999
-hat eks 189.006793 389     0.485879
-hat hat 182.853532 381     0.479931
-hat pan 168.553807 363     0.464336
-
-
-

What this does is walk through the first out-of-stream variable (@x_sum in this example) as usual, then for each keylist found (e.g. pan,wye), include the values for the remaining out-of-stream variables (here, @x_count and @x_mean). You should use this when all out-of-stream variables in the emit statement have the same shape and the same keylists.

-
-
-

Emit-all statements

-

Use emit all (or emit @* which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of mlr stats1):

-
$ mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}'
-a   b   sum      count
-pan pan 0.346790 1
-eks pan 0.758680 1
-eks wye 0.381399 1
-wye wye 0.204603 1
-wye pan 0.573289 1
-
-
-
$ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}'
-a   b   sum
-pan pan 0.346790
-eks pan 0.758680
-eks wye 0.381399
-wye wye 0.204603
-wye pan 0.573289
-
-a   b   count
-pan pan 1
-eks pan 1
-eks wye 1
-wye wye 1
-wye pan 1
-
-
-
$ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}'
-a   b   sum      count
-pan pan 0.346790 1
-eks pan 0.758680 1
-eks wye 0.381399 1
-wye wye 0.204603 1
-wye pan 0.573289 1
-
-
-
-
-
-

Unset statements

-

You can clear a map key by assigning the empty string as its value: $x="" or @x="". Using unset you can remove the key entirely. Examples:

-
$ cat data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put 'unset $x, $a' data/small
-b=pan,i=1,y=0.7268028627434533
-b=pan,i=2,y=0.5221511083334797
-b=wye,i=3,y=0.33831852551664776
-b=wye,i=4,y=0.13418874328430463
-b=pan,i=5,y=0.8636244699032729
-
-
-

This can also be done, of course, using mlr cut -x. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel:

-
$ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small
-{
-  "sum": {
-    "pan": {
-      "pan": 0.346790
-    },
-    "eks": {
-      "pan": 0.758680,
-      "wye": 0.381399
-    },
-    "wye": {
-      "wye": 0.204603,
-      "pan": 0.573289
-    }
-  }
-}
-{
-}
-
-
-
$ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small
-{
-  "sum": {
-    "pan": {
-      "pan": 0.346790
-    },
-    "eks": {
-      "pan": 0.758680,
-      "wye": 0.381399
-    },
-    "wye": {
-      "wye": 0.204603,
-      "pan": 0.573289
-    }
-  }
-}
-{
-  "sum": {
-    "pan": {
-      "pan": 0.346790
-    },
-    "wye": {
-      "wye": 0.204603,
-      "pan": 0.573289
-    }
-  }
-}
-
-
-

If you use unset all (or unset @* which is synonymous), that will unset all out-of-stream variables which have been defined up to that point.

-
-
-

Filter statements

-

You can use filter within put. In fact, the following two are synonymous:

-
$ mlr filter 'NR==2 || NR==3' data/small
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-
-
-
$ mlr put 'filter NR==2 || NR==3' data/small
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-
-
-

The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter:

-
$ mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small
-a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
-
-
-
$ mlr put '$z = $x * $y; filter $z > 0.3' data/small
-a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.396146
-a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.495106
-
-
-
-
-

Built-in functions for filter and put, summary

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Name

Class

#Args

+

arithmetic

2

+

arithmetic

1

-

arithmetic

2

-

arithmetic

1

*

arithmetic

2

/

arithmetic

2

//

arithmetic

2

.+

arithmetic

2

.+

arithmetic

1

.-

arithmetic

2

.-

arithmetic

1

.*

arithmetic

2

./

arithmetic

2

.//

arithmetic

2

%

arithmetic

2

**

arithmetic

2

|

arithmetic

2

^

arithmetic

2

&

arithmetic

2

~

arithmetic

1

<<

arithmetic

2

>>

arithmetic

2

bitcount

arithmetic

1

==

boolean

2

!=

boolean

2

=~

boolean

2

!=~

boolean

2

>

boolean

2

>=

boolean

2

<

boolean

2

<=

boolean

2

&&

boolean

2

||

boolean

2

^^

boolean

2

!

boolean

1

? :

boolean

3

.

string

2

gsub

string

3

regextract

string

2

regextract_or_else

string

3

strlen

string

1

sub

string

3

ssub

string

3

substr

string

3

tolower

string

1

toupper

string

1

truncate

string

2

capitalize

string

1

lstrip

string

1

rstrip

string

1

strip

string

1

collapse_whitespace

string

1

clean_whitespace

string

1

system

string

1

abs

math

1

acos

math

1

acosh

math

1

asin

math

1

asinh

math

1

atan

math

1

atan2

math

2

atanh

math

1

cbrt

math

1

ceil

math

1

cos

math

1

cosh

math

1

erf

math

1

erfc

math

1

exp

math

1

expm1

math

1

floor

math

1

invqnorm

math

1

log

math

1

log10

math

1

log1p

math

1

logifit

math

3

madd

math

3

max

math

variadic

mexp

math

3

min

math

variadic

mmul

math

3

msub

math

3

pow

math

2

qnorm

math

1

round

math

1

roundm

math

2

sgn

math

1

sin

math

1

sinh

math

1

sqrt

math

1

tan

math

1

tanh

math

1

urand

math

0

urandrange

math

2

urand32

math

0

urandint

math

2

dhms2fsec

time

1

dhms2sec

time

1

fsec2dhms

time

1

fsec2hms

time

1

gmt2sec

time

1

localtime2sec

time

1

hms2fsec

time

1

hms2sec

time

1

sec2dhms

time

1

sec2gmt

time

1

sec2gmt

time

2

sec2gmtdate

time

1

sec2localtime

time

1

sec2localtime

time

2

sec2localdate

time

1

sec2hms

time

1

strftime

time

2

strftime_local

time

2

strptime

time

2

strptime_local

time

2

systime

time

0

is_absent

typing

1

is_bool

typing

1

is_boolean

typing

1

is_empty

typing

1

is_empty_map

typing

1

is_float

typing

1

is_int

typing

1

is_map

typing

1

is_nonempty_map

typing

1

is_not_empty

typing

1

is_not_map

typing

1

is_not_null

typing

1

is_null

typing

1

is_numeric

typing

1

is_present

typing

1

is_string

typing

1

asserting_absent

typing

1

asserting_bool

typing

1

asserting_boolean

typing

1

asserting_empty

typing

1

asserting_empty_map

typing

1

asserting_float

typing

1

asserting_int

typing

1

asserting_map

typing

1

asserting_nonempty_map

typing

1

asserting_not_empty

typing

1

asserting_not_map

typing

1

asserting_not_null

typing

1

asserting_null

typing

1

asserting_numeric

typing

1

asserting_present

typing

1

asserting_string

typing

1

boolean

conversion

1

float

conversion

1

fmtnum

conversion

2

hexfmt

conversion

1

int

conversion

1

string

conversion

1

typeof

conversion

1

depth

maps

1

haskey

maps

2

joink

maps

2

joinkv

maps

3

joinv

maps

2

leafcount

maps

1

length

maps

1

mapdiff

maps

variadic

mapexcept

maps

variadic

mapselect

maps

variadic

mapsum

maps

variadic

splitkv

maps

3

splitkvx

maps

3

splitnv

maps

2

splitnvx

maps

2

-
-
-

Built-in functions for filter and put

-

Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as min and max. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference.

-

You can get a list of all functions using mlr -F.

-
-

+

-
+ (class=arithmetic #args=2): Addition.
-
-+ (class=arithmetic #args=1): Unary plus.
-
-
-
-
-

-

-
- (class=arithmetic #args=2): Subtraction.
-
-- (class=arithmetic #args=1): Unary minus.
-
-
-
-
-

*

-
* (class=arithmetic #args=2): Multiplication.
-
-
-
-
-

/

-
/ (class=arithmetic #args=2): Division.
-
-
-
-
-

//

-
// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic).
-
-
-
-
-

.+

-
.+ (class=arithmetic #args=2): Addition, with integer-to-integer overflow
-
-.+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow.
-
-
-
-
-

.-

-
.- (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow.
-
-.- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow.
-
-
-
-
-

.*

-
.* (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow.
-
-
-
-
-

./

-
./ (class=arithmetic #args=2): Division, with integer-to-integer overflow.
-
-
-
-
-

.//

-
.// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow.
-
-
-
-
-

%

-
% (class=arithmetic #args=2): Remainder; never negative-valued (pythonic).
-
-
-
-
-

**

-
** (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix
-operator.
-
-
-
-
-

|

-
| (class=arithmetic #args=2): Bitwise OR.
-
-
-
-
-

^

-
^ (class=arithmetic #args=2): Bitwise XOR.
-
-
-
-
-

&

-
& (class=arithmetic #args=2): Bitwise AND.
-
-
-
-
-

~

-
~ (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the
-regex-match operator: try '$y = ~$x'.
-
-
-
-
-

<<

-
<< (class=arithmetic #args=2): Bitwise left-shift.
-
-
-
-
-

>>

-
>> (class=arithmetic #args=2): Bitwise right-shift.
-
-
-
-
-

==

-
== (class=boolean #args=2): String/numeric equality. Mixing number and string
-results in string compare.
-
-
-
-
-

!=

-
!= (class=boolean #args=2): String/numeric inequality. Mixing number and string
-results in string compare.
-
-
-
-
-

=~

-
=~ (class=boolean #args=2): String (left-hand side) matches regex (right-hand
-side), e.g. '$name =~ "^a.*b$"'.
-
-
-
-
-

!=~

-
!=~ (class=boolean #args=2): String (left-hand side) does not match regex
-(right-hand side), e.g. '$name !=~ "^a.*b$"'.
-
-
-
-
-

>

-
> (class=boolean #args=2): String/numeric greater-than. Mixing number and string
-results in string compare.
-
-
-
-
-

>=

-
>= (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number
-and string results in string compare.
-
-
-
-
-

<

-
< (class=boolean #args=2): String/numeric less-than. Mixing number and string
-results in string compare.
-
-
-
-
-

<=

-
<= (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number
-and string results in string compare.
-
-
-
-
-

&&

-
&& (class=boolean #args=2): Logical AND.
-
-
-
-
-

||

-
|| (class=boolean #args=2): Logical OR.
-
-
-
-
-

^^

-
^^ (class=boolean #args=2): Logical XOR.
-
-
-
-
-

!

-
! (class=boolean #args=1): Logical negation.
-
-
-
-
-

?

-
? : (class=boolean #args=3): Ternary operator.
-
-
-
-
-

.

-
. (class=string #args=2): String concatenation.
-
-
-
-
-

abs

-
abs (class=math #args=1): Absolute value.
-
-
-
-
-

acos

-
acos (class=math #args=1): Inverse trigonometric cosine.
-
-
-
-
-

acosh

-
acosh (class=math #args=1): Inverse hyperbolic cosine.
-
-
-
-
-

asin

-
asin (class=math #args=1): Inverse trigonometric sine.
-
-
-
-
-

asinh

-
asinh (class=math #args=1): Inverse hyperbolic sine.
-
-
-
-
-

asserting_absent

-
asserting_absent (class=typing #args=1): Returns argument if it is absent in the input data, else
-throws an error.
-
-
-
-
-

asserting_bool

-
asserting_bool (class=typing #args=1): Returns argument if it is present with boolean value, else
-throws an error.
-
-
-
-
-

asserting_boolean

-
asserting_boolean (class=typing #args=1): Returns argument if it is present with boolean value, else
-throws an error.
-
-
-
-
-

asserting_empty

-
asserting_empty (class=typing #args=1): Returns argument if it is present in input with empty value,
-else throws an error.
-
-
-
-
-

asserting_empty_map

-
asserting_empty_map (class=typing #args=1): Returns argument if it is a map with empty value, else
-throws an error.
-
-
-
-
-

asserting_float

-
asserting_float (class=typing #args=1): Returns argument if it is present with float value, else
-throws an error.
-
-
-
-
-

asserting_int

-
asserting_int (class=typing #args=1): Returns argument if it is present with int value, else
-throws an error.
-
-
-
-
-

asserting_map

-
asserting_map (class=typing #args=1): Returns argument if it is a map, else throws an error.
-
-
-
-
-

asserting_nonempty_map

-
asserting_nonempty_map (class=typing #args=1): Returns argument if it is a non-empty map, else throws
-an error.
-
-
-
-
-

asserting_not_empty

-
asserting_not_empty (class=typing #args=1): Returns argument if it is present in input with non-empty
-value, else throws an error.
-
-
-
-
-

asserting_not_map

-
asserting_not_map (class=typing #args=1): Returns argument if it is not a map, else throws an error.
-
-
-
-
-

asserting_not_null

-
asserting_not_null (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent),
-else throws an error.
-
-
-
-
-

asserting_null

-
asserting_null (class=typing #args=1): Returns argument if it is null (empty or absent), else throws
-an error.
-
-
-
-
-

asserting_numeric

-
asserting_numeric (class=typing #args=1): Returns argument if it is present with int or float value,
-else throws an error.
-
-
-
-
-

asserting_present

-
asserting_present (class=typing #args=1): Returns argument if it is present in input, else throws
-an error.
-
-
-
-
-

asserting_string

-
asserting_string (class=typing #args=1): Returns argument if it is present with string (including
-empty-string) value, else throws an error.
-
-
-
-
-

atan

-
atan (class=math #args=1): One-argument arctangent.
-
-
-
-
-

atan2

-
atan2 (class=math #args=2): Two-argument arctangent.
-
-
-
-
-

atanh

-
atanh (class=math #args=1): Inverse hyperbolic tangent.
-
-
-
-
-

bitcount

-
bitcount (class=arithmetic #args=1): Count of 1-bits
-
-
-
-
-

boolean

-
boolean (class=conversion #args=1): Convert int/float/bool/string to boolean.
-
-
-
-
-

capitalize

-
capitalize (class=string #args=1): Convert string's first character to uppercase.
-
-
-
-
-

cbrt

-
cbrt (class=math #args=1): Cube root.
-
-
-
-
-

ceil

-
ceil (class=math #args=1): Ceiling: nearest integer at or above.
-
-
-
-
-

clean_whitespace

-
clean_whitespace (class=string #args=1): Same as collapse_whitespace and strip.
-
-
-
-
-

collapse_whitespace

-
collapse_whitespace (class=string #args=1): Strip repeated whitespace from string.
-
-
-
-
-

cos

-
cos (class=math #args=1): Trigonometric cosine.
-
-
-
-
-

cosh

-
cosh (class=math #args=1): Hyperbolic cosine.
-
-
-
-
-

depth

-
depth (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0.
-
-
-
-
-

dhms2fsec

-
dhms2fsec (class=time #args=1): Recovers floating-point seconds as in
-dhms2fsec("5d18h53m20.250000s") = 500000.250000
-
-
-
-
-

dhms2sec

-
dhms2sec (class=time #args=1): Recovers integer seconds as in
-dhms2sec("5d18h53m20s") = 500000
-
-
-
-
-

erf

-
erf (class=math #args=1): Error function.
-
-
-
-
-

erfc

-
erfc (class=math #args=1): Complementary error function.
-
-
-
-
-

exp

-
exp (class=math #args=1): Exponential function e**x.
-
-
-
-
-

expm1

-
expm1 (class=math #args=1): e**x - 1.
-
-
-
-
-

float

-
float (class=conversion #args=1): Convert int/float/bool/string to float.
-
-
-
-
-

floor

-
floor (class=math #args=1): Floor: nearest integer at or below.
-
-
-
-
-

fmtnum

-
fmtnum (class=conversion #args=2): Convert int/float/bool to string using
-printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers
-are all long long or double. If you use formats like %d or %f, behavior is undefined.
-
-
-
-
-

fsec2dhms

-
fsec2dhms (class=time #args=1): Formats floating-point seconds as in
-fsec2dhms(500000.25) = "5d18h53m20.250000s"
-
-
-
-
-

fsec2hms

-
fsec2hms (class=time #args=1): Formats floating-point seconds as in
-fsec2hms(5000.25) = "01:23:20.250000"
-
-
-
-
-

gmt2sec

-
gmt2sec (class=time #args=1): Parses GMT timestamp as integer seconds since
-the epoch.
-
-
-
-
-

gsub

-
gsub (class=string #args=3): Example: '$name=gsub($name, "old", "new")'
-(replace all).
-
-
-
-
-

haskey

-
haskey (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or
-'haskey(mymap, mykey)'. Error if 1st argument is not a map.
-
-
-
-
-

hexfmt

-
hexfmt (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff".
-
-
-
-
-

hms2fsec

-
hms2fsec (class=time #args=1): Recovers floating-point seconds as in
-hms2fsec("01:23:20.250000") = 5000.250000
-
-
-
-
-

hms2sec

-
hms2sec (class=time #args=1): Recovers integer seconds as in
-hms2sec("01:23:20") = 5000
-
-
-
-
-

int

-
int (class=conversion #args=1): Convert int/float/bool/string to int.
-
-
-
-
-

invqnorm

-
invqnorm (class=math #args=1): Inverse of normal cumulative distribution
-function. Note that invqorm(urand()) is normally distributed.
-
-
-
-
-

is_absent

-
is_absent (class=typing #args=1): False if field is present in input, true otherwise
-
-
-
-
-

is_bool

-
is_bool (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean.
-
-
-
-
-

is_boolean

-
is_boolean (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool.
-
-
-
-
-

is_empty

-
is_empty (class=typing #args=1): True if field is present in input with empty string value, false otherwise.
-
-
-
-
-

is_empty_map

-
is_empty_map (class=typing #args=1): True if argument is a map which is empty.
-
-
-
-
-

is_float

-
is_float (class=typing #args=1): True if field is present with value inferred to be float
-
-
-
-
-

is_int

-
is_int (class=typing #args=1): True if field is present with value inferred to be int
-
-
-
-
-

is_map

-
is_map (class=typing #args=1): True if argument is a map.
-
-
-
-
-

is_nonempty_map

-
is_nonempty_map (class=typing #args=1): True if argument is a map which is non-empty.
-
-
-
-
-

is_not_empty

-
is_not_empty (class=typing #args=1): False if field is present in input with empty value, true otherwise
-
-
-
-
-

is_not_map

-
is_not_map (class=typing #args=1): True if argument is not a map.
-
-
-
-
-

is_not_null

-
is_not_null (class=typing #args=1): False if argument is null (empty or absent), true otherwise.
-
-
-
-
-

is_null

-
is_null (class=typing #args=1): True if argument is null (empty or absent), false otherwise.
-
-
-
-
-

is_numeric

-
is_numeric (class=typing #args=1): True if field is present with value inferred to be int or float
-
-
-
-
-

is_present

-
is_present (class=typing #args=1): True if field is present in input, false otherwise.
-
-
-
-
-

is_string

-
is_string (class=typing #args=1): True if field is present with string (including empty-string) value
-
-
-
-
-

joink

-
joink (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'.
-
-
-
-
-

joinkv

-
joinkv (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")'
-
-
-
-
-

joinv

-
joinv (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'.
-
-
-
-
-

leafcount

-
leafcount (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps,
-same as length.
-
-
-
-
-

length

-
length (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1.
-
-
-
-
-

localtime2sec

-
localtime2sec (class=time #args=1): Parses local timestamp as integer seconds since
-the epoch. Consults $TZ environment variable.
-
-
-
-
-

log

-
log (class=math #args=1): Natural (base-e) logarithm.
-
-
-
-
-

log10

-
log10 (class=math #args=1): Base-10 logarithm.
-
-
-
-
-

log1p

-
log1p (class=math #args=1): log(1-x).
-
-
-
-
-

logifit

-
logifit (class=math #args=3): Given m and b from logistic regression, compute
-fit: $yhat=logifit($x,$m,$b).
-
-
-
-
-

lstrip

-
lstrip (class=string #args=1): Strip leading whitespace from string.
-
-
-
-
-

madd

-
madd (class=math #args=3): a + b mod m (integers)
-
-
-
-
-

mapdiff

-
mapdiff (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg.
-With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed.
-
-
-
-
-

mapexcept

-
mapexcept (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset.
-E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'.
-
-
-
-
-

mapselect

-
mapselect (class=maps variadic): Returns a map with only keys from remaining arguments set.
-E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'.
-
-
-
-
-

mapsum

-
mapsum (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with
-key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'.
-
-
-
-
-

max

-
max (class=math variadic): max of n numbers; null loses
-
-
-
-
-

mexp

-
mexp (class=math #args=3): a ** b mod m (integers)
-
-
-
-
-

min

-
min (class=math variadic): Min of n numbers; null loses
-
-
-
-
-

mmul

-
mmul (class=math #args=3): a * b mod m (integers)
-
-
-
-
-

msub

-
msub (class=math #args=3): a - b mod m (integers)
-
-
-
-
-

pow

-
pow (class=math #args=2): Exponentiation; same as **.
-
-
-
-
-

qnorm

-
qnorm (class=math #args=1): Normal cumulative distribution function.
-
-
-
-
-

regextract

-
regextract (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")'
-.
-
-
-
-
-

regextract_or_else

-
regextract_or_else (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")'
-.
-
-
-
-
-

round

-
round (class=math #args=1): Round to nearest integer.
-
-
-
-
-

roundm

-
roundm (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is
-the same as round($x/$m)*$m
-
-
-
-
-

rstrip

-
rstrip (class=string #args=1): Strip trailing whitespace from string.
-
-
-
-
-

sec2dhms

-
sec2dhms (class=time #args=1): Formats integer seconds as in sec2dhms(500000)
-= "5d18h53m20s"
-
-
-
-
-

sec2gmt

-
sec2gmt (class=time #args=1): Formats seconds since epoch (integer part)
-as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z".
-Leaves non-numbers as-is.
-
-sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n
-decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
-Leaves non-numbers as-is.
-
-
-
-
-

sec2gmtdate

-
sec2gmtdate (class=time #args=1): Formats seconds since epoch (integer part)
-as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28".
-Leaves non-numbers as-is.
-
-
-
-
-

sec2hms

-
sec2hms (class=time #args=1): Formats integer seconds as in
-sec2hms(5000) = "01:23:20"
-
-
-
-
-

sec2localdate

-
sec2localdate (class=time #args=1): Formats seconds since epoch (integer part)
-as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28".
-Consults $TZ environment variable. Leaves non-numbers as-is.
-
-
-
-
-

sec2localtime

-
sec2localtime (class=time #args=1): Formats seconds since epoch (integer part)
-as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z".
-Consults $TZ environment variable. Leaves non-numbers as-is.
-
-sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n
-decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
-Consults $TZ environment variable. Leaves non-numbers as-is.
-
-
-
-
-

sgn

-
sgn (class=math #args=1): +1 for positive input, 0 for zero input, -1 for
-negative input.
-
-
-
-
-

sin

-
sin (class=math #args=1): Trigonometric sine.
-
-
-
-
-

sinh

-
sinh (class=math #args=1): Hyperbolic sine.
-
-
-
-
-

splitkv

-
splitkv (class=maps #args=3): Splits string by separators into map with type inference.
-E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'.
-
-
-
-
-

splitkvx

-
splitkvx (class=maps #args=3): Splits string by separators into map without type inference (keys and
-values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives
-'{"a" : "1", "b" : "2", "c" : "3"}'.
-
-
-
-
-

splitnv

-
splitnv (class=maps #args=2): Splits string by separator into integer-indexed map with type inference.
-E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'.
-
-
-
-
-

splitnvx

-
splitnvx (class=maps #args=2): Splits string by separator into integer-indexed map without type
-inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'.
-
-
-
-
-

sqrt

-
sqrt (class=math #args=1): Square root.
-
-
-
-
-

ssub

-
ssub (class=string #args=3): Like sub but does no regexing. No characters are special.
-
-
-
-
-

strftime

-
strftime (class=time #args=2): Formats seconds since the epoch as timestamp, e.g.
-strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and
-strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z".
-Format strings are as in the C library (please see "man strftime" on your system),
-with the Miller-specific addition of "%1S" through "%9S" which format the seconds
-with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.)
-See also strftime_local.
-
-
-
-
-

strftime_local

-
strftime_local (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone.
-
-
-
-
-

string

-
string (class=conversion #args=1): Convert int/float/bool/string to string.
-
-
-
-
-

strip

-
strip (class=string #args=1): Strip leading and trailing whitespace from string.
-
-
-
-
-

strlen

-
strlen (class=string #args=1): String length.
-
-
-
-
-

strptime

-
strptime (class=time #args=2): Parses timestamp as floating-point seconds since the epoch,
-e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000,
-and  strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000.
-See also strptime_local.
-
-
-
-
-

strptime_local

-
strptime_local (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone.
-
-
-
-
-

sub

-
sub (class=string #args=3): Example: '$name=sub($name, "old", "new")'
-(replace once).
-
-
-
-
-

substr

-
substr (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n
-inclusive. Negative indices -len .. -1 alias to 0 .. len-1.
-
-
-
-
-

system

-
system (class=string #args=1): Run command string, yielding its stdout minus final carriage return.
-
-
-
-
-

systime

-
systime (class=time #args=0): Floating-point seconds since the epoch,
-e.g. 1440768801.748936.
-
-
-
-
-

tan

-
tan (class=math #args=1): Trigonometric tangent.
-
-
-
-
-

tanh

-
tanh (class=math #args=1): Hyperbolic tangent.
-
-
-
-
-

tolower

-
tolower (class=string #args=1): Convert string to lowercase.
-
-
-
-
-

toupper

-
toupper (class=string #args=1): Convert string to uppercase.
-
-
-
-
-

truncate

-
truncate (class=string #args=2): Truncates string first argument to max length of int second argument.
-
-
-
-
-

typeof

-
typeof (class=conversion #args=1): Convert argument to type of argument (e.g.
-MT_STRING). For debug.
-
-
-
-
-

urand

-
urand (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval.
-Int-valued example: '$n=floor(20+urand()*11)'.
-
-
-
-
-

urand32

-
urand32 (class=math #args=0): Integer uniformly distributed 0 and 2**32-1
-inclusive.
-
-
-
-
-

urandint

-
urandint (class=math #args=2): Integer uniformly distributed between inclusive
-integer endpoints.
-
-
-
-
-

urandrange

-
urandrange (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b).
-
-
-
-
-
-

User-defined functions and subroutines

-

As of Miller 5.0.0 you can define your own functions, as well as subroutines.

-
-

User-defined functions

-

Here’s the obligatory example of a recursive function to compute the factorial function:

-
$ mlr --opprint --from data/small put '
-    func f(n) {
-        if (is_numeric(n)) {
-            if (n > 0) {
-                return n * f(n-1);
-            } else {
-                return 1;
-            }
-        }
-        # implicitly return absent-null if non-numeric
-    }
-    $ox = f($x + NR);
-    $oi = f($i);
-'
-a   b   i x                   y                   ox         oi
-pan pan 1 0.3467901443380824  0.7268028627434533  0.467054   1
-eks pan 2 0.7586799647899636  0.5221511083334797  3.680838   2
-wye wye 3 0.20460330576630303 0.33831852551664776 1.741251   6
-eks wye 4 0.38139939387114097 0.13418874328430463 18.588349  24
-wye pan 5 0.5732889198020006  0.8636244699032729  211.387310 120
-
-
-

Properties of user-defined functions:

-
    -
  • Function bodies start with func and a parameter list, defined outside of begin, end, or other func or subr blocks. (I.e. the Miller DSL has no nested functions.)

  • -
  • A function (uniqified by its name) may not be redefined: either by redefining a user-defined function, or by redefining a built-in function. However, functions and subroutines have separate namespaces: you can define a subroutine log which does not clash with the mathematical log function.

  • -
  • Functions may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, functions may be either recursive or mutually recursive. Functions may not call subroutines.

  • -
  • Functions may be defined and called either within mlr put or mlr put.

  • -
  • Functions have read access to $-variables and @-variables but may not modify them. See also Memoization with out-of-stream variables for an example.

  • -
  • Argument values may be reassigned: they are not read-only.

  • -
  • When a return value is not implicitly returned, this results in a return value of absent-null. (In the example above, if there were records for which the argument to f is non-numeric, the assignments would be skipped.) See also the section on Null data: empty and absent.

  • -
  • See the section on Local variables for information on scope and extent of arguments, as well as for information on the use of local variables within functions.

  • -
  • See the section on Expressions from files for information on the use of -f and -e flags.

  • -
-
-
-

User-defined subroutines

-

Example:

-
$ mlr --opprint --from data/small put -q '
-  begin {
-    @call_count = 0;
-  }
-  subr s(n) {
-    @call_count += 1;
-    if (is_numeric(n)) {
-      if (n > 1) {
-        call s(n-1);
-      } else {
-        print "numcalls=" . @call_count;
-      }
-    }
-  }
-  print "NR=" . NR;
-  call s(NR);
-'
-NR=1
-numcalls=1
-NR=2
-numcalls=3
-NR=3
-numcalls=6
-NR=4
-numcalls=10
-NR=5
-numcalls=15
-
-
-

Properties of user-defined subroutines:

-
    -
  • Subroutine bodies start with subr and a parameter list, defined outside of begin, end, or other func or subr blocks. (I.e. the Miller DSL has no nested subroutines.)

  • -
  • A subroutine (uniqified by its name) may not be redefined. However, functions and subroutines have separate namespaces: you can define a subroutine log which does not clash with the mathematical log function.

  • -
  • Subroutines may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, subroutines may be either recursive or mutually recursive. Subroutines may call functions.

  • -
  • Subroutines may be defined and called either within mlr put or mlr put.

  • -
  • Subroutines have read/write access to $-variables and @-variables.

  • -
  • Argument values may be reassigned: they are not read-only.

  • -
  • See the section on Local variables for information on scope and extent of arguments, as well as for information on the use of local variables within functions.

  • -
  • See the section on Expressions from files for information on the use of -f and -e flags.

  • -
-
-
-
-

Errors and transparency

-

As soon as you have a programming language, you start having the problem What is my code doing, and why? This includes getting syntax errors – which are always annoying – as well as the even more annoying problem of a program which parses without syntax error but doesn’t do what you expect.

-

The syntax error message is cryptic: it says syntax error at `` followed by the next symbol it couldn't parse. This is good, but (as of 5.0.0) it doesn't say things like ``syntax error at line 17, character 22. Here are some common causes of syntax errors:

-
    -
  • Don’t forget ; at end of line, before another statement on the next line.

  • -
  • Miller’s DSL lacks the ++ and -- operators.

  • -
  • Curly braces are required for the bodies of if/while/for blocks, even when the body is a single statement.

  • -
-

Now for transparency:

-
    -
  • As in any language, you can do (see Print statements) print (or eprint to print to stderr). See also Dump statements and Emit statements.

  • -
  • The -v option to mlr put and mlr filter prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous.

  • -
  • The -T option prints a trace of each statement executed.

  • -
  • The -t and -a options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience.

  • -
  • Please see Type-checking for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller’s important use-cases is being able to say simple things like mlr put '$y = $x + 1' myfile.dat with a minimum of punctuational bric-a-brac – but for programs over a few lines I generally find that the more type-specification, the better.

  • -
-
-
-

A note on the complexity of Miller’s expression language

-

One of Miller’s strengths is its brevity: it’s much quicker – and less error-prone – to type mlr stats1 -a sum -f x,y -g a,b than having to track summation variables as in awk, or using Miller’s out-of-stream variables. And the more language features Miller’s put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the less powerful it begins to seem: because of the other programming-language features it doesn’t have (classes, execptions, and so on).

-

When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the put statements be handled by the implementation language’s own eval: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular – by a wide margin. So Miller is C under the hood with a hand-rolled DSL.

-

I do want to keep focusing on what Miller is good at – concise notation, low latency, and high throughput – and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as awk; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as awk along with optional type-declaration syntax. While I’m excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller’s sweet spot which is speed plus simplicity.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/reference-verbs.html b/docs6/_build/html/reference-verbs.html deleted file mode 100644 index dd9ee8385..000000000 --- a/docs6/_build/html/reference-verbs.html +++ /dev/null @@ -1,3207 +0,0 @@ - - - - - - - - Verbs reference — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Verbs reference

-
-

Overview

-

When you type mlr {something} myfile.dat, the {something} part is called a verb. It specifies how you want to transform your data. (See also Command overview for a breakdown.) The following is an alphabetical list of verbs with their descriptions.

-

The verbs put and filter are special in that they have a rich expression language (domain-specific language, or “DSL”). More information about them can be found at DSL reference.

-

Here’s a comparison of verbs and put/filter DSL expressions:

-

Example:

-
$ mlr stats1 -a sum -f x -g a data/small
-a=pan,x_sum=0.346790
-a=eks,x_sum=1.140079
-a=wye,x_sum=0.777892
-
-
-
    -
  • Verbs are coded in C

  • -
  • They run a bit faster

  • -
  • They take fewer keystrokes

  • -
  • There is less to learn

  • -
  • Their customization is limited to each verb’s options

  • -
-

Example:

-
$ mlr  put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small
-a=pan,x_sum=0.346790
-a=eks,x_sum=1.140079
-a=wye,x_sum=0.777892
-
-
-
    -
  • You get to write your own DSL expressions

  • -
  • They run a bit slower

  • -
  • They take more keystrokes

  • -
  • There is more to learn

  • -
  • They are highly customizable

  • -
-
-
-

altkv

-

Map list of values to alternating key/value pairs.

-
$ mlr altkv -h
-Usage: mlr altkv [no options]
-Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.
-
-
-
$ echo 'a,b,c,d,e,f' | mlr altkv
-a=b,c=d,e=f
-
-
-
$ echo 'a,b,c,d,e,f,g' | mlr altkv
-a=b,c=d,e=f,4=g
-
-
-
-
-

bar

-

Cheesy bar-charting.

-
$ mlr bar -h
-Usage: mlr bar [options]
-Replaces a numeric field with a number of asterisks, allowing for cheesy
-bar plots. These align best with --opprint or --oxtab output format.
-Options:
--f   {a,b,c}      Field names to convert to bars.
--c   {character}  Fill character: default '*'.
--x   {character}  Out-of-bounds character: default '#'.
--b   {character}  Blank character: default '.'.
---lo {lo}         Lower-limit value for min-width bar: default '0.000000'.
---hi {hi}         Upper-limit value for max-width bar: default '100.000000'.
--w   {n}          Bar-field width: default '40'.
---auto            Automatically computes limits, ignoring --lo and --hi.
-                  Holds all records in memory before producing any output.
-
-
-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint bar --lo 0 --hi 1 -f x,y data/small
-a   b   i x                                        y
-pan pan 1 *************........................... *****************************...........
-eks pan 2 ******************************.......... ********************....................
-wye wye 3 ********................................ *************...........................
-eks wye 4 ***************......................... *****...................................
-wye pan 5 **********************.................. **********************************......
-
-
-
$ mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small
-a   b   i x                                        y
-pan pan 1 #....................................... ***************************************#
-eks pan 2 ***************************************# ************************................
-wye wye 3 #....................................... #.......................................
-eks wye 4 #....................................... #.......................................
-wye pan 5 **********************************...... ***************************************#
-
-
-
$ mlr --opprint bar --auto -f x,y data/small
-a   b   i x                                                           y
-pan pan 1 [0.204603]**********..............................[0.75868] [0.134189]********************************........[0.863624]
-eks pan 2 [0.204603]***************************************#[0.75868] [0.134189]*********************...................[0.863624]
-wye wye 3 [0.204603]#.......................................[0.75868] [0.134189]***********.............................[0.863624]
-eks wye 4 [0.204603]************............................[0.75868] [0.134189]#.......................................[0.863624]
-wye pan 5 [0.204603]**************************..............[0.75868] [0.134189]***************************************#[0.863624]
-
-
-
-
-

bootstrap

-
$ mlr bootstrap --help
-Usage: mlr bootstrap [options]
-Emits an n-sample, with replacement, of the input records.
-Options:
--n {number} Number of samples to output. Defaults to number of input records.
-            Must be non-negative.
-See also mlr sample and mlr shuffle.
-
-
-

The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example:

-
$ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
-color  u_mean   u_count
-yellow 0.497129 1413
-red    0.492560 4641
-purple 0.494005 1142
-green  0.504861 1109
-blue   0.517717 1470
-orange 0.490532 303
-
-
-
$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
-color  u_mean   u_count
-yellow 0.500651 1380
-purple 0.501556 1111
-green  0.503272 1068
-red    0.493895 4702
-blue   0.512529 1496
-orange 0.521030 321
-
-
-
$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
-color  u_mean   u_count
-yellow 0.498046 1485
-blue   0.513576 1417
-red    0.492870 4595
-orange 0.507697 307
-green  0.496803 1075
-purple 0.486337 1199
-
-
-
$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
-color  u_mean   u_count
-blue   0.522921 1447
-red    0.490717 4617
-yellow 0.496450 1419
-purple 0.496523 1192
-green  0.507569 1111
-orange 0.468014 292
-
-
-
-
-

cat

-

Most useful for format conversions (see File formats, and concatenating multiple same-schema CSV files to have the same header:

-
$ mlr cat -h
-Usage: mlr cat [options]
-Passes input records directly to output. Most useful for format conversion.
-Options:
--n        Prepend field "n" to each record with record-counter starting at 1
--g {comma-separated field name(s)} When used with -n/-N, writes record-counters
-          keyed by specified field name(s).
--v        Write a low-level record-structure dump to stderr.
--N {name} Prepend field {name} to each record with record-counter starting at 1
-
-
-
$ cat data/a.csv
-a,b,c
-1,2,3
-4,5,6
-
-
-
$ cat data/b.csv
-a,b,c
-7,8,9
-
-
-
$ mlr --csv cat data/a.csv data/b.csv
-a,b,c
-1,2,3
-4,5,6
-7,8,9
-
-
-
$ mlr --icsv --oxtab cat data/a.csv data/b.csv
-a 1
-b 2
-c 3
-
-a 4
-b 5
-c 6
-
-a 7
-b 8
-c 9
-
-
-
$ mlr --csv cat -n data/a.csv data/b.csv
-n,a,b,c
-1,1,2,3
-2,4,5,6
-3,7,8,9
-
-
-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint cat -n -g a data/small
-n a   b   i x                   y
-1 pan pan 1 0.3467901443380824  0.7268028627434533
-1 eks pan 2 0.7586799647899636  0.5221511083334797
-1 wye wye 3 0.20460330576630303 0.33831852551664776
-2 eks wye 4 0.38139939387114097 0.13418874328430463
-2 wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
-
-

check

-
$ mlr check --help
-Usage: mlr check
-Consumes records without printing any output.
-Useful for doing a well-formatted check on input data.
-
-
-
-
-

clean-whitespace

-
$ mlr clean-whitespace --help
-Usage: mlr clean-whitespace [options]
-For each record, for each field in the record, whitespace-cleans the keys and
-values. Whitespace-cleaning entails stripping leading and trailing whitespace,
-and replacing multiple whitespace with singles. For finer-grained control,
-please see the DSL functions lstrip, rstrip, strip, collapse_whitespace,
-and clean_whitespace.
-
-Options:
--k|--keys-only    Do not touch values.
--v|--values-only  Do not touch keys.
-It is an error to specify -k as well as -v -- to clean keys and values,
-leave off -k as well as -v.
-
-
-
$ mlr --icsv --ojson cat data/clean-whitespace.csv
-{ "  Name  ": "  Ann  Simons", " Preference  ": "  blue  " }
-{ "  Name  ": "Bob Wang  ", " Preference  ": " red       " }
-{ "  Name  ": " Carol  Vee", " Preference  ": "    yellow" }
-
-
-
$ mlr --icsv --ojson clean-whitespace -k data/clean-whitespace.csv
-{ "Name": "  Ann  Simons", "Preference": "  blue  " }
-{ "Name": "Bob Wang  ", "Preference": " red       " }
-{ "Name": " Carol  Vee", "Preference": "    yellow" }
-
-
-
$ mlr --icsv --ojson clean-whitespace -v data/clean-whitespace.csv
-{ "  Name  ": "Ann Simons", " Preference  ": "blue" }
-{ "  Name  ": "Bob Wang", " Preference  ": "red" }
-{ "  Name  ": "Carol Vee", " Preference  ": "yellow" }
-
-
-
$ mlr --icsv --ojson clean-whitespace data/clean-whitespace.csv
-{ "Name": "Ann Simons", "Preference": "blue" }
-{ "Name": "Bob Wang", "Preference": "red" }
-{ "Name": "Carol Vee", "Preference": "yellow" }
-
-
-

Function links:

- -
-
-

count

-
$ mlr count --help
-Usage: mlr count [options]
-Prints number of records, optionally grouped by distinct values for specified field names.
-
-Options:
--g {a,b,c}    Field names for distinct count.
--n            Show only the number of distinct values. Not interesting without -g.
--o {name}     Field name for output count. Default "count".
-
-
-
$ mlr count data/medium
-count=10000
-
-
-
$ mlr count -g a data/medium
-a=pan,count=2081
-a=eks,count=1965
-a=wye,count=1966
-a=zee,count=2047
-a=hat,count=1941
-
-
-
$ mlr count -n -g a data/medium
-count=5
-
-
-
$ mlr count -g b data/medium
-b=pan,count=1942
-b=wye,count=2057
-b=zee,count=1943
-b=eks,count=2008
-b=hat,count=2050
-
-
-
$ mlr count -n -g b data/medium
-count=5
-
-
-
$ mlr count -g a,b data/medium
-a=pan,b=pan,count=427
-a=eks,b=pan,count=371
-a=wye,b=wye,count=377
-a=eks,b=wye,count=407
-a=wye,b=pan,count=392
-a=zee,b=pan,count=389
-a=eks,b=zee,count=357
-a=zee,b=wye,count=455
-a=hat,b=wye,count=423
-a=pan,b=wye,count=395
-a=zee,b=eks,count=391
-a=hat,b=zee,count=385
-a=hat,b=eks,count=389
-a=wye,b=hat,count=426
-a=pan,b=eks,count=429
-a=eks,b=eks,count=413
-a=hat,b=hat,count=381
-a=hat,b=pan,count=363
-a=zee,b=zee,count=403
-a=pan,b=hat,count=417
-a=pan,b=zee,count=413
-a=zee,b=hat,count=409
-a=wye,b=zee,count=385
-a=eks,b=hat,count=417
-a=wye,b=eks,count=386
-
-
-
-
-

count-distinct

-
$ mlr count-distinct --help
-Usage: mlr count-distinct [options]
-Prints number of records having distinct values for specified field names.
-Same as uniq -c.
-
-Options:
--f {a,b,c}    Field names for distinct count.
--n            Show only the number of distinct values. Not compatible with -u.
--o {name}     Field name for output count. Default "count".
-              Ignored with -u.
--u            Do unlashed counts for multiple field names. With -f a,b and
-              without -u, computes counts for distinct combinations of a
-              and b field values. With -f a,b and with -u, computes counts
-              for distinct a field values and counts for distinct b field
-              values separately.
-
-
-
$ mlr count-distinct -f a,b then sort -nr count data/medium
-a=zee,b=wye,count=455
-a=pan,b=eks,count=429
-a=pan,b=pan,count=427
-a=wye,b=hat,count=426
-a=hat,b=wye,count=423
-a=pan,b=hat,count=417
-a=eks,b=hat,count=417
-a=eks,b=eks,count=413
-a=pan,b=zee,count=413
-a=zee,b=hat,count=409
-a=eks,b=wye,count=407
-a=zee,b=zee,count=403
-a=pan,b=wye,count=395
-a=wye,b=pan,count=392
-a=zee,b=eks,count=391
-a=zee,b=pan,count=389
-a=hat,b=eks,count=389
-a=wye,b=eks,count=386
-a=hat,b=zee,count=385
-a=wye,b=zee,count=385
-a=hat,b=hat,count=381
-a=wye,b=wye,count=377
-a=eks,b=pan,count=371
-a=hat,b=pan,count=363
-a=eks,b=zee,count=357
-
-
-
$ mlr count-distinct -u -f a,b data/medium
-field=a,value=pan,count=2081
-field=a,value=eks,count=1965
-field=a,value=wye,count=1966
-field=a,value=zee,count=2047
-field=a,value=hat,count=1941
-field=b,value=pan,count=1942
-field=b,value=wye,count=2057
-field=b,value=zee,count=1943
-field=b,value=eks,count=2008
-field=b,value=hat,count=2050
-
-
-
$ mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium
-a=zee,b=wye,someothername=455
-a=pan,b=eks,someothername=429
-a=pan,b=pan,someothername=427
-a=wye,b=hat,someothername=426
-a=hat,b=wye,someothername=423
-a=pan,b=hat,someothername=417
-a=eks,b=hat,someothername=417
-a=eks,b=eks,someothername=413
-a=pan,b=zee,someothername=413
-a=zee,b=hat,someothername=409
-a=eks,b=wye,someothername=407
-a=zee,b=zee,someothername=403
-a=pan,b=wye,someothername=395
-a=wye,b=pan,someothername=392
-a=zee,b=eks,someothername=391
-a=zee,b=pan,someothername=389
-a=hat,b=eks,someothername=389
-a=wye,b=eks,someothername=386
-a=hat,b=zee,someothername=385
-a=wye,b=zee,someothername=385
-a=hat,b=hat,someothername=381
-a=wye,b=wye,someothername=377
-a=eks,b=pan,someothername=371
-a=hat,b=pan,someothername=363
-a=eks,b=zee,someothername=357
-
-
-
$ mlr count-distinct -n -f a,b data/medium
-count=25
-
-
-
-
-

count-similar

-
$ mlr count-similar --help
-Usage: mlr count-similar [options]
-Ingests all records, then emits each record augmented by a count of
-the number of other records having the same group-by field values.
-Options:
--g {d,e,f} Group-by-field names for counts.
--o {name}  Field name for output count. Default "count".
-
-
-
$ mlr --opprint head -n 20 data/medium
-a   b   i  x                   y
-pan pan 1  0.3467901443380824  0.7268028627434533
-eks pan 2  0.7586799647899636  0.5221511083334797
-wye wye 3  0.20460330576630303 0.33831852551664776
-eks wye 4  0.38139939387114097 0.13418874328430463
-wye pan 5  0.5732889198020006  0.8636244699032729
-zee pan 6  0.5271261600918548  0.49322128674835697
-eks zee 7  0.6117840605678454  0.1878849191181694
-zee wye 8  0.5985540091064224  0.976181385699006
-hat wye 9  0.03144187646093577 0.7495507603507059
-pan wye 10 0.5026260055412137  0.9526183602969864
-pan pan 11 0.7930488423451967  0.6505816637259333
-zee pan 12 0.3676141320555616  0.23614420670296965
-eks pan 13 0.4915175580479536  0.7709126592971468
-eks zee 14 0.5207382318405251  0.34141681118811673
-eks pan 15 0.07155556372719507 0.3596137145616235
-pan pan 16 0.5736853980681922  0.7554169353781729
-zee eks 17 0.29081949506712723 0.054478717073354166
-hat zee 18 0.05727869223575699 0.13343527626645157
-zee pan 19 0.43144132839222604 0.8442204830496998
-eks wye 20 0.38245149780530685 0.4730652428100751
-
-
-
$ mlr --opprint head -n 20 then count-similar -g a data/medium
-a   b   i  x                   y                    count
-pan pan 1  0.3467901443380824  0.7268028627434533   4
-pan wye 10 0.5026260055412137  0.9526183602969864   4
-pan pan 11 0.7930488423451967  0.6505816637259333   4
-pan pan 16 0.5736853980681922  0.7554169353781729   4
-eks pan 2  0.7586799647899636  0.5221511083334797   7
-eks wye 4  0.38139939387114097 0.13418874328430463  7
-eks zee 7  0.6117840605678454  0.1878849191181694   7
-eks pan 13 0.4915175580479536  0.7709126592971468   7
-eks zee 14 0.5207382318405251  0.34141681118811673  7
-eks pan 15 0.07155556372719507 0.3596137145616235   7
-eks wye 20 0.38245149780530685 0.4730652428100751   7
-wye wye 3  0.20460330576630303 0.33831852551664776  2
-wye pan 5  0.5732889198020006  0.8636244699032729   2
-zee pan 6  0.5271261600918548  0.49322128674835697  5
-zee wye 8  0.5985540091064224  0.976181385699006    5
-zee pan 12 0.3676141320555616  0.23614420670296965  5
-zee eks 17 0.29081949506712723 0.054478717073354166 5
-zee pan 19 0.43144132839222604 0.8442204830496998   5
-hat wye 9  0.03144187646093577 0.7495507603507059   2
-hat zee 18 0.05727869223575699 0.13343527626645157  2
-
-
-
$ mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium
-a   b   i  x                   y                    count
-eks pan 2  0.7586799647899636  0.5221511083334797   7
-eks wye 4  0.38139939387114097 0.13418874328430463  7
-eks zee 7  0.6117840605678454  0.1878849191181694   7
-eks pan 13 0.4915175580479536  0.7709126592971468   7
-eks zee 14 0.5207382318405251  0.34141681118811673  7
-eks pan 15 0.07155556372719507 0.3596137145616235   7
-eks wye 20 0.38245149780530685 0.4730652428100751   7
-hat wye 9  0.03144187646093577 0.7495507603507059   2
-hat zee 18 0.05727869223575699 0.13343527626645157  2
-pan pan 1  0.3467901443380824  0.7268028627434533   4
-pan wye 10 0.5026260055412137  0.9526183602969864   4
-pan pan 11 0.7930488423451967  0.6505816637259333   4
-pan pan 16 0.5736853980681922  0.7554169353781729   4
-wye wye 3  0.20460330576630303 0.33831852551664776  2
-wye pan 5  0.5732889198020006  0.8636244699032729   2
-zee pan 6  0.5271261600918548  0.49322128674835697  5
-zee wye 8  0.5985540091064224  0.976181385699006    5
-zee pan 12 0.3676141320555616  0.23614420670296965  5
-zee eks 17 0.29081949506712723 0.054478717073354166 5
-zee pan 19 0.43144132839222604 0.8442204830496998   5
-
-
-
-
-

cut

-
$ mlr cut --help
-Usage: mlr cut [options]
-Passes through input records with specified fields included/excluded.
--f {a,b,c}       Field names to include for cut.
--o               Retain fields in the order specified here in the argument list.
-                 Default is to retain them in the order found in the input data.
--x|--complement  Exclude, rather than include, field names specified by -f.
--r               Treat field names as regular expressions. "ab", "a.*b" will
-                 match any field name containing the substring "ab" or matching
-                 "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may
-                 be used. The -o flag is ignored when -r is present.
-Examples:
-  mlr cut -f hostname,status
-  mlr cut -x -f hostname,status
-  mlr cut -r -f '^status$,sda[0-9]'
-  mlr cut -r -f '^status$,"sda[0-9]"'
-  mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive)
-
-
-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint cut -f y,x,i data/small
-i x                   y
-1 0.3467901443380824  0.7268028627434533
-2 0.7586799647899636  0.5221511083334797
-3 0.20460330576630303 0.33831852551664776
-4 0.38139939387114097 0.13418874328430463
-5 0.5732889198020006  0.8636244699032729
-
-
-
$ echo 'a=1,b=2,c=3' | mlr cut -f b,c,a
-a=1,b=2,c=3
-
-
-
$ echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a
-b=2,c=3,a=1
-
-
-
-
-

decimate

-
$ mlr decimate --help
-Usage: mlr decimate [options]
--n {count}    Decimation factor; default 10
--b            Decimate by printing first of every n.
--e            Decimate by printing last of every n (default).
--g {a,b,c}    Optional group-by-field names for decimate counts
-Passes through one of every n records, optionally by category.
-
-
-
-
-

fill-down

-
$ mlr fill-down --help
-Usage: mlr fill-down [options]
-If a given record has a missing value for a given field, fill that from
-the corresponding value from a previous record, if any.
-By default, a 'missing' field either is absent, or has the empty-string value.
-With -a, a field is 'missing' only if it is absent.
-
-Options:
- --all Operate on all fields in the input.
- -a|--only-if-absent If a given record has a missing value for a given field,
-     fill that from the corresponding value from a previous record, if any.
-     By default, a 'missing' field either is absent, or has the empty-string value.
-     With -a, a field is 'missing' only if it is absent.
- -f  Field names for fill-down.
- -h|--help Show this message.
-
-
-
$ cat data/fill-down.csv
-a,b,c
-1,,3
-4,5,6
-7,,9
-
-
-
$ mlr --csv fill-down -f b data/fill-down.csv
-a,b,c
-1,,3
-4,5,6
-7,5,9
-
-
-
$ mlr --csv fill-down -a -f b data/fill-down.csv
-a,b,c
-1,,3
-4,5,6
-7,,9
-
-
-
-
-

filter

-
$ mlr filter --help
-Usage: mlr filter [options] {expression}
-Prints records for which {expression} evaluates to true.
-If there are multiple semicolon-delimited expressions, all of them are
-evaluated and the last one is used as the filter criterion.
-
-Conversion options:
--S: Keeps field values as strings with no type inference to int or float.
--F: Keeps field values as strings or floats with no inference to int.
-All field values are type-inferred to int/float/string unless this behavior is
-suppressed with -S or -F.
-
-Output/formatting options:
---oflatsep {string}: Separator to use when flattening multi-level @-variables
-    to output records for emit. Default ":".
---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
-Any of the output-format command-line flags (see mlr -h). Example: using
-  mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
-the input is CSV, the output is pretty-print tabular, but the tee-file output
-is written in JSON format.
---no-fflush: for emit, tee, print, and dump, don't call fflush() after every
-    record.
-
-Expression-specification options:
--f {filename}: the DSL expression is taken from the specified file rather
-    than from the command line. Outer single quotes wrapping the expression
-    should not be placed in the file. If -f is specified more than once,
-    all input files specified using -f are concatenated to produce the expression.
-    (For example, you can define functions in one file and call them from another.)
--e {expression}: You can use this after -f to add an expression. Example use
-    case: define functions/subroutines in a file you specify with -f, then call
-    them with an expression you specify with -e.
-(If you mix -e and -f then the expressions are evaluated in the order encountered.
-Since the expression pieces are simply concatenated, please be sure to use intervening
-semicolons to separate expressions.)
-
--s name=value: Predefines out-of-stream variable @name to have value "value".
-    Thus mlr filter put -s foo=97 '$column += @foo' is like
-    mlr filter put 'begin {@foo = 97} $column += @foo'.
-    The value part is subject to type-inferencing as specified by -S/-F.
-    May be specified more than once, e.g. -s name1=value1 -s name2=value2.
-    Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE
-
-Tracing options:
--v: Prints the expressions's AST (abstract syntax tree), which gives
-    full transparency on the precedence and associativity rules of
-    Miller's grammar, to stdout.
--a: Prints a low-level stack-allocation trace to stdout.
--t: Prints a low-level parser trace to stderr.
--T: Prints a every statement to stderr as it is executed.
-
-Other options:
--x: Prints records for which {expression} evaluates to false.
-
-Please use a dollar sign for field names and double-quotes for string
-literals. If field names have special characters such as "." then you might
-use braces, e.g. '${field.name}'. Miller built-in variables are
-NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
-variables. The environment-variable name may be an expression, e.g. a field
-value.
-
-Use # to comment to end of line.
-
-Examples:
-  mlr filter 'log10($count) > 4.0'
-  mlr filter 'FNR == 2'         (second record in each file)
-  mlr filter 'urand() < 0.001'  (subsampling)
-  mlr filter '$color != "blue" && $value > 4.2'
-  mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'
-  mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)'
-  mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd'
-  mlr filter '
-    NR == 1 ||
-   #NR == 2 ||
-    NR == 3
-  '
-
-Please see https://miller.readthedocs.io/en/latest/reference.html for more information
-including function list. Or "mlr -f". Please also see "mlr grep" which is
-useful when you don't yet know which field name(s) you're looking for.
-Please see in particular:
-  http://www.johnkerl.org/miller/doc/reference-verbs.html#filter
-
-
-
-

Features which filter shares with put

-

Please see DSL reference for more information about the expression language for mlr filter.

-
-
-
-

format-values

-
$ mlr format-values --help
-Usage: mlr format-values [options]
-Applies format strings to all field values, depending on autodetected type.
-* If a field value is detected to be integer, applies integer format.
-* Else, if a field value is detected to be float, applies float format.
-* Else, applies string format.
-
-Note: this is a low-keystroke way to apply formatting to many fields. To get
-finer control, please see the fmtnum function within the mlr put DSL.
-
-Note: this verb lets you apply arbitrary format strings, which can produce
-undefined behavior and/or program crashes.  See your system's "man printf".
-
-Options:
--i {integer format} Defaults to "%lld".
-                    Examples: "%06lld", "%08llx".
-                    Note that Miller integers are long long so you must use
-                    formats which apply to long long, e.g. with ll in them.
-                    Undefined behavior results otherwise.
--f {float format}   Defaults to "%lf".
-                    Examples: "%8.3lf", "%.6le".
-                    Note that Miller floats are double-precision so you must
-                    use formats which apply to double, e.g. with l[efg] in them.
-                    Undefined behavior results otherwise.
--s {string format}  Defaults to "%s".
-                    Examples: "_%s", "%08s".
-                    Note that you must use formats which apply to string, e.g.
-                    with s in them. Undefined behavior results otherwise.
--n                  Coerce field values autodetected as int to float, and then
-                    apply the float format.
-
-
-
$ mlr --opprint format-values data/small
-a   b   i x        y
-pan pan 1 0.346790 0.726803
-eks pan 2 0.758680 0.522151
-wye wye 3 0.204603 0.338319
-eks wye 4 0.381399 0.134189
-wye pan 5 0.573289 0.863624
-
-
-
$ mlr --opprint format-values -n data/small
-a   b   i        x        y
-pan pan 1.000000 0.346790 0.726803
-eks pan 2.000000 0.758680 0.522151
-wye wye 3.000000 0.204603 0.338319
-eks wye 4.000000 0.381399 0.134189
-wye pan 5.000000 0.573289 0.863624
-
-
-
$ mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small
-a     b     i        x            y
-XpanX XpanX 00000001 3.467901e-01 7.268029e-01
-XeksX XpanX 00000002 7.586800e-01 5.221511e-01
-XwyeX XwyeX 00000003 2.046033e-01 3.383185e-01
-XeksX XwyeX 00000004 3.813994e-01 1.341887e-01
-XwyeX XpanX 00000005 5.732889e-01 8.636245e-01
-
-
-
$ mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small
-a     b     i            x            y
-XpanX XpanX 1.000000e+00 3.467901e-01 7.268029e-01
-XeksX XpanX 2.000000e+00 7.586800e-01 5.221511e-01
-XwyeX XwyeX 3.000000e+00 2.046033e-01 3.383185e-01
-XeksX XwyeX 4.000000e+00 3.813994e-01 1.341887e-01
-XwyeX XpanX 5.000000e+00 5.732889e-01 8.636245e-01
-
-
-
-
-

fraction

-
$ mlr fraction --help
-Usage: mlr fraction [options]
-For each record's value in specified fields, computes the ratio of that
-value to the sum of values in that field over all input records.
-E.g. with input records  x=1  x=2  x=3  and  x=4, emits output records
-x=1,x_fraction=0.1  x=2,x_fraction=0.2  x=3,x_fraction=0.3  and  x=4,x_fraction=0.4
-
-Note: this is internally a two-pass algorithm: on the first pass it retains
-input records and accumulates sums; on the second pass it computes quotients
-and emits output records. This means it produces no output until all input is read.
-
-Options:
--f {a,b,c}    Field name(s) for fraction calculation
--g {d,e,f}    Optional group-by-field name(s) for fraction counts
--p            Produce percents [0..100], not fractions [0..1]. Output field names
-              end with "_percent" rather than "_fraction"
--c            Produce cumulative distributions, i.e. running sums: each output
-              value folds in the sum of the previous for the specified group
-              E.g. with input records  x=1  x=2  x=3  and  x=4, emits output records
-              x=1,x_cumulative_fraction=0.1  x=2,x_cumulative_fraction=0.3
-              x=3,x_cumulative_fraction=0.6  and  x=4,x_cumulative_fraction=1.0
-
-
-

For example, suppose you have the following CSV file:

-
u=female,v=red,n=2458
-u=female,v=green,n=192
-u=female,v=blue,n=337
-u=female,v=purple,n=468
-u=female,v=yellow,n=3
-u=female,v=orange,n=17
-u=male,v=red,n=143
-u=male,v=green,n=227
-u=male,v=blue,n=2034
-u=male,v=purple,n=12
-u=male,v=yellow,n=1192
-u=male,v=orange,n=448
-
-
-

Then we can see what each record’s n contributes to the total n:

-
$ mlr --opprint fraction -f n data/fraction-example.csv
-u      v      n    n_fraction
-female red    2458 0.326384
-female green  192  0.025495
-female blue   337  0.044748
-female purple 468  0.062143
-female yellow 3    0.000398
-female orange 17   0.002257
-male   red    143  0.018988
-male   green  227  0.030142
-male   blue   2034 0.270084
-male   purple 12   0.001593
-male   yellow 1192 0.158279
-male   orange 448  0.059487
-
-
-

Using -g we can split those out by gender, or by color:

-
$ mlr --opprint fraction -f n -g u data/fraction-example.csv
-u      v      n    n_fraction
-female red    2458 0.707338
-female green  192  0.055252
-female blue   337  0.096978
-female purple 468  0.134676
-female yellow 3    0.000863
-female orange 17   0.004892
-male   red    143  0.035256
-male   green  227  0.055966
-male   blue   2034 0.501479
-male   purple 12   0.002959
-male   yellow 1192 0.293886
-male   orange 448  0.110454
-
-
-
$ mlr --opprint fraction -f n -g v data/fraction-example.csv
-u      v      n    n_fraction
-female red    2458 0.945021
-female green  192  0.458234
-female blue   337  0.142134
-female purple 468  0.975000
-female yellow 3    0.002510
-female orange 17   0.036559
-male   red    143  0.054979
-male   green  227  0.541766
-male   blue   2034 0.857866
-male   purple 12   0.025000
-male   yellow 1192 0.997490
-male   orange 448  0.963441
-
-
-

We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females.

-

To convert fractions to percents, you may use -p:

-
$ mlr --opprint fraction -f n -p data/fraction-example.csv
-u      v      n    n_percent
-female red    2458 32.638428
-female green  192  2.549462
-female blue   337  4.474837
-female purple 468  6.214314
-female yellow 3    0.039835
-female orange 17   0.225734
-male   red    143  1.898818
-male   green  227  3.014208
-male   blue   2034 27.008365
-male   purple 12   0.159341
-male   yellow 1192 15.827911
-male   orange 448  5.948745
-
-
-

Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as “running sums”. Here, you can use -c:

-
$ mlr --opprint fraction -f n -p -c data/fraction-example.csv
-u      v      n    n_cumulative_percent
-female red    2458 32.638428
-female green  192  35.187890
-female blue   337  39.662727
-female purple 468  45.877042
-female yellow 3    45.916877
-female orange 17   46.142611
-male   red    143  48.041429
-male   green  227  51.055637
-male   blue   2034 78.064002
-male   purple 12   78.223344
-male   yellow 1192 94.051255
-male   orange 448  100
-
-
-
$ mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv
-u      v      n    n_cumulative_percent
-female red    2458 70.733813
-female green  192  76.258993
-female blue   337  85.956835
-female purple 468  99.424460
-female yellow 3    99.510791
-female orange 17   100
-male   red    143  3.525641
-male   green  227  9.122288
-male   blue   2034 59.270217
-male   purple 12   59.566075
-male   yellow 1192 88.954635
-male   orange 448  100
-
-
-
-
-

grep

-
$ mlr grep -h
-Usage: mlr grep [options] {regular expression}
-Passes through records which match {regex}.
-Options:
--i    Use case-insensitive search.
--v    Invert: pass through records which do not match the regex.
-Note that "mlr filter" is more powerful, but requires you to know field names.
-By contrast, "mlr grep" allows you to regex-match the entire record. It does
-this by formatting each record in memory as DKVP, using command-line-specified
-ORS/OFS/OPS, and matching the resulting line against the regex specified
-here. In particular, the regex is not applied to the input stream: if you
-have CSV with header line "x,y,z" and data line "1,2,3" then the regex will
-be matched, not against either of these lines, but against the DKVP line
-"x=1,y=2,z=3".  Furthermore, not all the options to system grep are supported,
-and this command is intended to be merely a keystroke-saver. To get all the
-features of system grep, you can do
-  "mlr --odkvp ... | grep ... | mlr --idkvp ..."
-
-
-
-
-

group-by

-
$ mlr group-by --help
-Usage: mlr group-by {comma-separated field names}
-Outputs records in batches having identical values at specified field names.
-
-
-

This is similar to sort but with less work. Namely, Miller’s sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear.

-
$ mlr --opprint group-by a data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye wye 3 0.20460330576630303 0.33831852551664776
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint sort -f a data/small
-a   b   i x                   y
-eks pan 2 0.7586799647899636  0.5221511083334797
-eks wye 4 0.38139939387114097 0.13418874328430463
-pan pan 1 0.3467901443380824  0.7268028627434533
-wye wye 3 0.20460330576630303 0.33831852551664776
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-

In this example, since the sort is on field a, the first step is to group together all records having the same value for field a; the second step is to sort the distinct a-field values pan, eks, and wye into eks, pan, and wye; the third step is to print out the record-list for a=eks, then the record-list for a=pan, then the record-list for a=wye. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn’t desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you.

-
-
-

group-like

-
$ mlr group-like --help
-Usage: mlr group-like
-Outputs records in batches having identical field names.
-
-
-

This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in Record-heterogeneity – in particular, in preparation for CSV or pretty-print output.

-
$ mlr cat data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr --opprint group-like data/het.dkvp
-resource             loadsec ok
-/path/to/file        0.45    true
-/path/to/second/file 0.32    true
-/some/other/path     0.97    false
-
-record_count resource
-100          /path/to/file
-150          /path/to/second/file
-
-
-
-
-

having-fields

-
$ mlr having-fields --help
-Usage: mlr having-fields [options]
-Conditionally passes through records depending on each record's field names.
-Options:
-  --at-least      {comma-separated names}
-  --which-are     {comma-separated names}
-  --at-most       {comma-separated names}
-  --all-matching  {regular expression}
-  --any-matching  {regular expression}
-  --none-matching {regular expression}
-Examples:
-  mlr having-fields --which-are amount,status,owner
-  mlr having-fields --any-matching 'sda[0-9]'
-  mlr having-fields --any-matching '"sda[0-9]"'
-  mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive)
-
-
-

Similar to group-like, this retains records with specified schema.

-
$ mlr cat data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr having-fields --at-least resource data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr having-fields --which-are resource,ok,loadsec data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-resource=/path/to/second/file,loadsec=0.32,ok=true
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
- -
-

histogram

-
$ mlr histogram --help
-Usage: mlr histogram [options]
--f {a,b,c}    Value-field names for histogram counts
---lo {lo}     Histogram low value
---hi {hi}     Histogram high value
---nbins {n}   Number of histogram bins
---auto        Automatically computes limits, ignoring --lo and --hi.
-              Holds all values in memory before producing any output.
--o {prefix}   Prefix for output field name. Default: no prefix.
-Just a histogram. Input values < lo or > hi are not counted.
-
-
-

This is just a histogram; there’s not too much to say here. A note about binning, by example: Suppose you use --lo 0.0 --hi 1.0 --nbins 10 -f x. The input numbers less than 0 or greater than 1 aren’t counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has 0.0 &le; x < 0.1, bin 1 has 0.1 &le; x < 0.2, etc., but bin 9 has 0.9 &le; x &le; 1.0.

-
$ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium
-bin_lo   bin_hi   x_count x2_count x3_count
-0.000000 0.100000 1072    3231     4661
-0.100000 0.200000 938     1254     1184
-0.200000 0.300000 1037    988      845
-0.300000 0.400000 988     832      676
-0.400000 0.500000 950     774      576
-0.500000 0.600000 1002    692      476
-0.600000 0.700000 1007    591      438
-0.700000 0.800000 1007    560      420
-0.800000 0.900000 986     571      383
-0.900000 1.000000 1013    507      341
-
-
-
$ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium
-my_bin_lo my_bin_hi my_x_count my_x2_count my_x3_count
-0.000000  0.100000  1072       3231        4661
-0.100000  0.200000  938        1254        1184
-0.200000  0.300000  1037       988         845
-0.300000  0.400000  988        832         676
-0.400000  0.500000  950        774         576
-0.500000  0.600000  1002       692         476
-0.600000  0.700000  1007       591         438
-0.700000  0.800000  1007       560         420
-0.800000  0.900000  986        571         383
-0.900000  1.000000  1013       507         341
-
-
-
-
-

join

-
$ mlr join --help
-Usage: mlr join [options]
-Joins records from specified left file name with records from all file names
-at the end of the Miller argument list.
-Functionality is essentially the same as the system "join" command, but for
-record streams.
-Options:
-  -f {left file name}
-  -j {a,b,c}   Comma-separated join-field names for output
-  -l {a,b,c}   Comma-separated join-field names for left input file;
-               defaults to -j values if omitted.
-  -r {a,b,c}   Comma-separated join-field names for right input file(s);
-               defaults to -j values if omitted.
-  --lp {text}  Additional prefix for non-join output field names from
-               the left file
-  --rp {text}  Additional prefix for non-join output field names from
-               the right file(s)
-  --np         Do not emit paired records
-  --ul         Emit unpaired records from the left file
-  --ur         Emit unpaired records from the right file(s)
-  -s|--sorted-input  Require sorted input: records must be sorted
-               lexically by their join-field names, else not all records will
-               be paired. The only likely use case for this is with a left
-               file which is too big to fit into system memory otherwise.
-  -u           Enable unsorted input. (This is the default even without -u.)
-               In this case, the entire left file will be loaded into memory.
-  --prepipe {command} As in main input options; see mlr --help for details.
-               If you wish to use a prepipe command for the main input as well
-               as here, it must be specified there as well as here.
-File-format options default to those for the right file names on the Miller
-argument list, but may be overridden for the left file as follows. Please see
-the main "mlr --help" for more information on syntax for these arguments:
-  -i {one of csv,dkvp,nidx,pprint,xtab}
-  --irs {record-separator character}
-  --ifs {field-separator character}
-  --ips {pair-separator character}
-  --repifs
-  --repips
-  --implicit-csv-header
-  --no-implicit-csv-header
-For example, if you have 'mlr --csv ... join -l foo ... ' then the left-file format will
-be specified CSV as well unless you override with 'mlr --csv ... join --ijson -l foo' etc.
-Likewise, if you have 'mlr --csv --implicit-csv-header ...' then the join-in file will be
-expected to be headerless as well unless you put '--no-implicit-csv-header' after 'join'.
-Please use "mlr --usage-separator-options" for information on specifying separators.
-Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information
-including examples.
-
-
-

Examples:

-

Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records:

-
$ mlr --icsvlite --opprint cat data/join-left-example.csv
-id  name
-100 alice
-200 bob
-300 carol
-400 david
-500 edgar
-
-
-
$ mlr --icsvlite --opprint cat data/join-right-example.csv
-status  idcode
-present 400
-present 100
-missing 200
-present 100
-present 200
-missing 100
-missing 200
-present 300
-missing 600
-present 400
-present 400
-present 300
-present 100
-missing 400
-present 200
-present 200
-present 200
-present 200
-present 400
-present 300
-
-
-
$ mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
-id  name  status
-400 david present
-100 alice present
-200 bob   missing
-100 alice present
-200 bob   present
-100 alice missing
-200 bob   missing
-300 carol present
-400 david present
-400 david present
-300 carol present
-100 alice present
-400 david missing
-200 bob   present
-200 bob   present
-200 bob   present
-200 bob   present
-400 david present
-300 carol present
-
-
-

Same, but with sorting the input first:

-
$ mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
-id  name  status
-100 alice present
-100 alice present
-100 alice missing
-100 alice present
-200 bob   missing
-200 bob   present
-200 bob   missing
-200 bob   present
-200 bob   present
-200 bob   present
-200 bob   present
-300 carol present
-300 carol present
-300 carol present
-400 david present
-400 david present
-400 david present
-400 david missing
-400 david present
-
-
-

Same, but showing only unpaired records:

-
$ mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
-status  idcode
-missing 600
-
-id  name
-500 edgar
-
-
-

Use prefixing options to disambiguate between otherwise identical non-join field names:

-
$ mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv
-a b c
-1 2 3
-1 4 5
-1 2 3
-1 4 5
-
-
-
$ mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv
-a left_b left_c right_b right_c
-1 2      3      2       3
-1 4      5      2       3
-1 2      3      4       5
-1 4      5      4       5
-
-
-

Use zero join columns:

-
$ mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv
-left_a left_b left_c right_a right_b right_c
-1      2      3      1       2       3
-1      4      5      1       2       3
-1      2      3      1       4       5
-1      4      5      1       4       5
-
-
-
-
-

label

-
$ mlr label --help
-Usage: mlr label {new1,new2,new3,...}
-Given n comma-separated names, renames the first n fields of each record to
-have the respective name. (Fields past the nth are left with their original
-names.) Particularly useful with --inidx or --implicit-csv-header, to give
-useful names to otherwise integer-indexed fields.
-Examples:
-  "echo 'a b c d' | mlr --inidx --odkvp cat"       gives "1=a,2=b,3=c,4=d"
-  "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d"
-
-
-

See also rename.

-

Example: Files such as /etc/passwd, /etc/group, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows:

-
% grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head
-name                  password uid gid gecos                         home_dir           shell
-nobody                *        -2  -2  Unprivileged User             /var/empty         /usr/bin/false
-root                  *        0   0   System Administrator          /var/root          /bin/sh
-daemon                *        1   1   System Services               /var/root          /usr/bin/false
-_uucp                 *        4   4   Unix to Unix Copy Protocol    /var/spool/uucp    /usr/sbin/uucico
-_taskgated            *        13  13  Task Gate Daemon              /var/empty         /usr/bin/false
-_networkd             *        24  24  Network Services              /var/networkd      /usr/bin/false
-_installassistant     *        25  25  Install Assistant             /var/empty         /usr/bin/false
-_lp                   *        26  26  Printing Services             /var/spool/cups    /usr/bin/false
-_postfix              *        27  27  Postfix Mail Server           /var/spool/postfix /usr/bin/false
-
-
-

Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using --implicit-csv-header and label:

-
$ cat data/headerless.csv
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-
$ mlr  --csv --implicit-csv-header cat data/headerless.csv
-1,2,3
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-
$ mlr  --csv --implicit-csv-header label name,age,status data/headerless.csv
-name,age,status
-John,23,present
-Fred,34,present
-Alice,56,missing
-Carol,45,present
-
-
-
$ mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv
-name  age status
-John  23  present
-Fred  34  present
-Alice 56  missing
-Carol 45  present
-
-
-
-
-

least-frequent

-
$ mlr least-frequent -h
-Usage: mlr least-frequent [options]
-Shows the least frequently occurring distinct values for specified field names.
-The first entry is the statistical anti-mode; the remaining are runners-up.
-Options:
--f {one or more comma-separated field names}. Required flag.
--n {count}. Optional flag defaulting to 10.
--b          Suppress counts; show only field values.
--o {name}   Field name for output count. Default "count".
-See also "mlr most-frequent".
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape -n 5
-shape    count
-circle   2591
-triangle 3372
-square   4115
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5
-shape    color  count
-circle   orange 68
-triangle orange 107
-square   orange 128
-circle   green  287
-circle   purple 289
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -o someothername
-shape    color  someothername
-circle   orange 68
-triangle orange 107
-square   orange 128
-circle   green  287
-circle   purple 289
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -b
-shape    color
-circle   orange
-triangle orange
-square   orange
-circle   green
-circle   purple
-
-
-

See also most-frequent.

-
-
-

merge-fields

-
$ mlr merge-fields --help
-Usage: mlr merge-fields [options]
-Computes univariate statistics for each input record, accumulated across
-specified fields.
-Options:
--a {sum,count,...}  Names of accumulators. One or more of:
-  count     Count instances of fields
-  mode      Find most-frequently-occurring values for fields; first-found wins tie
-  antimode  Find least-frequently-occurring values for fields; first-found wins tie
-  sum       Compute sums of specified fields
-  mean      Compute averages (sample means) of specified fields
-  stddev    Compute sample standard deviation of specified fields
-  var       Compute sample variance of specified fields
-  meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
-  skewness  Compute sample skewness of specified fields
-  kurtosis  Compute sample kurtosis of specified fields
-  min       Compute minimum values of specified fields
-  max       Compute maximum values of specified fields
--f {a,b,c}  Value-field names on which to compute statistics. Requires -o.
--r {a,b,c}  Regular expressions for value-field names on which to compute
-            statistics. Requires -o.
--c {a,b,c}  Substrings for collapse mode. All fields which have the same names
-            after removing substrings will be accumulated together. Please see
-            examples below.
--i          Use interpolated percentiles, like R's type=7; default like type=1.
-            Not sensical for string-valued fields.
--o {name}   Output field basename for -f/-r.
--k          Keep the input fields which contributed to the output statistics;
-            the default is to omit them.
--F          Computes integerable things (e.g. count) in floating point.
-
-String-valued data make sense unless arithmetic on them is required,
-e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
-numbers are less than strings.
-
-Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8".
-Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo
-  produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are
-  summed over.
-Example: mlr merge-fields -a sum,count -r in_,out_ -o bar
-  produces "bar_sum=15,bar_count=4" since all four fields are summed over.
-Example: mlr merge-fields -a sum,count -c in_,out_
-  produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1"
-  since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to
-  "b_y", and "b_out_x" collapses to "b_x".
-
-
-

This is like mlr stats1 but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will.

-

Examples:

-
$ mlr --csvlite --opprint cat data/inout.csv
-a_in a_out b_in b_out
-436  490   446  195
-526  320   963  780
-220  888   705  831
-
-
-
$ mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv
-a_min a_max a_sum b_min b_max b_sum
-436   490   926   195   446   641
-320   526   846   780   963   1743
-220   888   1108  705   831   1536
-
-
-
$ mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv
-a_in a_out b_in b_out a_sum b_sum
-436  490   446  195   926   641
-526  320   963  780   846   1743
-220  888   705  831   1108  1536
-
-
-
-
-

most-frequent

-
$ mlr most-frequent -h
-Usage: mlr most-frequent [options]
-Shows the most frequently occurring distinct values for specified field names.
-The first entry is the statistical mode; the remaining are runners-up.
-Options:
--f {one or more comma-separated field names}. Required flag.
--n {count}. Optional flag defaulting to 10.
--b          Suppress counts; show only field values.
--o {name}   Field name for output count. Default "count".
-See also "mlr least-frequent".
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape -n 5
-shape    count
-square   4115
-triangle 3372
-circle   2591
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5
-shape    color  count
-square   red    1874
-triangle red    1560
-circle   red    1207
-square   yellow 589
-square   blue   589
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -o someothername
-shape    color  someothername
-square   red    1874
-triangle red    1560
-circle   red    1207
-square   yellow 589
-square   blue   589
-
-
-
$ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -b
-shape    color
-square   red
-triangle red
-circle   red
-square   yellow
-square   blue
-
-
-

See also least-frequent.

-
-
-

nest

-
$ mlr nest -h
-Usage: mlr nest [options]
-Explodes specified field values into separate fields/records, or reverses this.
-Options:
-  --explode,--implode   One is required.
-  --values,--pairs      One is required.
-  --across-records,--across-fields One is required.
-  -f {field name}       Required.
-  --nested-fs {string}  Defaults to ";". Field separator for nested values.
-  --nested-ps {string}  Defaults to ":". Pair separator for nested key-value pairs.
-  --evar {string}       Shorthand for --explode --values ---across-records --nested-fs {string}
-  --ivar {string}       Shorthand for --implode --values ---across-records --nested-fs {string}
-Please use "mlr --usage-separator-options" for information on specifying separators.
-
-Examples:
-
-  mlr nest --explode --values --across-records -f x
-  with input record "x=a;b;c,y=d" produces output records
-    "x=a,y=d"
-    "x=b,y=d"
-    "x=c,y=d"
-  Use --implode to do the reverse.
-
-  mlr nest --explode --values --across-fields -f x
-  with input record "x=a;b;c,y=d" produces output records
-    "x_1=a,x_2=b,x_3=c,y=d"
-  Use --implode to do the reverse.
-
-  mlr nest --explode --pairs --across-records -f x
-  with input record "x=a:1;b:2;c:3,y=d" produces output records
-    "a=1,y=d"
-    "b=2,y=d"
-    "c=3,y=d"
-
-  mlr nest --explode --pairs --across-fields -f x
-  with input record "x=a:1;b:2;c:3,y=d" produces output records
-    "a=1,b=2,c=3,y=d"
-
-Notes:
-* With --pairs, --implode doesn't make sense since the original field name has
-  been lost.
-* The combination "--implode --values --across-records" is non-streaming:
-  no output records are produced until all input records have been read. In
-  particular, this means it won't work in tail -f contexts. But all other flag
-  combinations result in streaming (tail -f friendly) data processing.
-* It's up to you to ensure that the nested-fs is distinct from your data's IFS:
-  e.g. by default the former is semicolon and the latter is comma.
-See also mlr reshape.
-
-
-
-
-

nothing

-
$ mlr nothing -h
-Usage: mlr nothing
-Drops all input records. Useful for testing, or after tee/print/etc. have
-produced other output.
-
-
-
-
-

put

-
$ mlr put --help
-Usage: mlr put [options] {expression}
-Adds/updates specified field(s). Expressions are semicolon-separated and must
-either be assignments, or evaluate to boolean.  Booleans with following
-statements in curly braces control whether those statements are executed;
-booleans without following curly braces do nothing except side effects (e.g.
-regex-captures into \1, \2, etc.).
-
-Conversion options:
--S: Keeps field values as strings with no type inference to int or float.
--F: Keeps field values as strings or floats with no inference to int.
-All field values are type-inferred to int/float/string unless this behavior is
-suppressed with -S or -F.
-
-Output/formatting options:
---oflatsep {string}: Separator to use when flattening multi-level @-variables
-    to output records for emit. Default ":".
---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
-Any of the output-format command-line flags (see mlr -h). Example: using
-  mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
-the input is CSV, the output is pretty-print tabular, but the tee-file output
-is written in JSON format.
---no-fflush: for emit, tee, print, and dump, don't call fflush() after every
-    record.
-
-Expression-specification options:
--f {filename}: the DSL expression is taken from the specified file rather
-    than from the command line. Outer single quotes wrapping the expression
-    should not be placed in the file. If -f is specified more than once,
-    all input files specified using -f are concatenated to produce the expression.
-    (For example, you can define functions in one file and call them from another.)
--e {expression}: You can use this after -f to add an expression. Example use
-    case: define functions/subroutines in a file you specify with -f, then call
-    them with an expression you specify with -e.
-(If you mix -e and -f then the expressions are evaluated in the order encountered.
-Since the expression pieces are simply concatenated, please be sure to use intervening
-semicolons to separate expressions.)
-
--s name=value: Predefines out-of-stream variable @name to have value "value".
-    Thus mlr put put -s foo=97 '$column += @foo' is like
-    mlr put put 'begin {@foo = 97} $column += @foo'.
-    The value part is subject to type-inferencing as specified by -S/-F.
-    May be specified more than once, e.g. -s name1=value1 -s name2=value2.
-    Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE
-
-Tracing options:
--v: Prints the expressions's AST (abstract syntax tree), which gives
-    full transparency on the precedence and associativity rules of
-    Miller's grammar, to stdout.
--a: Prints a low-level stack-allocation trace to stdout.
--t: Prints a low-level parser trace to stderr.
--T: Prints a every statement to stderr as it is executed.
-
-Other options:
--q: Does not include the modified record in the output stream. Useful for when
-    all desired output is in begin and/or end blocks.
-
-Please use a dollar sign for field names and double-quotes for string
-literals. If field names have special characters such as "." then you might
-use braces, e.g. '${field.name}'. Miller built-in variables are
-NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
-variables. The environment-variable name may be an expression, e.g. a field
-value.
-
-Use # to comment to end of line.
-
-Examples:
-  mlr put '$y = log10($x); $z = sqrt($y)'
-  mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0
-  mlr put '$x>0.0;  $y=log10($x); $z=sqrt($y)'   # does all three statements
-  mlr put '$a =~ "([a-z]+)_([0-9]+);  $b = "left_\1"; $c = "right_\2"'
-  mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }'
-  mlr put '$filename = FILENAME'
-  mlr put '$colored_shape = $color . "_" . $shape'
-  mlr put '$y = cos($theta); $z = atan2($y, $x)'
-  mlr put '$name = sub($name, "http.*com"i, "")'
-  mlr put -q '@sum += $x; end {emit @sum}'
-  mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}'
-  mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}'
-  mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'
-  mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'
-  mlr put '
-    $x = 1;
-   #$y = 2;
-    $z = 3
-  '
-
-Please see also 'mlr -k' for examples using redirected output.
-
-Please see https://miller.readthedocs.io/en/latest/reference.html for more information
-including function list. Or "mlr -f".
-Please see in particular:
-  http://www.johnkerl.org/miller/doc/reference-verbs.html#put
-
-
-
-

Features which put shares with filter

-

Please see the DSL reference for more information about the expression language for mlr put.

-
-
-
-

regularize

-
$ mlr regularize --help
-Usage: mlr regularize
-For records seen earlier in the data stream with same field names in
-a different order, outputs them with field names in the previously
-encountered order.
-Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8
-output as              a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8
-
-
-

This exists since hash-map software in various languages and tools encountered in the wild does not always print similar rows with fields in the same order: mlr regularize helps clean that up.

-

See also reorder.

-
-
-

remove-empty-columns

-
$ mlr remove-empty-columns --help
-Usage: mlr remove-empty-columns
-Omits fields which are empty on every input row. Non-streaming.
-
-
-
$ cat data/remove-empty-columns.csv
-a,b,c,d,e
-1,,3,,5
-2,,4,,5
-3,,5,,7
-
-
-
$ mlr --csv remove-empty-columns data/remove-empty-columns.csv
-a,c,e
-1,3,5
-2,4,5
-3,5,7
-
-
-

Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any.

-
-
-

rename

-
$ mlr rename --help
-Usage: mlr rename [options] {old1,new1,old2,new2,...}
-Renames specified fields.
-Options:
--r         Treat old field  names as regular expressions. "ab", "a.*b"
-           will match any field name containing the substring "ab" or
-           matching "a.*b", respectively; anchors of the form "^ab$",
-           "^a.*b$" may be used. New field names may be plain strings,
-           or may contain capture groups of the form "\1" through
-           "\9". Wrapping the regex in double quotes is optional, but
-           is required if you wish to follow it with 'i' to indicate
-           case-insensitivity.
--g         Do global replacement within each field name rather than
-           first-match replacement.
-Examples:
-mlr rename old_name,new_name'
-mlr rename old_name_1,new_name_1,old_name_2,new_name_2'
-mlr rename -r 'Date_[0-9]+,Date,'  Rename all such fields to be "Date"
-mlr rename -r '"Date_[0-9]+",Date' Same
-mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015
-mlr rename -r '"name"i,Name'       Rename "name", "Name", "NAME", etc. to "Name"
-
-
-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint rename i,INDEX,b,COLUMN2 data/small
-a   COLUMN2 INDEX x                   y
-pan pan     1     0.3467901443380824  0.7268028627434533
-eks pan     2     0.7586799647899636  0.5221511083334797
-wye wye     3     0.20460330576630303 0.33831852551664776
-eks wye     4     0.38139939387114097 0.13418874328430463
-wye pan     5     0.5732889198020006  0.8636244699032729
-
-
-

As discussed in Performance, sed is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example:

-
$ sed 's/y/COLUMN5/g' data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797
-a=wCOLUMN5e,b=wCOLUMN5e,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776
-a=eks,b=wCOLUMN5e,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463
-a=wCOLUMN5e,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729
-
-
-
$ mlr rename y,COLUMN5 data/small
-a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533
-a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797
-a=wye,b=wye,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776
-a=eks,b=wye,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463
-a=wye,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729
-
-
-

See also label.

-
-
-

reorder

-
$ mlr reorder --help
-Usage: mlr reorder [options]
--f {a,b,c} Field names to reorder.
--e         Put specified field names at record end: default is to put
-           them at record start.
--b {x}     Put field names specified with -f before field name specified by {x},
-           if any. If {x} isn't present in a given record, the specified fields
-           will not be moved.
--a {x}     Put field names specified with -f after field name specified by {x},
-           if any. If {x} isn't present in a given record, the specified fields
-           will not be moved.
-Examples:
-mlr reorder    -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3".
-mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2".
-
-
-

This pivots specified field names to the start or end of the record – for -example when you have highly multi-column data and you want to bring a field or -two to the front of line where you can give a quick visual scan.

-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint reorder -f i,b data/small
-i b   a   x                   y
-1 pan pan 0.3467901443380824  0.7268028627434533
-2 pan eks 0.7586799647899636  0.5221511083334797
-3 wye wye 0.20460330576630303 0.33831852551664776
-4 wye eks 0.38139939387114097 0.13418874328430463
-5 pan wye 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint reorder -e -f i,b data/small
-a   x                   y                   i b
-pan 0.3467901443380824  0.7268028627434533  1 pan
-eks 0.7586799647899636  0.5221511083334797  2 pan
-wye 0.20460330576630303 0.33831852551664776 3 wye
-eks 0.38139939387114097 0.13418874328430463 4 wye
-wye 0.5732889198020006  0.8636244699032729  5 pan
-
-
-
-
-

repeat

-
$ mlr repeat --help
-Usage: mlr repeat [options]
-Copies input records to output records multiple times.
-Options must be exactly one of the following:
-  -n {repeat count}  Repeat each input record this many times.
-  -f {field name}    Same, but take the repeat count from the specified
-                     field name of each input record.
-Example:
-  echo x=0 | mlr repeat -n 4 then put '$x=urand()'
-produces:
- x=0.488189
- x=0.484973
- x=0.704983
- x=0.147311
-Example:
-  echo a=1,b=2,c=3 | mlr repeat -f b
-produces:
-  a=1,b=2,c=3
-  a=1,b=2,c=3
-Example:
-  echo a=1,b=2,c=3 | mlr repeat -f c
-produces:
-  a=1,b=2,c=3
-  a=1,b=2,c=3
-  a=1,b=2,c=3
-
-
-

This is useful in at least two ways: one, as a data-generator as in the -above example using urand(); two, for reconstructing individual -samples from data which has been count-aggregated:

-
$ cat data/repeat-example.dat
-color=blue,count=5
-color=red,count=4
-color=green,count=3
-
-
-
$ mlr repeat -f count then cut -x -f count data/repeat-example.dat
-color=blue
-color=blue
-color=blue
-color=blue
-color=blue
-color=red
-color=red
-color=red
-color=red
-color=green
-color=green
-color=green
-
-
-

After expansion with repeat, such data can then be sent on to -stats1 -a mode, or (if the data are numeric) to stats1 -a -p10,p50,p90, etc.

-
-
-

reshape

-
$ mlr reshape --help
-Usage: mlr reshape [options]
-Wide-to-long options:
-  -i {input field names}   -o {key-field name,value-field name}
-  -r {input field regexes} -o {key-field name,value-field name}
-  These pivot/reshape the input data such that the input fields are removed
-  and separate records are emitted for each key/value pair.
-  Note: this works with tail -f and produces output records for each input
-  record seen.
-Long-to-wide options:
-  -s {key-field name,value-field name}
-  These pivot/reshape the input data to undo the wide-to-long operation.
-  Note: this does not work with tail -f; it produces output records only after
-  all input records have been read.
-
-Examples:
-
-  Input file "wide.txt":
-    time       X           Y
-    2009-01-01 0.65473572  2.4520609
-    2009-01-02 -0.89248112 0.2154713
-    2009-01-03 0.98012375  1.3179287
-
-  mlr --pprint reshape -i X,Y -o item,value wide.txt
-    time       item value
-    2009-01-01 X    0.65473572
-    2009-01-01 Y    2.4520609
-    2009-01-02 X    -0.89248112
-    2009-01-02 Y    0.2154713
-    2009-01-03 X    0.98012375
-    2009-01-03 Y    1.3179287
-
-  mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt
-    time       item value
-    2009-01-01 X    0.65473572
-    2009-01-01 Y    2.4520609
-    2009-01-02 X    -0.89248112
-    2009-01-02 Y    0.2154713
-    2009-01-03 X    0.98012375
-    2009-01-03 Y    1.3179287
-
-  Input file "long.txt":
-    time       item value
-    2009-01-01 X    0.65473572
-    2009-01-01 Y    2.4520609
-    2009-01-02 X    -0.89248112
-    2009-01-02 Y    0.2154713
-    2009-01-03 X    0.98012375
-    2009-01-03 Y    1.3179287
-
-  mlr --pprint reshape -s item,value long.txt
-    time       X           Y
-    2009-01-01 0.65473572  2.4520609
-    2009-01-02 -0.89248112 0.2154713
-    2009-01-03 0.98012375  1.3179287
-See also mlr nest.
-
-
-
-
-

sample

-
$ mlr sample --help
-Usage: mlr sample [options]
-Reservoir sampling (subsampling without replacement), optionally by category.
--k {count}    Required: number of records to output, total, or by group if using -g.
--g {a,b,c}    Optional: group-by-field names for samples.
-See also mlr bootstrap and mlr shuffle.
-
-
-

This is reservoir-sampling: select k items from n with -uniform probability and no repeats in the sample. (If n is less than -k, then of course only n samples are produced.) With -g -{field names}, produce a k-sample for each distinct value of the -specified field names.

-
$ mlr --opprint sample -k 4 data/colored-shapes.dkvp
-color  shape    flag i     u                   v                    w                   x
-purple triangle 0    90122 0.9986871176198068  0.3037738877233719   0.5154934457238382  5.365962021016529
-red    circle   0    3139  0.04835898233323954 -0.03964684310055758 0.5263660881848111  5.3758779366493625
-orange triangle 0    67847 0.36746306902109926 0.5161574810505635   0.5176199566173642  3.1748088656576567
-yellow square   1    33576 0.3098376725521097  0.8525628505287842   0.49774122460981685 4.494754378604669
-
-$ mlr --opprint sample -k 4 data/colored-shapes.dkvp
-color  shape  flag i     u                     v                   w                   x
-blue   square 1    16783 0.09974385090654347   0.7243899920872646  0.5353718443278438  4.431057737383438
-orange square 1    93291 0.5944176543007182    0.17744449786454086 0.49262281749172077 3.1548117990710653
-yellow square 1    54436 0.5268161165014636    0.8785588662666121  0.5058773791931063  7.019185838783636
-yellow square 1    55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984  3.526301273728043
-
-$ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp
-color  shape    flag i     u                    v                   w                    x
-yellow triangle 1    11    0.6321695890307647   0.9887207810889004  0.4364983936735774   5.7981881667050565
-yellow square   1    917   0.8547010348386344   0.7356782810796262  0.4531511689924275   5.774541777078352
-red    circle   1    4000  0.05490416175132373  0.07392337815122155 0.49416101516594396  5.355725080701707
-red    square   0    87506 0.6357719216821314   0.6970867759393995  0.4940826462055272   6.351579417310387
-purple triangle 0    14898 0.7800986870203719   0.23998073813992293 0.5014775988383656   3.141006771777843
-purple triangle 0    151   0.032614487569017414 0.7346633365041219  0.7812143304483805   2.6831992610568047
-green  triangle 1    126   0.1513010528347546   0.40346767294704544 0.051213231883952326 5.955109300797182
-green  circle   0    17635 0.029856606049114442 0.4724542934246524  0.49529606749929744  5.239153910272168
-blue   circle   1    1020  0.414263129226617    0.8304946402876182  0.13151094520189244  4.397873687920433
-blue   triangle 0    220   0.441773289968473    0.44597731903759075 0.6329360666849821   4.3064608776550894
-orange square   0    1885  0.8079311983747106   0.8685956833908394  0.3116410800256374   4.390864584500387
-orange triangle 0    1533  0.32904497195507487  0.23168161807490417 0.8722623057355134   5.164071635714438
-
-$ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp
-color  shape    flag i     u                   v                    w                   x
-blue   circle   0    215   0.7803586969333292  0.33146680638888126  0.04289047852629113 5.725365736377487
-blue   circle   1    3616  0.8548431579124808  0.4989623130006362   0.3339426415875795  3.696785877560498
-green  square   0    356   0.7674272008085286  0.341578843118008    0.4570224877870851  4.830320062215299
-green  square   0    152   0.6684429446914862  0.016056003736548696 0.4656148241291592  5.434588759225423
-orange triangle 0    587   0.5175826237797857  0.08989091493635304  0.9011709461770973  4.265854207755811
-orange triangle 0    1533  0.32904497195507487 0.23168161807490417  0.8722623057355134  5.164071635714438
-purple triangle 0    14192 0.5196327866973567  0.7860928603468063   0.4964368415453642  4.899167143824484
-purple triangle 0    65    0.6842806710360729  0.5823723856331258   0.8014053396013747  5.805148213865135
-red    square   1    2431  0.38378504852300466 0.11445015005595527  0.49355539228753786 5.146756570128739
-red    triangle 0    57097 0.43763430414406546 0.3355450325004481   0.5322349637512487  4.144267240289442
-yellow triangle 1    11    0.6321695890307647  0.9887207810889004   0.4364983936735774  5.7981881667050565
-yellow square   1    158   0.41527900739142165 0.7118027080775757   0.4200799665161291  5.33279067554884
-
-
-

Note that no output is produced until all inputs are in. Another way to do -sampling, which works in the streaming case, is mlr filter 'urand() & -0.001' where you tune the 0.001 to meet your needs.

-
-
-

sec2gmt

-
$ mlr sec2gmt -h
-Usage: mlr sec2gmt [options] {comma-separated list of field names}
-Replaces a numeric field representing seconds since the epoch with the
-corresponding GMT timestamp; leaves non-numbers as-is. This is nothing
-more than a keystroke-saver for the sec2gmt function:
-  mlr sec2gmt time1,time2
-is the same as
-  mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'
-Options:
--1 through -9: format the seconds using 1..9 decimal places, respectively.
-
-
-
-
-

sec2gmtdate

-
$ mlr sec2gmtdate -h
-Usage: mlr sec2gmtdate {comma-separated list of field names}
-Replaces a numeric field representing seconds since the epoch with the
-corresponding GMT year-month-day timestamp; leaves non-numbers as-is.
-This is nothing more than a keystroke-saver for the sec2gmtdate function:
-  mlr sec2gmtdate time1,time2
-is the same as
-  mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'
-
-
-
-
-

seqgen

-
$ mlr seqgen -h
-Usage: mlr seqgen [options]
-Produces a sequence of counters.  Discards the input record stream. Produces
-output as specified by the following options:
--f {name} Field name for counters; default "i".
---start {number} Inclusive start value; default "1".
---stop  {number} Inclusive stop value; default "100".
---step  {number} Step value; default "1".
-Start, stop, and/or step may be floating-point. Output is integer if start,
-stop, and step are all integers. Step may be negative. It may not be zero
-unless start == stop.
-
-
-
$ mlr seqgen --stop 10
-i=1
-i=2
-i=3
-i=4
-i=5
-i=6
-i=7
-i=8
-i=9
-i=10
-
-
-
$ mlr seqgen --start 20 --stop 40 --step 4
-i=20
-i=24
-i=28
-i=32
-i=36
-i=40
-
-
-
$ mlr seqgen --start 40 --stop 20 --step -4
-i=40
-i=36
-i=32
-i=28
-i=24
-i=20
-
-
-
-
-

shuffle

-
$ mlr shuffle -h
-Usage: mlr shuffle {no options}
-Outputs records randomly permuted. No output records are produced until
-all input records are read.
-See also mlr bootstrap and mlr sample.
-
-
-
-
-

skip-trivial-records

-
$ mlr skip-trivial-records -h
-Usage: mlr skip-trivial-records [options]
-Passes through all records except:
-* those with zero fields;
-* those for which all fields have empty value.
-
-
-
$ cat data/trivial-records.csv
-a,b,c
-1,2,3
-4,,6
-,,
-,8,9
-
-
-
$ mlr --csv skip-trivial-records data/trivial-records.csv
-a,b,c
-1,2,3
-4,,6
-,8,9
-
-
-
-
-

sort

-
$ mlr sort --help
-Usage: mlr sort {flags}
-Flags:
-  -f  {comma-separated field names}  Lexical ascending
-  -n  {comma-separated field names}  Numerical ascending; nulls sort last
-  -nf {comma-separated field names}  Same as -n
-  -r  {comma-separated field names}  Lexical descending
-  -nr {comma-separated field names}  Numerical descending; nulls sort first
-Sorts records primarily by the first specified field, secondarily by the second
-field, and so on.  (Any records not having all specified sort keys will appear
-at the end of the output, in the order they were encountered, regardless of the
-specified sort order.) The sort is stable: records that compare equal will sort
-in the order they were encountered in the input record stream.
-
-Example:
-  mlr sort -f a,b -nr x,y,z
-which is the same as:
-  mlr sort -f a -f b -nr x -nr y -nr z
-
-
-

Example:

-
$ mlr --opprint sort -f a -nr x data/small
-a   b   i x                   y
-eks pan 2 0.7586799647899636  0.5221511083334797
-eks wye 4 0.38139939387114097 0.13418874328430463
-pan pan 1 0.3467901443380824  0.7268028627434533
-wye pan 5 0.5732889198020006  0.8636244699032729
-wye wye 3 0.20460330576630303 0.33831852551664776
-
-
-

Here’s an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved:

-
$ head -n 10 data/multicountdown.dat
-upsec=0.002,color=green,count=1203
-upsec=0.083,color=red,count=3817
-upsec=0.188,color=red,count=3801
-upsec=0.395,color=blue,count=2697
-upsec=0.526,color=purple,count=953
-upsec=0.671,color=blue,count=2684
-upsec=0.899,color=purple,count=926
-upsec=0.912,color=red,count=3798
-upsec=1.093,color=blue,count=2662
-upsec=1.327,color=purple,count=917
-
-
-

We can group these by thread by sorting on the thread ID (here, -color). Since Miller’s sort is stable, this means that -timestamps within each thread’s log data are still chronological:

-
$ head -n 20 data/multicountdown.dat | mlr --opprint sort -f color
-upsec              color  count
-0.395              blue   2697
-0.671              blue   2684
-1.093              blue   2662
-2.064              blue   2659
-2.2880000000000003 blue   2647
-0.002              green  1203
-1.407              green  1187
-1.448              green  1177
-2.313              green  1161
-0.526              purple 953
-0.899              purple 926
-1.327              purple 917
-1.703              purple 908
-0.083              red    3817
-0.188              red    3801
-0.912              red    3798
-1.416              red    3788
-1.587              red    3782
-1.601              red    3755
-1.832              red    3717
-
-
-

Any records not having all specified sort keys will appear at the end of the output, in the order they -were encountered, regardless of the specified sort order:

-
$ mlr sort -n  x data/sort-missing.dkvp
-x=1
-x=2
-x=4
-a=3
-
-
-
$ mlr sort -nr x data/sort-missing.dkvp
-x=4
-x=2
-x=1
-a=3
-
-
-
-
-

sort-within-records

-
$ mlr sort-within-records -h
-Usage: mlr sort-within-records [no options]
-Outputs records sorted lexically ascending by keys.
-
-
-
$ cat data/sort-within-records.json
-{
-  "a": 1,
-  "b": 2,
-  "c": 3
-}
-{
-  "b": 4,
-  "a": 5,
-  "c": 6
-}
-{
-  "c": 7,
-  "b": 8,
-  "a": 9
-}
-
-
-
$ mlr --ijson --opprint cat data/sort-within-records.json
-a b c
-1 2 3
-
-b a c
-4 5 6
-
-c b a
-7 8 9
-
-
-
$ mlr --json sort-within-records data/sort-within-records.json
-{ "a": 1, "b": 2, "c": 3 }
-{ "a": 5, "b": 4, "c": 6 }
-{ "a": 9, "b": 8, "c": 7 }
-
-
-
$ mlr --ijson --opprint sort-within-records data/sort-within-records.json
-a b c
-1 2 3
-5 4 6
-9 8 7
-
-
-
-
-

stats1

-
$ mlr stats1 --help
-Usage: mlr stats1 [options]
-Computes univariate statistics for one or more given fields, accumulated across
-the input record stream.
-Options:
--a {sum,count,...}  Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or
-                    one or more of:
-   count     Count instances of fields
-   mode      Find most-frequently-occurring values for fields; first-found wins tie
-   antimode  Find least-frequently-occurring values for fields; first-found wins tie
-   sum       Compute sums of specified fields
-   mean      Compute averages (sample means) of specified fields
-   stddev    Compute sample standard deviation of specified fields
-   var       Compute sample variance of specified fields
-   meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
-   skewness  Compute sample skewness of specified fields
-   kurtosis  Compute sample kurtosis of specified fields
-   min       Compute minimum values of specified fields
-   max       Compute maximum values of specified fields
--f {a,b,c}   Value-field names on which to compute statistics
---fr {regex} Regex for value-field names on which to compute statistics
-             (compute statistics on values in all field names matching regex)
---fx {regex} Inverted regex for value-field names on which to compute statistics
-             (compute statistics on values in all field names not matching regex)
--g {d,e,f}   Optional group-by-field names
---gr {regex} Regex for optional group-by-field names
-             (group by values in field names matching regex)
---gx {regex} Inverted regex for optional group-by-field names
-             (group by values in field names not matching regex)
---grfx {regex} Shorthand for --gr {regex} --fx {that same regex}
--i           Use interpolated percentiles, like R's type=7; default like type=1.
-             Not sensical for string-valued fields.
--s           Print iterative stats. Useful in tail -f contexts (in which
-             case please avoid pprint-format output since end of input
-             stream will never be seen).
--F           Computes integerable things (e.g. count) in floating point.
-Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape
-Example: mlr stats1 -a count,mode -f size
-Example: mlr stats1 -a count,mode -f size -g shape
-Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$'
-         This computes count and mode statistics on all field names beginning
-         with a through h, grouped by all field names starting with k.
-Notes:
-* p50 and median are synonymous.
-* min and max output the same results as p0 and p100, respectively, but use
-  less memory.
-* String-valued data make sense unless arithmetic on them is required,
-  e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
-  numbers are less than strings.
-* count and mode allow text input; the rest require numeric input.
-  In particular, 1 and 1.0 are distinct text for count and mode.
-* When there are mode ties, the first-encountered datum wins.
-
-
-

These are simple univariate statistics on one or more number-valued fields -(count and mode apply to non-numeric fields as well), -optionally categorized by one or more other fields.

-
$ mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium
-x_count 10000
-x_sum   4986.019682
-x_min   0.000045
-x_p10   0.093322
-x_p50   0.501159
-x_mean  0.498602
-x_p90   0.900794
-x_max   0.999953
-y_count 10000
-y_sum   5062.057445
-y_min   0.000088
-y_p10   0.102132
-y_p50   0.506021
-y_mean  0.506206
-y_p90   0.905366
-y_max   0.999965
-
-
-
$ mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium
-b   x_mean   y_mean
-eks 0.506361 0.510293
-hat 0.487899 0.513118
-pan 0.497304 0.499599
-wye 0.497593 0.504596
-zee 0.504242 0.502997
-
-
-
$ mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp
-color  u_p50    u_p99    v_p50    v_p99    ur       vr
-yellow 0.501019 0.989046 0.520630 0.987034 1.974069 1.895845
-red    0.485038 0.990054 0.492586 0.994444 2.041189 2.018823
-purple 0.501319 0.988893 0.504571 0.988287 1.972582 1.958668
-green  0.502015 0.990764 0.505359 0.990175 1.973574 1.959350
-blue   0.525226 0.992655 0.485170 0.993873 1.889958 2.048505
-orange 0.483548 0.993635 0.480913 0.989102 2.054884 2.056717
-
-
-
$ mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp
-shape    count
-square   4115
-triangle 3372
-circle   2591
-
-
-
$ mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp
-shape    color_mode
-triangle red
-square   red
-circle   red
-
-
-
-
-

stats2

-
$ mlr stats2 --help
-Usage: mlr stats2 [options]
-Computes bivariate statistics for one or more given field-name pairs,
-accumulated across the input record stream.
--a {linreg-ols,corr,...}  Names of accumulators: one or more of:
-  linreg-pca   Linear regression using principal component analysis
-  linreg-ols   Linear regression using ordinary least squares
-  r2           Quality metric for linreg-ols (linreg-pca emits its own)
-  logireg      Logistic regression
-  corr         Sample correlation
-  cov          Sample covariance
-  covx         Sample-covariance matrix
--f {a,b,c,d}   Value-field name-pairs on which to compute statistics.
-               There must be an even number of names.
--g {e,f,g}     Optional group-by-field names.
--v             Print additional output for linreg-pca.
--s             Print iterative stats. Useful in tail -f contexts (in which
-               case please avoid pprint-format output since end of input
-               stream will never be seen).
---fit          Rather than printing regression parameters, applies them to
-               the input data to compute new fit fields. All input records are
-               held in memory until end of input stream. Has effect only for
-               linreg-ols, linreg-pca, and logireg.
-Only one of -s or --fit may be used.
-Example: mlr stats2 -a linreg-pca -f x,y
-Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape
-Example: mlr stats2 -a corr -f x,y
-
-
-

These are simple bivariate statistics on one or more pairs of number-valued -fields, optionally categorized by one or more fields.

-
$ mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium
-x_y_cov    0.000043
-x_y_corr   0.000504
-y_y_cov    0.084611
-y_y_corr   1.000000
-x2_xy_cov  0.041884
-x2_xy_corr 0.630174
-x2_y2_cov  -0.000310
-x2_y2_corr -0.003425
-
-
-
$ mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium
-a   x_y_ols_m x_y_ols_b x_y_ols_n x_y_r2   y_y_ols_m y_y_ols_b y_y_ols_n y_y_r2   xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_r2
-pan 0.017026  0.500403  2081      0.000287 1.000000  0.000000  2081      1.000000 0.878132    0.119082    2081        0.417498
-eks 0.040780  0.481402  1965      0.001646 1.000000  0.000000  1965      1.000000 0.897873    0.107341    1965        0.455632
-wye -0.039153 0.525510  1966      0.001505 1.000000  0.000000  1966      1.000000 0.853832    0.126745    1966        0.389917
-zee 0.002781  0.504307  2047      0.000008 1.000000  0.000000  2047      1.000000 0.852444    0.124017    2047        0.393566
-hat -0.018621 0.517901  1941      0.000352 1.000000  0.000000  1941      1.000000 0.841230    0.135573    1941        0.368794
-
-
-

Here’s an example simple line-fit. The x and y -fields of the data/medium dataset are just independent uniformly -distributed on the unit interval. Here we remove half the data and fit a line to it.

-
# Prepare input data:
-mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares
-
-# Do a linear regression and examine coefficients:
-mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares
-x_y_pca_m=1.014419
-x_y_pca_b=0.000308
-x_y_pca_quality=0.861354
-
-# Option 1 to apply the regression coefficients and produce a linear fit:
-#   Set x_y_pca_m and x_y_pca_b as shell variables:
-eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares)
-#   In addition to x and y, make a new yfit which is the line fit, then plot
-#   using your favorite tool:
-mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \
-  | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1
-
-# Option 2 to apply the regression coefficients and produce a linear fit: use --fit option
-mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \
-  | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1
-
-
-

I use pgr for plotting; here’s a screenshot.

-_images/linreg-example.jpg -

(Thanks Drew Kunas for a good conversation about PCA!)

-

Here’s an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the count field and accumulated seconds in the upsec field, labeled by the color field:

-
$ head -n 10 data/multicountdown.dat
-upsec=0.002,color=green,count=1203
-upsec=0.083,color=red,count=3817
-upsec=0.188,color=red,count=3801
-upsec=0.395,color=blue,count=2697
-upsec=0.526,color=purple,count=953
-upsec=0.671,color=blue,count=2684
-upsec=0.899,color=purple,count=926
-upsec=0.912,color=red,count=3798
-upsec=1.093,color=blue,count=2662
-upsec=1.327,color=purple,count=917
-
-
-

We can do a linear regression on count remaining as a function of time: with c = m*u+b we want to find the time when the count goes to zero, i.e. u=-b/m.

-
$ mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat
-color                   green
-upsec_count_pca_m       -32.756917
-upsec_count_pca_b       1213.722730
-upsec_count_pca_n       24
-upsec_count_pca_quality 0.999984
-donesec                 37.052410
-
-color                   red
-upsec_count_pca_m       -37.367646
-upsec_count_pca_b       3810.133400
-upsec_count_pca_n       30
-upsec_count_pca_quality 0.999989
-donesec                 101.963431
-
-color                   blue
-upsec_count_pca_m       -29.231212
-upsec_count_pca_b       2698.932820
-upsec_count_pca_n       25
-upsec_count_pca_quality 0.999959
-donesec                 92.330514
-
-color                   purple
-upsec_count_pca_m       -39.030097
-upsec_count_pca_b       979.988341
-upsec_count_pca_n       21
-upsec_count_pca_quality 0.999991
-donesec                 25.108529
-
-
-
-
-

step

-
$ mlr step --help
-Usage: mlr step [options]
-Computes values dependent on the previous record, optionally grouped
-by category.
-
-Options:
--a {delta,rsum,...}   Names of steppers: comma-separated, one or more of:
-  delta    Compute differences in field(s) between successive records
-  shift    Include value(s) in field(s) from previous record, if any
-  from-first Compute differences in field(s) from first record
-  ratio    Compute ratios in field(s) between successive records
-  rsum     Compute running sums of field(s) between successive records
-  counter  Count instances of field(s) between successive records
-  ewma     Exponentially weighted moving average over successive records
--f {a,b,c} Value-field names on which to compute statistics
--g {d,e,f} Optional group-by-field names
--F         Computes integerable things (e.g. counter) in floating point.
--d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no
-           smoothing), near under under 1 is light smoothing, near over 0 is
-           heavy smoothing. Multiple weights may be specified, e.g.
-           "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted
-           is "-d 0.5".
--o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to
-           the -d values. If supplied, the number of -o values must be the same
-           as the number of -d values.
-
-Examples:
-  mlr step -a rsum -f request_size
-  mlr step -a delta -f request_size -g hostname
-  mlr step -a ewma -d 0.1,0.9 -f x,y
-  mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y
-  mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name
-
-Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or
-https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
-for more information on EWMA.
-
-
-

Most Miller commands are record-at-a-time, with the exception of stats1, stats2, and histogram which compute aggregate output. The step command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for running sum.

-
$ mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15
-a   b   i     x                      y                      x_shift                x_delta   x_rsum      x_counter
-pan pan 1     0.3467901443380824     0.7268028627434533     -                      0         0.346790    1
-eks pan 2     0.7586799647899636     0.5221511083334797     0.3467901443380824     0.411890  1.105470    2
-wye wye 3     0.20460330576630303    0.33831852551664776    0.7586799647899636     -0.554077 1.310073    3
-eks wye 4     0.38139939387114097    0.13418874328430463    0.20460330576630303    0.176796  1.691473    4
-wye pan 5     0.5732889198020006     0.8636244699032729     0.38139939387114097    0.191890  2.264762    5
-zee pan 6     0.5271261600918548     0.49322128674835697    0.5732889198020006     -0.046163 2.791888    6
-eks zee 7     0.6117840605678454     0.1878849191181694     0.5271261600918548     0.084658  3.403672    7
-zee wye 8     0.5985540091064224     0.976181385699006      0.6117840605678454     -0.013230 4.002226    8
-hat wye 9     0.03144187646093577    0.7495507603507059     0.5985540091064224     -0.567112 4.033668    9
-pan wye 10    0.5026260055412137     0.9526183602969864     0.03144187646093577    0.471184  4.536294    10
-pan pan 11    0.7930488423451967     0.6505816637259333     0.5026260055412137     0.290423  5.329343    11
-zee pan 12    0.3676141320555616     0.23614420670296965    0.7930488423451967     -0.425435 5.696957    12
-eks pan 13    0.4915175580479536     0.7709126592971468     0.3676141320555616     0.123903  6.188474    13
-eks zee 14    0.5207382318405251     0.34141681118811673    0.4915175580479536     0.029221  6.709213    14
-
-
-
$ mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15
-a   b   i     x                      y                      x_shift                x_delta   x_rsum      x_counter
-pan pan 1     0.3467901443380824     0.7268028627434533     -                      0         0.346790    1
-eks pan 2     0.7586799647899636     0.5221511083334797     -                      0         0.758680    1
-wye wye 3     0.20460330576630303    0.33831852551664776    -                      0         0.204603    1
-eks wye 4     0.38139939387114097    0.13418874328430463    0.7586799647899636     -0.377281 1.140079    2
-wye pan 5     0.5732889198020006     0.8636244699032729     0.20460330576630303    0.368686  0.777892    2
-zee pan 6     0.5271261600918548     0.49322128674835697    -                      0         0.527126    1
-eks zee 7     0.6117840605678454     0.1878849191181694     0.38139939387114097    0.230385  1.751863    3
-zee wye 8     0.5985540091064224     0.976181385699006      0.5271261600918548     0.071428  1.125680    2
-hat wye 9     0.03144187646093577    0.7495507603507059     -                      0         0.031442    1
-pan wye 10    0.5026260055412137     0.9526183602969864     0.3467901443380824     0.155836  0.849416    2
-pan pan 11    0.7930488423451967     0.6505816637259333     0.5026260055412137     0.290423  1.642465    3
-zee pan 12    0.3676141320555616     0.23614420670296965    0.5985540091064224     -0.230940 1.493294    3
-eks pan 13    0.4915175580479536     0.7709126592971468     0.6117840605678454     -0.120267 2.243381    4
-eks zee 14    0.5207382318405251     0.34141681118811673    0.4915175580479536     0.029221  2.764119    5
-
-
-
$ mlr --opprint step -a ewma -f x -d 0.1,0.9 data/medium | head -15
-a   b   i     x                      y                      x_ewma_0.1 x_ewma_0.9
-pan pan 1     0.3467901443380824     0.7268028627434533     0.346790   0.346790
-eks pan 2     0.7586799647899636     0.5221511083334797     0.387979   0.717491
-wye wye 3     0.20460330576630303    0.33831852551664776    0.369642   0.255892
-eks wye 4     0.38139939387114097    0.13418874328430463    0.370817   0.368849
-wye pan 5     0.5732889198020006     0.8636244699032729     0.391064   0.552845
-zee pan 6     0.5271261600918548     0.49322128674835697    0.404671   0.529698
-eks zee 7     0.6117840605678454     0.1878849191181694     0.425382   0.603575
-zee wye 8     0.5985540091064224     0.976181385699006      0.442699   0.599056
-hat wye 9     0.03144187646093577    0.7495507603507059     0.401573   0.088203
-pan wye 10    0.5026260055412137     0.9526183602969864     0.411679   0.461184
-pan pan 11    0.7930488423451967     0.6505816637259333     0.449816   0.759862
-zee pan 12    0.3676141320555616     0.23614420670296965    0.441596   0.406839
-eks pan 13    0.4915175580479536     0.7709126592971468     0.446588   0.483050
-eks zee 14    0.5207382318405251     0.34141681118811673    0.454003   0.516969
-
-
-
$ mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough data/medium | head -15
-a   b   i     x                      y                      x_ewma_smooth x_ewma_rough
-pan pan 1     0.3467901443380824     0.7268028627434533     0.346790      0.346790
-eks pan 2     0.7586799647899636     0.5221511083334797     0.387979      0.717491
-wye wye 3     0.20460330576630303    0.33831852551664776    0.369642      0.255892
-eks wye 4     0.38139939387114097    0.13418874328430463    0.370817      0.368849
-wye pan 5     0.5732889198020006     0.8636244699032729     0.391064      0.552845
-zee pan 6     0.5271261600918548     0.49322128674835697    0.404671      0.529698
-eks zee 7     0.6117840605678454     0.1878849191181694     0.425382      0.603575
-zee wye 8     0.5985540091064224     0.976181385699006      0.442699      0.599056
-hat wye 9     0.03144187646093577    0.7495507603507059     0.401573      0.088203
-pan wye 10    0.5026260055412137     0.9526183602969864     0.411679      0.461184
-pan pan 11    0.7930488423451967     0.6505816637259333     0.449816      0.759862
-zee pan 12    0.3676141320555616     0.23614420670296965    0.441596      0.406839
-eks pan 13    0.4915175580479536     0.7709126592971468     0.446588      0.483050
-eks zee 14    0.5207382318405251     0.34141681118811673    0.454003      0.516969
-
-
-

Example deriving uptime-delta from system uptime:

-
$ each 10 uptime | mlr -p step -a delta -f 11
-...
-20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000
-20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000
-20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000
-20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000
-20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000
-20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000
-20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000
-20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000
-
-
-
-
-

tac

-
$ mlr tac --help
-Usage: mlr tac
-Prints records in reverse order from the order in which they were encountered.
-
-
-

Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced.

-
$ mlr --icsv --opprint cat data/a.csv
-a b c
-1 2 3
-4 5 6
-
-
-
$ mlr --icsv --opprint cat data/b.csv
-a b c
-7 8 9
-
-
-
$ mlr --icsv --opprint tac data/a.csv data/b.csv
-a b c
-7 8 9
-4 5 6
-1 2 3
-
-
-
$ mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv
-a b c filename
-7 8 9 data/b.csv
-4 5 6 data/a.csv
-1 2 3 data/a.csv
-
-
-
-
-

tail

-
$ mlr tail --help
-Usage: mlr tail [options]
--n {count}    Tail count to print; default 10
--g {a,b,c}    Optional group-by-field names for tail counts
-Passes through the last n records, optionally by category.
-
-
-

Prints the last n records in the input stream, optionally by category.

-
$ mlr --opprint tail -n 4 data/colored-shapes.dkvp
-color  shape    flag i     u                    v                   w                   x
-blue   square   1    99974 0.6189062525431605   0.2637962404841453  0.5311465405784674  6.210738209085753
-blue   triangle 0    99976 0.008110504040268474 0.8267274952432482  0.4732962944898885  6.146956761817328
-yellow triangle 0    99990 0.3839424618160777   0.55952913620132    0.5113763011485609  4.307973891915119
-yellow circle   1    99994 0.764950884927175    0.25284227383991364 0.49969878539567425 5.013809741826425
-
-
-
$ mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp
-color  shape    flag i     u                  v                   w                   x
-yellow triangle 0    99990 0.3839424618160777 0.55952913620132    0.5113763011485609  4.307973891915119
-blue   square   1    99974 0.6189062525431605 0.2637962404841453  0.5311465405784674  6.210738209085753
-yellow circle   1    99994 0.764950884927175  0.25284227383991364 0.49969878539567425 5.013809741826425
-
-
-
-
-

tee

-
$ mlr tee --help
-Usage: mlr tee [options] {filename}
-Passes through input records (like mlr cat) but also writes to specified output
-file, using output-format flags from the command line (e.g. --ocsv). See also
-the "tee" keyword within mlr put, which allows data-dependent filenames.
-Options:
--a:          append to existing file, if any, rather than overwriting.
---no-fflush: don't call fflush() after every record.
-Any of the output-format command-line flags (see mlr -h). Example: using
-  mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...
-the input is CSV, the output is pretty-print tabular, but the tee-file output
-is written in JSON format.
-
-
-
-
-

top

-
$ mlr top --help
-Usage: mlr top [options]
--f {a,b,c}    Value-field names for top counts.
--g {d,e,f}    Optional group-by-field names for top counts.
--n {count}    How many records to print per category; default 1.
--a            Print all fields for top-value records; default is
-              to print only value and group-by fields. Requires a single
-              value-field name only.
---min         Print top smallest values; default is top largest values.
--F            Keep top values as floats even if they look like integers.
--o {name}     Field name for output indices. Default "top_idx".
-Prints the n records with smallest/largest values at specified fields,
-optionally by category.
-
-
-

Note that top is distinct from headhead shows fields which appear first in the data stream; top shows fields which are numerically largest (or smallest).

-
$ mlr --opprint top -n 4 -f x data/medium
-top_idx x_top
-1       0.999953
-2       0.999823
-3       0.999733
-4       0.999563
-
-
-
$ mlr --opprint top -n 4 -f x -o someothername data/medium
-someothername x_top
-1             0.999953
-2             0.999823
-3             0.999733
-4             0.999563
-
-
-
$ mlr --opprint top -n 2 -f x -g a then sort -f a data/medium
-a   top_idx x_top
-eks 1       0.998811
-eks 2       0.998534
-hat 1       0.999953
-hat 2       0.999733
-pan 1       0.999403
-pan 2       0.999044
-wye 1       0.999823
-wye 2       0.999264
-zee 1       0.999490
-zee 2       0.999438
-
-
-
-
-

uniq

-
$ mlr uniq --help
-Usage: mlr uniq [options]
-Prints distinct values for specified field names. With -c, same as
-count-distinct. For uniq, -f is a synonym for -g.
-
-Options:
--g {d,e,f}    Group-by-field names for uniq counts.
--c            Show repeat counts in addition to unique values.
--n            Show only the number of distinct values.
--o {name}     Field name for output count. Default "count".
--a            Output each unique record only once. Incompatible with -g.
-              With -c, produces unique records, with repeat counts for each.
-              With -n, produces only one record which is the unique-record count.
-              With neither -c nor -n, produces unique records.
-
-
-

There are two main ways to use mlr uniq: the first way is with -g to specify group-by columns.

-
$ wc -l data/colored-shapes.dkvp
-   10078 data/colored-shapes.dkvp
-
-
-
$ mlr uniq -g color,shape data/colored-shapes.dkvp
-color=yellow,shape=triangle
-color=red,shape=square
-color=red,shape=circle
-color=purple,shape=triangle
-color=yellow,shape=circle
-color=purple,shape=square
-color=yellow,shape=square
-color=red,shape=triangle
-color=green,shape=triangle
-color=green,shape=square
-color=blue,shape=circle
-color=blue,shape=triangle
-color=purple,shape=circle
-color=blue,shape=square
-color=green,shape=circle
-color=orange,shape=triangle
-color=orange,shape=square
-color=orange,shape=circle
-
-
-
$ mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp
-color  shape    count
-blue   circle   384
-blue   square   589
-blue   triangle 497
-green  circle   287
-green  square   454
-green  triangle 368
-orange circle   68
-orange square   128
-orange triangle 107
-purple circle   289
-purple square   481
-purple triangle 372
-red    circle   1207
-red    square   1874
-red    triangle 1560
-yellow circle   356
-yellow square   589
-yellow triangle 468
-
-
-
$ mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp
-color  shape    someothername
-red    square   1874
-red    triangle 1560
-red    circle   1207
-yellow square   589
-blue   square   589
-blue   triangle 497
-purple square   481
-yellow triangle 468
-green  square   454
-blue   circle   384
-purple triangle 372
-green  triangle 368
-yellow circle   356
-purple circle   289
-green  circle   287
-orange square   128
-orange triangle 107
-orange circle   68
-
-
-
$ mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp
-count
-18
-
-
-

The second main way to use mlr uniq is without group-by columns, using -a instead:

-
$ cat data/repeats.dkvp
-color=red,shape=square,flag=0
-color=purple,shape=triangle,flag=0
-color=yellow,shape=circle,flag=1
-color=red,shape=circle,flag=1
-color=red,shape=square,flag=0
-color=yellow,shape=circle,flag=1
-color=red,shape=square,flag=0
-color=red,shape=square,flag=0
-color=yellow,shape=circle,flag=1
-color=red,shape=circle,flag=1
-color=yellow,shape=circle,flag=1
-color=yellow,shape=circle,flag=1
-color=purple,shape=triangle,flag=0
-color=yellow,shape=circle,flag=1
-color=yellow,shape=circle,flag=1
-color=red,shape=circle,flag=1
-color=red,shape=square,flag=0
-color=purple,shape=triangle,flag=0
-color=yellow,shape=circle,flag=1
-color=red,shape=square,flag=0
-color=purple,shape=square,flag=0
-color=red,shape=square,flag=0
-color=red,shape=square,flag=1
-color=red,shape=square,flag=0
-color=red,shape=square,flag=0
-color=purple,shape=triangle,flag=0
-color=red,shape=square,flag=0
-color=purple,shape=triangle,flag=0
-color=red,shape=square,flag=0
-color=red,shape=square,flag=0
-color=purple,shape=square,flag=0
-color=red,shape=square,flag=0
-color=red,shape=square,flag=0
-color=purple,shape=triangle,flag=0
-color=yellow,shape=triangle,flag=1
-color=purple,shape=square,flag=0
-color=yellow,shape=circle,flag=1
-color=purple,shape=triangle,flag=0
-color=red,shape=circle,flag=1
-color=purple,shape=triangle,flag=0
-color=purple,shape=triangle,flag=0
-color=red,shape=square,flag=0
-color=red,shape=circle,flag=1
-color=red,shape=square,flag=1
-color=red,shape=square,flag=0
-color=red,shape=circle,flag=1
-color=purple,shape=square,flag=0
-color=purple,shape=square,flag=0
-color=red,shape=square,flag=1
-color=purple,shape=triangle,flag=0
-color=purple,shape=triangle,flag=0
-color=purple,shape=square,flag=0
-color=yellow,shape=circle,flag=1
-color=red,shape=square,flag=0
-color=yellow,shape=triangle,flag=1
-color=yellow,shape=circle,flag=1
-color=purple,shape=square,flag=0
-
-
-
$ wc -l data/repeats.dkvp
-      57 data/repeats.dkvp
-
-
-
$ mlr --opprint uniq -a data/repeats.dkvp
-color  shape    flag
-red    square   0
-purple triangle 0
-yellow circle   1
-red    circle   1
-purple square   0
-red    square   1
-yellow triangle 1
-
-
-
$ mlr --opprint uniq -a -n data/repeats.dkvp
-count
-7
-
-
-
$ mlr --opprint uniq -a -c data/repeats.dkvp
-count color  shape    flag
-17    red    square   0
-11    purple triangle 0
-11    yellow circle   1
-6     red    circle   1
-7     purple square   0
-3     red    square   1
-2     yellow triangle 1
-
-
-
-
-

unsparsify

-
$ mlr unsparsify --help
-Usage: mlr unsparsify [options]
-Prints records with the union of field names over all input records.
-For field names absent in a given record but present in others, fills in a
-value. Without -f, this verb retains all input before producing any output.
-
-Options:
---fill-with {filler string}  What to fill absent fields with. Defaults to
-                             the empty string.
--f {a,b,c} Specify field names to be operated on. Any other fields won't be
-                             modified, and operation will be streaming.
-
-Example: if the input is two records, one being 'a=1,b=2' and the other
-being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and
-'a=,b=3,c=4'.
-
-
-

Examples:

-
$ cat data/sparse.json
-{"a":1,"b":2,"v":3}
-{"u":1,"b":2}
-{"a":1,"v":2,"x":3}
-{"v":1,"w":2}
-
-
-
$ mlr --json unsparsify data/sparse.json
-{ "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" }
-{ "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" }
-{ "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" }
-{ "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 }
-
-
-
$ mlr --ijson --opprint unsparsify data/sparse.json
-a b v u x w
-1 2 3 - - -
-- 2 - 1 - -
-1 - 2 - 3 -
-- - 1 - - 2
-
-
-
$ mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json
-a       b       v       u       x       w
-1       2       3       missing missing missing
-missing 2       missing 1       missing missing
-1       missing 2       missing 3       missing
-missing missing 1       missing missing 2
-
-
-
$ mlr --ijson --opprint unsparsify -f a,b,u data/sparse.json
-a b v u
-1 2 3 -
-
-u b a
-1 2 -
-
-a v x b u
-1 2 3 - -
-
-v w a b u
-1 2 - - -
-
-
-
$ mlr --ijson --opprint unsparsify -f a,b,u,v,w,x then regularize data/sparse.json
-a b v u w x
-1 2 3 - - -
-- 2 - 1 - -
-1 - 2 - - 3
-- - 1 - 2 -
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/reference.html b/docs6/_build/html/reference.html deleted file mode 100644 index 452feb29d..000000000 --- a/docs6/_build/html/reference.html +++ /dev/null @@ -1,1112 +0,0 @@ - - - - - - - - Main reference — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Main reference

-
-

Command overview

-

Whereas the Unix toolkit is made of the separate executables cat, tail, cut, -sort, etc., Miller has subcommands, or verbs, invoked as follows:

-
mlr tac *.dat
-mlr cut --complement -f os_version *.dat
-mlr sort -f hostname,uptime *.dat
-
-
-

These fall into categories as follows:

- -
-
-

I/O options

-
-

Formats

-

Options:

-
--dkvp    --idkvp    --odkvp
---nidx    --inidx    --onidx
---csv     --icsv     --ocsv
---csvlite --icsvlite --ocsvlite
---pprint  --ipprint  --opprint  --right
---xtab    --ixtab    --oxtab
---json    --ijson    --ojson
-
-
-

These are as discussed in File formats, with the exception of --right which makes pretty-printed output right-aligned:

-
$ mlr --opprint cat data/small
-a   b   i x                   y
-pan pan 1 0.3467901443380824  0.7268028627434533
-eks pan 2 0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5 0.5732889198020006  0.8636244699032729
-
-
-
$ mlr --opprint --right cat data/small
-  a   b i                   x                   y
-pan pan 1  0.3467901443380824  0.7268028627434533
-eks pan 2  0.7586799647899636  0.5221511083334797
-wye wye 3 0.20460330576630303 0.33831852551664776
-eks wye 4 0.38139939387114097 0.13418874328430463
-wye pan 5  0.5732889198020006  0.8636244699032729
-
-
-

Additional notes:

-
    -
  • Use --csv, --pprint, etc. when the input and output formats are the same.

  • -
  • Use --icsv --opprint, etc. when you want format conversion as part of what Miller does to your data.

  • -
  • DKVP (key-value-pair) format is the default for input and output. So, --oxtab is the same as --idkvp --oxtab.

  • -
-

Pro-tip: Please use either –format1, or –iformat1 –oformat2. If you use –format1 –oformat2 then what happens is that flags are set up for input and output for format1, some of which are overwritten for output in format2. For technical reasons, having --oformat2 clobber all the output-related effects of --format1 also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199.

-
-
-

In-place mode

-

Use the mlr -I flag to process files in-place. For example, mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv will remove unwanted_column_name from all your *.csv files in your mydata/ subdirectory.

-

By default, Miller output goes to the screen (or you can redirect a file using > or to another process using |). With -I, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file’s own records; and so on.

-

Please see Choices for printing to files for examples.

-
-
-

Compression

-

Options:

-
--prepipe {command}
-
-
-

The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. mlr --prepipe 'zcat -cf'. Examples:

-
# These two produce the same output:
-$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime
-$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz
-# With multiple input files you need --prepipe:
-$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz
-$ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz
-
-
-
# Similar to the above, but with compressed output as well as input:
-$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz
-$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz
-$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz
-
-
-
# Similar to the above, but with different compression tools for input and output:
-$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz
-$ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz
-$ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz
-
-
-
-
-

Record/field/pair separators

-

Miller has record separators IRS and ORS, field separators IFS and OFS, and pair separators IPS and OPS. For example, in the DKVP line a=1,b=2,c=3, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values.

-

Options:

-
--rs --irs --ors
---fs --ifs --ofs --repifs
---ps --ips --ops
-
-
-
    -
  • You can change a separator from input to output via e.g. --ifs = --ofs :. Or, you can specify that the same separator is to be used for input and output via e.g. --fs :.

  • -
  • The pair separator is only relevant to DKVP format.

  • -
  • Pretty-print and xtab formats ignore the separator arguments altogether.

  • -
  • The --repifs means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. 2,9,,,,,6,5,4. On the other hand, if the field separator is a space, it might be more natural to parse 2 4    5 the same as 2 4 5: --repifs --ifs ' ' lets this happen. In fact, the --ipprint option above is internally implemented in terms of --repifs.

  • -
  • Just write out the desired separator, e.g. --ofs '|'. But you may use the symbolic names newline, space, tab, pipe, or semicolon if you like.

  • -
-
-
-

Number formatting

-

The command-line option --ofmt {format string} is the global number format for commands which generate numeric output, e.g. stats1, stats2, histogram, and step, as well as mlr put. Examples:

-
--ofmt %.9le  --ofmt %.6lf  --ofmt %.0lf
-
-
-

These are just C printf formats applied to double-precision numbers. Please don’t use %s or %d. Additionally, if you use leading width (e.g. %18.12lf) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller’s pretty-print format (mlr --opprint) to column-align numerical data.

-

To apply formatting to a single field, overriding the global ofmt, use fmtnum function within mlr put. For example:

-
$ echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")'
-x=3.1,y=4.3,z=13.330000
-
-
-
$ echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")'
-x=0xffff,y=0xff,z=00feff01
-
-
-

Input conversion from hexadecimal is done automatically on fields handled by mlr put and mlr filter as long as the field value begins with “0x”. To apply output conversion to hexadecimal on a single column, you may use fmtnum, or the keystroke-saving hexfmt function. Example:

-
$ echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)'
-x=0xffff,y=0xff,z=0xfeff01
-
-
-
-
-
-

Data transformations (verbs)

-

Please see the separate page Verbs reference.

-
-
-

Expression language for filter and put

-

Please see the separate page DSL reference.

-
-
-

then-chaining

-

In accord with the Unix philosophy, you can pipe data into or out of Miller. For example:

-
mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime
-
-
-

You can, if you like, instead simply chain commands together using the then keyword:

-
mlr cut --complement -f os_version then sort -f hostname,uptime *.dat
-
-
-

(You can precede the very first verb with then, if you like, for symmetry.)

-

Here’s a performance comparison:

-
% cat piped.sh
-mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null
-
-% time sh piped.sh
-real 0m2.828s
-user 0m3.183s
-sys  0m0.137s
-
-
-% cat chained.sh
-mlr cut -x -f i,y then sort -n y data/big > /dev/null
-
-% time sh chained.sh
-real 0m2.082s
-user 0m1.933s
-sys  0m0.137s
-
-
-

There are two reasons to use then-chaining: one is for performance, although I don’t expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way.

-

The other reason to use then-chaining is for simplicity: you don’t have re-type formatting flags (e.g. --csv --fs tab) at every pipeline stage.

-
-
-

Auxiliary commands

-

There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they’re delivered within the main Miller executable for convenience.

-
$ mlr aux-list
-Available subcommands:
-  aux-list
-  lecat
-  termcvt
-  hex
-  unhex
-  netbsd-strptime
-For more information, please invoke mlr {subcommand} --help
-
-
-
$ mlr lecat --help
-Usage: mlr lecat [options] {zero or more file names}
-Simply echoes input, but flags CR characters in red and LF characters in green.
-If zero file names are supplied, standard input is read.
-Options:
---mono: don't try to colorize the output
--h or --help: print this message
-
-
-
$ mlr termcvt --help
-Usage: mlr termcvt [option] {zero or more file names}
-Option (exactly one is required):
---cr2crlf
---lf2crlf
---crlf2cr
---crlf2lf
---cr2lf
---lf2cr
--I in-place processing (default is to write to stdout)
--h or --help: print this message
-Zero file names means read from standard input.
-Output is always to standard output; files are not written in-place.
-
-
-
$ mlr hex --help
-Usage: mlr hex [options] {zero or more file names}
-Simple hex-dump.
-If zero file names are supplied, standard input is read.
-Options:
--r: print only raw hex without leading offset indicators or trailing ASCII dump.
--h or --help: print this message
-
-
-
$ mlr unhex --help
-Usage: mlr unhex [option] {zero or more file names}
-Options:
--h or --help: print this message
-Zero file names means read from standard input.
-Output is always to standard output; files are not written in-place.
-
-
-

Examples:

-
$ echo 'Hello, world!' | mlr lecat --mono
-Hello, world![LF]
-
-
-
$ echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono
-Hello, world![CR][LF]
-
-
-
$ mlr hex data/budget.csv
-00000000: 23 20 41 73  61 6e 61 20  2d 2d 20 68  65 72 65 20 |# Asana -- here |
-00000010: 61 72 65 20  74 68 65 20  62 75 64 67  65 74 20 66 |are the budget f|
-00000020: 69 67 75 72  65 73 20 79  6f 75 20 61  73 6b 65 64 |igures you asked|
-00000030: 20 66 6f 72  21 0a 74 79  70 65 2c 71  75 61 6e 74 | for!.type,quant|
-00000040: 69 74 79 0a  70 75 72 70  6c 65 2c 34  35 36 2e 37 |ity.purple,456.7|
-00000050: 38 0a 67 72  65 65 6e 2c  36 37 38 2e  31 32 0a 6f |8.green,678.12.o|
-00000060: 72 61 6e 67  65 2c 31 32  33 2e 34 35  0a          |range,123.45.|
-
-
-
$ mlr hex -r data/budget.csv
-23 20 41 73  61 6e 61 20  2d 2d 20 68  65 72 65 20
-61 72 65 20  74 68 65 20  62 75 64 67  65 74 20 66
-69 67 75 72  65 73 20 79  6f 75 20 61  73 6b 65 64
-20 66 6f 72  21 0a 74 79  70 65 2c 71  75 61 6e 74
-69 74 79 0a  70 75 72 70  6c 65 2c 34  35 36 2e 37
-38 0a 67 72  65 65 6e 2c  36 37 38 2e  31 32 0a 6f
-72 61 6e 67  65 2c 31 32  33 2e 34 35  0a
-
-
-
$ mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex
-#*Asana*--*here*are*the*budget*figures*you*asked*for!
-type,quantity
-purple,456.78
-green,678.12
-orange,123.45
-
-
-
-
-

Data types

-

Miller’s input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like “3”; field values are usually strings. Field values’ ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations.

-

Field values are treated as numeric for the following:

-
    -
  • Numeric sort: mlr sort -n, mlr sort -nr.

  • -
  • Statistics: mlr histogram, mlr stats1, mlr stats2.

  • -
  • Cross-record arithmetic: mlr step.

  • -
-

For mlr put and mlr filter:

-
    -
  • Miller’s types for function processing are empty-null (empty string), absent-null (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), error, string, float (double-precision), int (64-bit signed), and boolean.

  • -
  • On input, string values representable as numbers, e.g. “3” or “3.1”, are treated as int or float, respectively. If a record has x=1,y=2 then mlr put '$z=$x+$y' will produce x=1,y=2,z=3, and mlr put '$z=$x.$y' does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the string function: mlr put '$z=string($x).string($y)' will produce x=1,y=2,z=12.

  • -
  • On input, string values representable as boolean (e.g. "true", "false") are not automatically treated as boolean. (This is because "true" and "false" are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the boolean function to coerce: e.g. giving the record x=1,y=2,w=false to mlr put '$z=($x<$y) || boolean($w)'.

  • -
  • Functions take types as described in mlr --help-all-functions: for example, log10 takes float input and produces float output, gmt2sec maps string to int, and sec2gmt maps int to string.

  • -
  • All math functions described in mlr --help-all-functions take integer as well as float input.

  • -
-
-
-

Null data: empty and absent

-

One of Miller’s key features is its support for heterogeneous data. For example, take mlr sort: if you try to sort on field hostname when not all records in the data stream have a field named hostname, it is not an error (although you could pre-filter the data stream using mlr having-fields --at-least hostname then sort ...). Rather, records lacking one or more sort keys are simply output contiguously by mlr sort.

-

Miller has two kinds of null data:

-
    -
  • Empty (key present, value empty): a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. x=,y=2 in the data input stream, or assignment $x="" or @x="" in mlr put.

  • -
  • Absent (key not present): a field name is not present, e.g. input record is x=1,y=2 and a put or filter expression refers to $z. Or, reading an out-of-stream variable which hasn’t been assigned a value yet, e.g. mlr put -q '@sum += $x; end{emit @sum}' or mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'.

  • -
-

You can test these programatically using the functions is_empty/is_not_empty, is_absent/is_present, and is_null/is_not_null. For the last pair, note that null means either empty or absent.

-

Rules for null-handling:

-
    -
  • Records with one or more empty sort-field values sort after records with all sort-field values present:

  • -
-
$ mlr cat data/sort-null.dat
-a=3,b=2
-a=1,b=8
-a=,b=4
-x=9,b=10
-a=5,b=7
-
-
-
$ mlr sort -n  a data/sort-null.dat
-a=1,b=8
-a=3,b=2
-a=5,b=7
-a=,b=4
-x=9,b=10
-
-
-
$ mlr sort -nr a data/sort-null.dat
-a=,b=4
-a=5,b=7
-a=3,b=2
-a=1,b=8
-x=9,b=10
-
-
-
    -
  • Functions/operators which have one or more empty arguments produce empty output: e.g.

  • -
-
$ echo 'x=2,y=3' | mlr put '$a=$x+$y'
-x=2,y=3,a=5
-
-
-
$ echo 'x=,y=3' | mlr put '$a=$x+$y'
-x=,y=3,a=
-
-
-
$ echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)'
-x=,y=3,a=,b=1.098612
-
-
-

with the exception that the min and max functions are special: if one argument is non-null, it wins:

-
$ echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)'
-x=,y=3,a=3,b=3
-
-
-
    -
  • Functions of absent variables (e.g. mlr put '$y = log10($nonesuch)') evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, any expression which evaluates to absent is not stored in the left-hand side of an assignment statement:

  • -
-
$ echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y'
-x=2,y=3,b=3,c=5
-
-
-
$ echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)'
-x=2,y=3,a=2,b=3
-
-
-
    -
  • Likewise, for assignment to maps, absent-valued keys or values result in a skipped assignment.

  • -
-

The reasoning is as follows:

-
    -
  • Empty values are explicit in the data so they should explicitly affect accumulations: mlr put '@sum += $x' should accumulate numeric x values into the sum but an empty x, when encountered in the input data stream, should make the sum non-numeric. To work around this you can use the is_not_null function as follows: mlr put 'is_not_null($x) { @sum += $x }'

  • -
  • Absent stream-record values should not break accumulations, since Miller by design handles heterogenous data: the running @sum in mlr put '@sum += $x' should not be invalidated for records which have no x.

  • -
  • Absent out-of-stream-variable values are precisely what allow you to write mlr put '@sum += $x'. Otherwise you would have to write mlr put 'begin{@sum = 0}; @sum += $x' – which is tolerable – but for mlr put 'begin{...}; @sum[$a][$b] += $x' you’d have to pre-initialize @sum for all values of $a and $b in your input data stream, which is intolerable.

  • -
  • The penalty for the absent feature is that misspelled variables can be hard to find: e.g. in mlr put 'begin{@sumx = 10}; ...; update @sumx somehow per-record; ...; end {@something = @sum * 2}' the accumulator is spelt @sumx in the begin-block but @sum in the end-block, where since it is absent, @sum*2 evaluates to 2. See also the section on Errors and transparency.

  • -
-

Since absent plus absent is absent (and likewise for other operators), accumulations such as @sum += $x work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don’t desire. To work around this – namely, to set an output field only for records which have all the inputs present – you can use a pattern-action block with is_present:

-
$ mlr cat data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false
-
-
-
$ mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000
-record_count=100,resource=/path/to/file
-resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000
-record_count=150,resource=/path/to/second/file
-resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000
-
-
-
$ mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp
-resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000
-record_count=100,resource=/path/to/file,loadmillis=0.000000
-resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000
-record_count=150,resource=/path/to/second/file,loadmillis=0.000000
-resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000
-
-
-

If you’re interested in a formal description of how empty and absent fields participate in arithmetic, here’s a table for plus (other arithmetic/boolean/bitwise operators are similar):

-
$ mlr --print-type-arithmetic-info
-(+)    | error  absent empty  string int    float  bool
------- + ------ ------ ------ ------ ------ ------ ------
-error  | error  error  error  error  error  error  error
-absent | error  absent absent error  int    float  error
-empty  | error  absent empty  error  empty  empty  error
-string | error  error  error  error  error  error  error
-int    | error  int    empty  error  int    float  error
-float  | error  float  empty  error  float  float  error
-bool   | error  error  error  error  error  error  error
-
-
-
-
-

String literals

-

You can use the following backslash escapes for strings such as between the double quotes in contexts such as mlr filter '$name =~ "..."', mlr put '$name = $othername . "..."', mlr put '$name = sub($name, "...", "..."), etc.:

-
    -
  • \a: ASCII code 0x07 (alarm/bell)

  • -
  • \b: ASCII code 0x08 (backspace)

  • -
  • \f: ASCII code 0x0c (formfeed)

  • -
  • \n: ASCII code 0x0a (LF/linefeed/newline)

  • -
  • \r: ASCII code 0x0d (CR/carriage return)

  • -
  • \t: ASCII code 0x09 (tab)

  • -
  • \v: ASCII code 0x0b (vertical tab)

  • -
  • \\: backslash

  • -
  • \": double quote

  • -
  • \123: Octal 123, etc. for \000 up to \377

  • -
  • \x7f: Hexadecimal 7f, etc. for \x00 up to \xff

  • -
-

See also https://en.wikipedia.org/wiki/Escape_sequences_in_C.

-

These replacements apply only to strings you key in for the DSL expressions for filter and put: that is, if you type \t in a string literal for a filter/put expression, it will be turned into a tab character. If you want a backslash followed by a t, then please type \\t.

-

However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named field, mlr put '$field = gsub($field, "\\t", "\t")'. If you need to make such a replacement for all fields in your data, you should probably simply use the system sed command.

-
-
-

Regular expressions

-

Miller lets you use regular expressions (of type POSIX.2) in the following contexts:

-
    -
  • In mlr filter with =~ or !=~, e.g. mlr filter '$url =~ "http.*com"'

  • -
  • In mlr put with sub or gsub, e.g. mlr put '$url = sub($url, "http.*com", "")'

  • -
  • In mlr having-fields, e.g. mlr having-fields --any-matching '^sda[0-9]'

  • -
  • In mlr cut, e.g. mlr cut -r -f '^status$,^sda[0-9]'

  • -
  • In mlr rename, e.g. mlr rename -r '^(sda[0-9]).*$,dev/\1'

  • -
  • In mlr grep, e.g. mlr --csv grep 00188555487 myfiles*.csv

  • -
-

Points demonstrated by the above examples:

-
    -
  • There are no implicit start-of-string or end-of-string anchors; please use ^ and/or $ explicitly.

  • -
  • Miller regexes are wrapped with double quotes rather than slashes.

  • -
  • The i after the ending double quote indicates a case-insensitive regex.

  • -
  • Capture groups are wrapped with (...) rather than \(...\); use \( and \) to match against parentheses.

  • -
-

For filter and put, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ., or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching.

-

Example:

-
$ cat data/regex-in-data.dat
-name=jane,regex=^j.*e$
-name=bill,regex=^b[ou]ll$
-name=bull,regex=^b[ou]ll$
-
-
-
$ mlr filter '$name =~ $regex' data/regex-in-data.dat
-name=jane,regex=^j.*e$
-name=bull,regex=^b[ou]ll$
-
-
-
-

Regex captures

-

Regex captures of the form \0 through \9 are supported as

-
    -
  • Captures have in-function context for sub and gsub. For example, the first \1,\2 pair belong to the first sub and the second \1,\2 pair belong to the second sub:

  • -
-
mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")'
-
-
-
    -
  • Captures endure for the entirety of a put for the =~ and !=~ operators. For example, here the \1,\2 are set by the =~ operator and are used by both subsequent assignment statements:

  • -
-
mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"'
-
-
-
    -
  • The captures are not retained across multiple puts. For example, here the \1,\2 won’t be expanded from the regex capture:

  • -
-
mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"'
-
-
-
    -
  • Captures are ignored in filter for the =~ and !=~ operators. For example, there is no mechanism provided to refer to the first (..) as \1 or to the second (....) as \2 in the following filter statement:

  • -
-
mlr filter '$a =~ "(..)_(....)'
-
-
-
    -
  • Up to nine matches are supported: \1 through \9, while \0 is the entire match string; \15 is treated as \1 followed by an unrelated 5.

  • -
-
-
-
-

Arithmetic

-
-

Input scanning

-

Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g 123 or 0xabcd, is treated as an integer; otherwise, input scannable as float (4.56 or 8e9) is treated as float; everything else is a string.

-

If you want all numbers to be treated as floats, then you may use float() in your filter/put expressions (e.g. replacing $c = $a * $b with $c = float($a) * float($b)) – or, more simply, use mlr filter -F and mlr put -F which forces all numeric input, whether from expression literals or field values, to float. Likewise mlr stats1 -F and mlr step -F force integerable accumulators (such as count) to be done in floating-point.

-
-
-

Conversion by math routines

-

For most math functions, integers are cast to float on input, and produce float output: e.g. exp(0) = 1.0 rather than 1. The following, however, produce integer output if their inputs are integers: + - * / // % abs ceil floor max min round roundm sgn. As well, stats1 -a min, stats1 -a max, stats1 -a sum, step -a delta, and step -a rsum produce integer output if their inputs are integers.

-
-
-

Conversion by arithmetic operators

-

The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float.

-

The short of it is that Miller does this transparently for you so you needn’t think about it.

-

Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -263 or greater than 263-1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas – so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range:

-
64-bit integer     64-bit integer     Casted to double           Back to 64-bit
-in hex           in decimal                                    integer
-0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800
-0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800
-0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00
-0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00
-0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00
-0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000
-0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000
-0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000
-
-
-

That is, one cannot check an integer product to see if it is precisely greater than 263-1 or less than -263 using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 263, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.)

-
-
-

Pythonic division

-

Division and remainder are pythonic:

-
    -
  • Quotient of integers is floating-point: 7/2 is 3.5.

  • -
  • Integer division is done with //: 7//2 is 3. This rounds toward the negative.

  • -
  • Remainders are non-negative.

  • -
-
-
-
-

On-line help

-

Examples:

-
$ mlr --help
-Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names}
-
-Command-line-syntax examples:
-  mlr --csv cut -f hostname,uptime mydata.csv
-  mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv
-  mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
-  grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
-  mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
-  mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
-  mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
-  mlr stats2 -a linreg-pca -f u,v -g shape data/*
-  mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
-  mlr --from estimates.tbl put '
-  for (k,v in $*) {
-    if (is_numeric(v) && k =~ "^[t-z].*$") {
-      $sum += v; $count += 1
-    }
-  }
-  $mean = $sum / $count # no assignment if count unset'
-  mlr --from infile.dat put -f analyze.mlr
-  mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
-  mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
-  mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
-  mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
-
-Data-format examples:
-  DKVP: delimited key-value pairs (Miller default format)
-  +---------------------+
-  | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
-  +---------------------+
-
-  NIDX: implicitly numerically indexed (Unix-toolkit style)
-  +---------------------+
-  | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
-  | fox jumped          | Record 2: "1" => "fox", "2" => "jumped"
-  +---------------------+
-
-  CSV/CSV-lite: comma-separated values with separate header line
-  +---------------------+
-  | apple,bat,cog       |
-  | 1,2,3               | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | 4,5,6               | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +---------------------+
-
-  Tabular JSON: nested objects are supported, although arrays within them are not:
-  +---------------------+
-  | {                   |
-  |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  |  "bat": 2,          |
-  |  "cog": 3           |
-  | }                   |
-  | {                   |
-  |   "dish": {         | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
-  |     "egg": 7,       |
-  |     "flint": 8      |
-  |   },                |
-  |   "garlic": ""      |
-  | }                   |
-  +---------------------+
-
-  PPRINT: pretty-printed tabular
-  +---------------------+
-  | apple bat cog       |
-  | 1     2   3         | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | 4     5   6         | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +---------------------+
-
-  XTAB: pretty-printed transposed tabular
-  +---------------------+
-  | apple 1             | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
-  | bat   2             |
-  | cog   3             |
-  |                     |
-  | dish 7              | Record 2: "dish" => "7", "egg" => "8"
-  | egg  8              |
-  +---------------------+
-
-  Markdown tabular (supported for output only):
-  +-----------------------+
-  | | apple | bat | cog | |
-  | | ---   | --- | --- | |
-  | | 1     | 2   | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
-  | | 4     | 5   | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
-  +-----------------------+
-
-Help options:
-  -h or --help                 Show this message.
-  --version                    Show the software version.
-  {verb name} --help           Show verb-specific help.
-  --help-all-verbs             Show help on all verbs.
-  -l or --list-all-verbs       List only verb names.
-  -L                           List only verb names, one per line.
-  -f or --help-all-functions   Show help on all built-in functions.
-  -F                           Show a bare listing of built-in functions by name.
-  -k or --help-all-keywords    Show help on all keywords.
-  -K                           Show a bare listing of keywords by name.
-
-Customization via .mlrrc:
-You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc.
-For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file
-and that will be the default input/output format unless otherwise specified on the command line.
-
-The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional.
-Hash-style comments and blank lines are ignored.
-
-Sample .mlrrc:
-# Input and output formats are CSV by default (unless otherwise specified
-# on the mlr command line):
-csv
-# These are no-ops for CSV, but when I do use JSON output, I want these
-# pretty-printing options to be used:
-jvstack
-jlistwrap
-
-How to specify location of .mlrrc:
-* If $MLRRC is set:
-  o If its value is "__none__" then no .mlrrc files are processed.
-  o Otherwise, its value (as a filename) is loaded and processed. If there are syntax
-    errors, they abort mlr with a usage message (as if you had mistyped something on the
-    command line). If the file can't be loaded at all, though, it is silently skipped.
-  o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is
-    set in the environment.
-* Otherwise:
-  o If $HOME/.mlrrc exists, it's then processed as above.
-  o If ./.mlrrc exists, it's then also processed as above.
-  (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.)
-
-See also:
-https://johnkerl.org/miller/doc/customization.html
-
-Verbs:
-   altkv bar bootstrap cat check clean-whitespace count count-distinct
-   count-similar cut decimate fill-down fill-empty filter format-values
-   fraction grep group-by group-like having-fields head histogram join label
-   least-frequent merge-fields most-frequent nest nothing put regularize
-   remove-empty-columns rename reorder repeat reshape sample sec2gmt
-   sec2gmtdate seqgen shuffle skip-trivial-records sort sort-within-records
-   stats1 stats2 step tac tail tee top uniq unsparsify
-
-Functions for the filter and put verbs:
-   + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~
-   !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub
-   ssub substr tolower toupper truncate capitalize lstrip rstrip strip
-   collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan
-   atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10
-   log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin
-   sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec
-   fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt
-   sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms
-   strftime strftime_local strptime strptime_local systime is_absent is_bool
-   is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map
-   is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string
-   asserting_absent asserting_bool asserting_boolean asserting_empty
-   asserting_empty_map asserting_float asserting_int asserting_map
-   asserting_nonempty_map asserting_not_empty asserting_not_map
-   asserting_not_null asserting_null asserting_numeric asserting_present
-   asserting_string boolean float fmtnum hexfmt int string typeof depth haskey
-   joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum
-   splitkv splitkvx splitnv splitnvx
-
-Please use "mlr --help-function {function name}" for function-specific help.
-
-Data-format options, for input, output, or both:
-  --idkvp   --odkvp   --dkvp      Delimited key-value pairs, e.g "a=1,b=2"
-                                  (this is Miller's default format).
-
-  --inidx   --onidx   --nidx      Implicitly-integer-indexed fields
-                                  (Unix-toolkit style).
-  -T                              Synonymous with "--nidx --fs tab".
-
-  --icsv    --ocsv    --csv       Comma-separated value (or tab-separated
-                                  with --fs tab, etc.)
-
-  --itsv    --otsv    --tsv       Keystroke-savers for "--icsv --ifs tab",
-                                  "--ocsv --ofs tab", "--csv --fs tab".
-  --iasv    --oasv    --asv       Similar but using ASCII FS 0x1f and RS 0x1e
-  --iusv    --ousv    --usv       Similar but using Unicode FS U+241F (UTF-8 0xe2909f)
-                                  and RS U+241E (UTF-8 0xe2909e)
-
-  --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated
-                                  with --fs tab, etc.). The 'lite' CSV does not handle
-                                  RFC-CSV double-quoting rules; is slightly faster;
-                                  and handles heterogeneity in the input stream via
-                                  empty newline followed by new header line. See also
-                                  http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.
-
-  --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab",
-                                  "--ocsvlite --ofs tab", "--csvlite --fs tab".
-  -t                              Synonymous with --tsvlite.
-  --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e
-  --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f)
-                                  and RS U+241E (UTF-8 0xe2909e)
-
-  --ipprint --opprint --pprint    Pretty-printed tabular (produces no
-                                  output until all input is in).
-                      --right     Right-justifies all fields for PPRINT output.
-                      --barred    Prints a border around PPRINT output
-                                  (only available for output).
-
-            --omd                 Markdown-tabular (only available for output).
-
-  --ixtab   --oxtab   --xtab      Pretty-printed vertical-tabular.
-                      --xvright   Right-justifies values for XTAB format.
-
-  --ijson   --ojson   --json      JSON tabular: sequence or list of one-level
-                                  maps: {...}{...} or [{...},{...}].
-    --json-map-arrays-on-input    JSON arrays are unmillerable. --json-map-arrays-on-input
-    --json-skip-arrays-on-input   is the default: arrays are converted to integer-indexed
-    --json-fatal-arrays-on-input  maps. The other two options cause them to be skipped, or
-                                  to be treated as errors.  Please use the jq tool for full
-                                  JSON (pre)processing.
-                      --jvstack   Put one key-value pair per line for JSON
-                                  output.
-                --jsonx --ojsonx  Keystroke-savers for --json --jvstack
-                --jsonx --ojsonx  and --ojson --jvstack, respectively.
-                      --jlistwrap Wrap JSON output in outermost [ ].
-                    --jknquoteint Do not quote non-string map keys in JSON output.
-                     --jvquoteall Quote map values in JSON output, even if they're
-                                  numeric.
-              --jflatsep {string} Separator for flattening multi-level JSON keys,
-                                  e.g. '{"a":{"b":3}}' becomes a:b => 3 for
-                                  non-JSON formats. Defaults to :.
-
-  -p is a keystroke-saver for --nidx --fs space --repifs
-
-  Examples: --csv for CSV-formatted input and output; --idkvp --opprint for
-  DKVP-formatted input and pretty-printed output.
-
-  Please use --iformat1 --oformat2 rather than --format1 --oformat2.
-  The latter sets up input and output flags for format1, not all of which
-  are overridden in all cases by setting output format to format2.
-
-Comments in data:
-  --skip-comments                 Ignore commented lines (prefixed by "#")
-                                  within the input.
-  --skip-comments-with {string}   Ignore commented lines within input, with
-                                  specified prefix.
-  --pass-comments                 Immediately print commented lines (prefixed by "#")
-                                  within the input.
-  --pass-comments-with {string}   Immediately print commented lines within input, with
-                                  specified prefix.
-Notes:
-* Comments are only honored at the start of a line.
-* In the absence of any of the above four options, comments are data like
-  any other text.
-* When pass-comments is used, comment lines are written to standard output
-  immediately upon being read; they are not part of the record stream.
-  Results may be counterintuitive. A suggestion is to place comments at the
-  start of data files.
-
-Format-conversion keystroke-saver options, for input, output, or both:
-As keystroke-savers for format-conversion you may use the following:
-        --c2t --c2d --c2n --c2j --c2x --c2p --c2m
-  --t2c       --t2d --t2n --t2j --t2x --t2p --t2m
-  --d2c --d2t       --d2n --d2j --d2x --d2p --d2m
-  --n2c --n2t --n2d       --n2j --n2x --n2p --n2m
-  --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
-  --x2c --x2t --x2d --x2n --x2j       --x2p --x2m
-  --p2c --p2t --p2d --p2n --p2j --p2x       --p2m
-The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
-PPRINT, and markdown, respectively. Note that markdown format is available for
-output only.
-
-Compressed-data options:
-  --prepipe {command} This allows Miller to handle compressed inputs. You can do
-  without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...".
-
-  However, when multiple input files are present, between-file separations are
-  lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can
-  specify an action to be taken on each input file. This pre-pipe command must
-  be able to read from standard input; it will be invoked with
-    {command} < {filename}.
-  Examples:
-    mlr --prepipe 'gunzip'
-    mlr --prepipe 'zcat -cf'
-    mlr --prepipe 'xz -cd'
-    mlr --prepipe cat
-    mlr --prepipe-gunzip
-    mlr --prepipe-zcat
-  Note that this feature is quite general and is not limited to decompression
-  utilities. You can use it to apply per-file filters of your choice.
-  For output compression (or other) utilities, simply pipe the output:
-    mlr ... | {your compression command}
-
-  There are shorthands --prepipe-zcat and --prepipe-gunzip which are
-  valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc
-  files since that would put execution of the prepipe command under
-  control of the .mlrrc file.
-
-Separator options, for input, output, or both:
-  --rs     --irs     --ors              Record separators, e.g. 'lf' or '\r\n'
-  --fs     --ifs     --ofs  --repifs    Field separators, e.g. comma
-  --ps     --ips     --ops              Pair separators, e.g. equals sign
-
-  Notes about line endings:
-  * Default line endings (--irs and --ors) are "auto" which means autodetect from
-    the input file format, as long as the input file(s) have lines ending in either
-    LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as
-    carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).
-  * If both irs and ors are auto (which is the default) then LF input will lead to LF
-    output and CRLF input will lead to CRLF output, regardless of the platform you're
-    running on.
-  * The line-ending autodetector triggers on the first line ending detected in the input
-    stream. E.g. if you specify a CRLF-terminated file on the command line followed by an
-    LF-terminated file then autodetected line endings will be CRLF.
-  * If you use --ors {something else} with (default or explicitly specified) --irs auto
-    then line endings are autodetected on input and set to what you specify on output.
-  * If you use --irs {something else} with (default or explicitly specified) --ors auto
-    then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.
-
-  Notes about all other separators:
-  * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats
-    do key-value pairs appear juxtaposed.
-  * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;
-    XTAB records are separated by two or more consecutive IFS/OFS -- i.e.
-    a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs
-    auto for XTAB format. (XTAB's default IFS/OFS are "auto".)
-  * OFS must be single-character for PPRINT format. This is because it is used
-    with repetition for alignment; multi-character separators would make
-    alignment impossible.
-  * OPS may be multi-character for XTAB format, in which case alignment is
-    disabled.
-  * TSV is simply CSV using tab as field separator ("--fs tab").
-  * FS/PS are ignored for markdown format; RS is used.
-  * All FS and PS options are ignored for JSON format, since they are not relevant
-    to the JSON format.
-  * You can specify separators in any of the following ways, shown by example:
-    - Type them out, quoting as necessary for shell escapes, e.g.
-      "--fs '|' --ips :"
-    - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'".
-    - To avoid backslashing, you can use any of the following names:
-      cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals
-  * Default separators by format:
-      File format  RS       FS       PS
-      gen          N/A      (N/A)    (N/A)
-      dkvp         auto     ,        =
-      json         auto     (N/A)    (N/A)
-      nidx         auto     space    (N/A)
-      csv          auto     ,        (N/A)
-      csvlite      auto     ,        (N/A)
-      markdown     auto     (N/A)    (N/A)
-      pprint       auto     space    (N/A)
-      xtab         (N/A)    auto     space
-
-Relevant to CSV/CSV-lite input only:
-  --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1
-                     of input files. Tip: combine with "label" to recreate
-                     missing headers.
-  --no-implicit-csv-header Do not use --implicit-csv-header. This is the default
-                     anyway -- the main use is for the flags to 'mlr join' if you have
-                     main file(s) which are headerless but you want to join in on
-                     a file which does have a CSV header. Then you could use
-                     'mlr --csv --implicit-csv-header join --no-implicit-csv-header
-                     -l your-join-in-with-header.csv ... your-headerless.csv'
-  --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,
-                     fill remaining keys with empty string. If a data line has more
-                     fields than the header line, use integer field labels as in
-                     the implicit-header case.
-  --headerless-csv-output   Print only CSV data lines.
-  -N                 Keystroke-saver for --implicit-csv-header --headerless-csv-output.
-
-Double-quoting for CSV output:
-  --quote-all        Wrap all fields in double quotes
-  --quote-none       Do not wrap any fields in double quotes, even if they have
-                     OFS or ORS in them
-  --quote-minimal    Wrap fields in double quotes only if they have OFS or ORS
-                     in them (default)
-  --quote-numeric    Wrap fields in double quotes only if they have numbers
-                     in them
-  --quote-original   Wrap fields in double quotes if and only if they were
-                     quoted on input. This isn't sticky for computed fields:
-                     e.g. if fields a and b were quoted on input and you do
-                     "put '$c = $a . $b'" then field c won't inherit a or b's
-                     was-quoted-on-input flag.
-
-Numerical formatting:
-  --ofmt {format}    E.g. %.18lf, %.0lf. Please use sprintf-style codes for
-                     double-precision. Applies to verbs which compute new
-                     values, e.g. put, stats1, stats2. See also the fmtnum
-                     function within mlr put (mlr --help-all-functions).
-                     Defaults to %lf.
-
-Other options:
-  --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
-                     urand()/urandint()/urand32().
-  --nr-progress-mod {m}, with m a positive integer: print filename and record
-                     count to stderr every m input records.
-  --from {filename}  Use this to specify an input file before the verb(s),
-                     rather than after. May be used more than once. Example:
-                     "mlr --from a.dat --from b.dat cat" is the same as
-                     "mlr cat a.dat b.dat".
-  -n                 Process no input files, nor standard input either. Useful
-                     for mlr put with begin/end statements only. (Same as --from
-                     /dev/null.) Also useful in "mlr -n put -v '...'" for
-                     analyzing abstract syntax trees (if that's your thing).
-  -I                 Process files in-place. For each file name on the command
-                     line, output is written to a temp file in the same
-                     directory, which is then renamed over the original. Each
-                     file is processed in isolation: if the output format is
-                     CSV, CSV headers will be present in each output file;
-                     statistics are only over each file's own records; and so on.
-
-Then-chaining:
-Output of one verb may be chained as input to another using "then", e.g.
-  mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color
-
-Auxiliary commands:
-Miller has a few otherwise-standalone executables packaged within it.
-They do not participate in any other parts of Miller.
-Available subcommands:
-  aux-list
-  lecat
-  termcvt
-  hex
-  unhex
-  netbsd-strptime
-For more information, please invoke mlr {subcommand} --help
-
-For more information please see http://johnkerl.org/miller/doc and/or
-http://github.com/johnkerl/miller. This is Miller version v5.10.2-dev.
-
-
-
$ mlr sort --help
-Usage: mlr sort {flags}
-Flags:
-  -f  {comma-separated field names}  Lexical ascending
-  -n  {comma-separated field names}  Numerical ascending; nulls sort last
-  -nf {comma-separated field names}  Same as -n
-  -r  {comma-separated field names}  Lexical descending
-  -nr {comma-separated field names}  Numerical descending; nulls sort first
-Sorts records primarily by the first specified field, secondarily by the second
-field, and so on.  (Any records not having all specified sort keys will appear
-at the end of the output, in the order they were encountered, regardless of the
-specified sort order.) The sort is stable: records that compare equal will sort
-in the order they were encountered in the input record stream.
-
-Example:
-  mlr sort -f a,b -nr x,y,z
-which is the same as:
-  mlr sort -f a -f b -nr x -nr y -nr z
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/release-docs.html b/docs6/_build/html/release-docs.html deleted file mode 100644 index 18185e38c..000000000 --- a/docs6/_build/html/release-docs.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - Documents by release — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Documents by release

-

As of September 2020, for 5.9.1 onward, release-specific docs will be handled automatically by https://miller.readthedocs.io whenever a new release is tagged at https://github.com/johnkerl/miller/releases.

-

Information here is for documents from before the readthedocs port:

- -
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/search.html b/docs6/_build/html/search.html deleted file mode 100644 index 35cbfeacf..000000000 --- a/docs6/_build/html/search.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - Search — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - - - - -
-
-
-
- -

Search

-
- -

- Please activate JavaScript to enable the search - functionality. -

-
-

- Searching for multiple words only shows matches that contain - all words. -

-
- - - -
- -
- -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/searchindex.js b/docs6/_build/html/searchindex.js deleted file mode 100644 index ff2f9cb30..000000000 --- a/docs6/_build/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["10min","build","contact","cookbook","cookbook2","cookbook3","customization","data-examples","data-sharing","etymology","faq","feature-comparison","features","file-formats","index","install","internationalization","log-processing-examples","manpage","originality","performance","quick-examples","record-heterogeneity","reference","reference-dsl","reference-verbs","release-docs","sql-examples","why"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["10min.rst","build.rst","contact.rst","cookbook.rst","cookbook2.rst","cookbook3.rst","customization.rst","data-examples.rst","data-sharing.rst","etymology.rst","faq.rst","feature-comparison.rst","features.rst","file-formats.rst","index.rst","install.rst","internationalization.rst","log-processing-examples.rst","manpage.rst","originality.rst","performance.rst","quick-examples.rst","record-heterogeneity.rst","reference.rst","reference-dsl.rst","reference-verbs.rst","release-docs.rst","sql-examples.rst","why.rst"],objects:{},objnames:{},objtypes:{},terms:{"000":[4,23],"000000":[3,4,7,10,18,23,24,25],"00000000":23,"00000001":25,"00000002":25,"00000003":25,"00000004":25,"00000005":25,"00000010":23,"00000020":23,"00000030":23,"00000040":23,"00000050":23,"00000060":23,"000000e":25,"000003":8,"000004":8,"000006":8,"000008":25,"000012875":3,"000013113":3,"000013828":3,"000014067":3,"000015020":3,"000015974":3,"000018":8,"000019073":3,"000020":4,"000026941":3,"000027895":3,"000028133":3,"000028849":3,"000029087":3,"000033140":3,"000035048":3,"000036955":3,"000039101":3,"000043":25,"000044":7,"000045":[5,25],"000045061":3,"000053883":3,"000056028":3,"000086069":3,"000088":25,"000089":7,"0000ff":10,"0001":10,"000134945":3,"000187":5,"000188":7,"0002":10,"000204":5,"000217915":3,"000266":7,"000287":25,"000308":25,"000310":25,"000352":25,"000355959":3,"000364":7,"000398":25,"000488":7,"0005":10,"000501":7,"000504":25,"000506163":3,"000549":5,"0005wa":10,"0006":10,"000608":7,"000671":7,"000680":7,"000692":5,"0007":10,"000711":7,"000717":7,"0007wa":10,"0008":10,"000811815":3,"000819":8,"000863":25,"000881":7,"000895":8,"0009":10,"000929":8,"000971":8,"001":[8,10,18,25],"0010":10,"001017":4,"001235":7,"001257":13,"001257332190235938":[3,7,13],"001297235":3,"001300":7,"001489":7,"001505":25,"001593":25,"001646":25,"00188555487":23,"001960993":3,"002":[8,25],"002226":25,"002257":25,"002449":7,"002510":25,"0025440267883102274":25,"002781":25,"002959":25,"003265":7,"003417969":3,"003425":25,"004892":25,"005155":7,"006215811":3,"006790161e":4,"006793":24,"007487":3,"008098":7,"008110504040268474":25,"008294106":3,"008365":25,"009854780514656930":24,"00feff01":23,"00ff00":10,"010000":25,"010367":0,"010519":7,"011320":7,"011795":7,"012095928":3,"012486":7,"0130":0,"013000":0,"013230":25,"013809741826425":25,"014208":25,"014230":4,"014419":25,"015356":7,"016056003736548696":25,"017026":25,"018016":4,"018043":4,"018048":4,"018052":4,"018055":4,"018058":4,"018565":7,"018621":25,"018823":25,"018988":25,"019185838783636":25,"019592047":3,"019682":[5,25],"020000":25,"024605":7,"025000":25,"025495":25,"025680":7,"025776":7,"029221":25,"029856606049114442":25,"02t12":17,"030097":25,"030142":25,"030457":7,"030529":7,"031193972":3,"03144187646093577":[24,25,27],"031442":[24,25],"032412":7,"032614487569017414":25,"033183":24,"033668":25,"035256":25,"035874":7,"036559":25,"036584":24,"039153":25,"03964684310055758":25,"039835":25,"040000":[4,25],"040780":25,"041189":25,"041429":25,"041884":25,"04289047852629113":25,"043792":7,"044573":7,"044623":7,"044748":25,"045058":7,"046033e":25,"046163":25,"04835898233323954":25,"048488":7,"048505":25,"051213231883952326":25,"051255":25,"052410":25,"053115845e":4,"053508":7,"054478717073354166":25,"05474106287787284":25,"054884":25,"05490416175132373":25,"054979":25,"055252":25,"055637":25,"055693":7,"055745":7,"055966":25,"056717":25,"057254076":3,"05727869223575699":25,"057445":25,"057644":7,"057694":7,"059487":25,"05z":17,"062143":25,"062353":24,"064":25,"064002":25,"064773":7,"065034":13,"065034003400998":[3,7],"06lld":[18,24,25],"070000":25,"071044":7,"071428":25,"07155556372719507":25,"072500":7,"072936":3,"073593":24,"073695":7,"07392337815122155":25,"075228":24,"077508505e":4,"080000":4,"080307961":3,"082":23,"083":25,"083333":3,"084270":5,"084611":25,"084658":25,"088203":25,"089091":7,"08989091493635304":25,"08lf":23,"08llx":[18,23,25],"08s":[18,25],"090000":25,"090193":7,"090909":17,"092330":4,"092709":7,"093":25,"093322":25,"093710":3,"096978":25,"097518":24,"098200":0,"098612":23,"099441528e":4,"09974385090654347":25,"099790":0,"099953":0,"0lf":[18,23],"0m0":23,"0m1":23,"0m2":23,"0m3":23,"0x00":16,"0x07":23,"0x08":23,"0x09":23,"0x0a":[13,18,23],"0x0b":23,"0x0c":23,"0x0d":[13,18,23],"0x0xe2909f":13,"0x1e":[13,18,23],"0x1f":[13,18,23],"0x7ffffffffffff800":23,"0x7ffffffffffff9ff":23,"0x7ffffffffffffa00":23,"0x7ffffffffffffbff":23,"0x7ffffffffffffc00":23,"0x7ffffffffffffdff":23,"0x7ffffffffffffe00":23,"0x7ffffffffffffffe":23,"0x7fffffffffffffff":23,"0x8000000000000000":23,"0xabcd":23,"0xcafefe":[18,23],"0xe2909":[13,18,23],"0xe2909f":[18,23],"0xfeff01":23,"0xff":[16,18,23,24],"0xffff":23,"100":[3,4,13,17,18,22,23,24,25,28],"1000":[5,6,18,21,23,24],"10000":[4,5,18,21,23,24,25,27],"100000":[4,7,25],"10000978":27,"10001":24,"10002":24,"10003":24,"10003924":27,"10009872":27,"1001":7,"1002":[7,25],"1003":7,"10055":3,"1007":25,"10078":[7,25],"101":[3,25],"1013":[7,25],"1014":7,"1016":[5,7],"1020":25,"102132":25,"1023":5,"102348":7,"1024":7,"1028457":3,"103095":7,"1035":7,"1037":25,"1041":7,"10430":3,"10486":3,"105470":25,"106":3,"1061531":7,"1062":7,"10674":3,"1068":25,"107":25,"1070":7,"10718":3,"1072":25,"107341":25,"1075":25,"10795":3,"108":27,"108529":25,"10880":3,"109":3,"109018":7,"10946":3,"11043":3,"110454":25,"1108":25,"1109":25,"111":17,"1111":25,"1115":3,"1116":3,"1117":3,"11177":3,"1118":3,"1119":3,"1120":3,"1121":3,"1122":3,"1123":3,"1124":3,"1125":3,"114":24,"1142":25,"11445015005595527":25,"11498":3,"116":17,"1161":25,"1177":25,"117831":13,"117831369597269":[3,7],"1184":25,"1187":25,"119082":25,"1192":25,"1199":25,"120":[1,3,24],"120000":4,"120267":25,"1203":25,"1207":25,"121":3,"1213":25,"121393":3,"1219":3,"12200":10,"122288":25,"1227":3,"123":[3,13,23,24],"123324":24,"12345":24,"12345678":[18,23],"123903":25,"124017":25,"124912":3,"1254":25,"125680":[24,25],"126":25,"126745":25,"128":[23,25],"129435":3,"129482031":3,"129797":3,"129868":3,"129919":3,"12lf":23,"130140":3,"130181":3,"130271":3,"130368":3,"130849":3,"131":1,"131026":3,"131184":13,"13151094520189244":25,"131870":7,"1330905600":3,"1330992000":3,"1331078400":3,"1331164800":3,"1331251200":3,"1331337600":3,"1331424000":3,"1331510400":3,"1331596800":3,"1331683200":3,"133400":25,"133418":7,"13343527626645157":25,"134112":7,"134188743284304":8,"13418874328430463":[3,5,8,10,13,23,24,25,27],"134189":[3,24,25],"13458":3,"134676":25,"13529":3,"135573":25,"1357":3,"137":23,"1372":3,"1380":25,"13810280912907674":[3,7],"138103":13,"1397865600":3,"13z":17,"140":24,"140079":[24,25],"1405":0,"140500":0,"141006771777843":25,"1413":25,"1417":25,"1419":25,"14192":25,"142134":25,"142611":25,"1427760000":3,"143":25,"1430603027":4,"144":3,"1440768801":[18,24],"144267240289442":25,"1447":25,"1448762578":10,"1448762579":10,"1448762588":10,"1448762589":10,"1448762598":10,"1448762599":10,"145":17,"146756570128739":25,"146956761817328":25,"1470":25,"1472819681":17,"1472819690":17,"1472819705":17,"1472819713":17,"1472819720":17,"1472819736":17,"1472819742":17,"147311":[18,25],"1485":25,"14898":25,"1496":25,"150":[10,22,23,25],"150049":3,"151":[24,25],"1513010528347546":25,"152":25,"1533":25,"1536":25,"154328":7,"1548117990710653":25,"155836":25,"1560":25,"1568774318":8,"157052":3,"158":25,"158279":25,"159341":25,"1597":3,"160000":4,"162795":7,"164071635714438":25,"1648382":24,"16783":25,"168":[24,27],"170":10,"171687":24,"172800":3,"1743":25,"17445":10,"1748088656576567":25,"176":24,"17635":25,"176796":[5,25],"176858":7,"177":3,"17711":3,"17744449786454086":25,"179":24,"180":23,"180995":3,"181006":3,"181043":3,"181112":3,"181306":3,"181494":3,"181625":3,"181718":3,"181835":3,"182":24,"182104":3,"182528":3,"183":23,"185":24,"185129":24,"1874":25,"1878849191181694":[24,25,27],"187890":25,"188":25,"188474":25,"1885":25,"189":24,"18lf":[18,23],"190":24,"191":24,"191890":[5,25],"192":25,"192668":5,"194":24,"1941":25,"1942":25,"1943":25,"19441962592638418":25,"195":[24,25],"196":24,"196418":3,"1965":25,"1966":25,"1970":9,"1973":3,"19757":7,"198":24,"198278":3,"199":23,"1991":0,"199100":0,"1_iqr":4,"1_p25":4,"1_p75":4,"1st":[18,24],"200":[3,4,22,24,25],"2000":4,"200000":[4,7,25],"2008":25,"2009":[18,25],"201":3,"2012":3,"2013":19,"2014":3,"2015":[3,18,23,24],"20151015":[18,25],"2015510269821953":7,"2016":17,"2017":20,"2018":10,"202":24,"2020":26,"2021":18,"2034":25,"203577":3,"204":24,"204603":[3,24,25],"20460330576630303":[3,5,8,10,13,23,24,25,27],"2047":25,"205":24,"2050":25,"2057":25,"206":24,"207":27,"208":[10,24],"2081":25,"20848":7,"208785":3,"20901671281497636":[3,7],"209017":13,"209094":13,"209197":7,"20z":17,"210":3,"210738209085753":25,"211":[3,24],"212":24,"213325977":3,"213804":24,"214314":25,"215":[24,25],"2154713":[18,25],"216":24,"21891":3,"219":24,"219668":13,"21966833570651523":[3,7,13],"21st":1,"21z":[18,24],"220":25,"221511":24,"221511e":25,"222776":24,"223344":25,"225734":25,"227":25,"22890":7,"2290":0,"229000":0,"230385":25,"230940":25,"2311":7,"231212":25,"23168161807490417":25,"233":[3,24],"23512":3,"23614420670296965":25,"237":17,"2370":0,"237000":0,"239153910272168":25,"23998073813992293":25,"240":24,"240000":4,"241e":[13,18,23],"241f":[13,18,23],"242785":3,"2430":0,"243000":0,"2431":25,"243381":25,"2458":25,"246670":4,"2468":3,"250":22,"250000":[3,18,24],"2501":4,"252137":4,"25284227383991364":25,"255":[18,24],"255892":25,"256":[1,27],"257223":3,"2584":3,"258993":25,"259010":4,"2591":25,"259200":3,"2637962404841453":25,"2647":25,"264762":[24,25],"265854207755811":25,"2659":25,"2662":25,"267481232652199086":24,"268029":24,"268029e":25,"2684":25,"2697":25,"2698":25,"270084":25,"270217":25,"272054845593895200":24,"2778":0,"277800":0,"2785551":7,"279879":24,"280000":4,"280831":24,"28657":3,"287":[3,25],"2880000000000003":25,"289":25,"28t13":[18,24],"290052":13,"29005231936593445":[3,7],"290076":4,"290293":5,"290423":25,"29081949506712723":25,"292":25,"292308":0,"293886":25,"294372":24,"295850":24,"29874":3,"2nd":24,"300":[3,22,25],"300000":[7,25],"300006":24,"301":3,"301030":24,"303":25,"303167":7,"3037738877233719":25,"3064608776550894":25,"307":25,"307973891915119":25,"3098376725521097":25,"310073":25,"3116410800256374":25,"312":3,"313":[3,25],"3139":25,"314":3,"317811":3,"3179287":[18,25],"3193":3,"320":[23,25],"320000":4,"321":25,"321507044286237609":24,"3231":25,"326":24,"326384":25,"327":25,"32904497195507487":25,"329343":25,"330000":23,"330514":25,"3312":3,"33146680638888126":25,"33279067554884":25,"3328":5,"333333":3,"3339426415875795":25,"334423065":3,"3350":0,"3355450325004481":25,"33576":25,"336598":24,"337":25,"3372":25,"3383185255166477":8,"33831852551664776":[3,5,8,10,13,23,24,25,27],"338319":[3,24,25],"339767":0,"341":25,"34141681118811673":25,"341578843118008":25,"341887":24,"341887e":25,"345000":[18,24],"345z":[18,24],"3467":3,"346790":[3,5,24,25],"3467901443380824":[3,5,8,10,13,23,24,25,27],"3472":3,"348":17,"349450":24,"350":24,"351579417310387":25,"353":4,"35421":3,"355725080701707":25,"356":25,"357":[24,25,27],"3579":3,"358029":24,"3596137145616235":25,"360000":4,"3616":25,"363":[24,25,27],"365428":13,"365962021016529":25,"366013":13,"36746306902109926":25,"3676141320555616":25,"367646":25,"368":25,"368686":[5,25],"368794":25,"368849":25,"369642":[5,25],"36z":17,"370817":[5,25],"371":[24,25,27],"3717":25,"371813":3,"372":25,"3732":4,"3735":0,"373500":0,"3755":25,"3758779366493625":25,"377":[3,23,24,25,27],"377281":[5,25],"378":3,"3782":25,"3788":25,"3798":25,"380":24,"3801":25,"381":[24,25,27],"3810":25,"381399":[3,24,25],"38139939387114097":[3,5,8,10,13,23,24,25,27],"381593":4,"3817":25,"38245149780530685":25,"383":25,"383185":24,"383185e":25,"38378504852300466":25,"3839424618160777":25,"384":25,"385":[24,25,27],"386":[24,25,27],"386260":0,"387310":24,"387979":[5,25],"388259888e":4,"389":[24,25,27],"389055":3,"389463":3,"389917":25,"390864584500387":25,"391":[24,25,27],"391064":[5,25],"392":[24,25,27],"392835":3,"393566":25,"395":[24,25,27],"395376":24,"396112":7,"396146":24,"39755":4,"397873687920433":25,"398889":7,"399846":7,"3lf":[18,25],"3sz":[18,24],"400":25,"4000":25,"400000":[4,7,25],"401542":7,"401573":25,"4020":7,"402409":24,"403":[24,25,27],"40346767294704544":25,"403672":25,"404317":24,"404671":25,"406839":25,"407":[24,25,27],"409":[24,25,27],"409355":13,"4115":25,"411679":25,"411890":[5,25],"413":[24,25,27],"414263129226617":25,"414868":0,"41527900739142165":25,"416":25,"417":[24,25,27],"417498":25,"4180":[13,18],"4181":3,"41z":17,"420":25,"4200799665161291":25,"423":[24,25,27],"424460":25,"425382":25,"425435":25,"425789896597056627":24,"426":[24,25,27],"427":[24,25,27],"429":[24,25,27],"42z":17,"430603027e":4,"431057737383438":25,"43144132839222604":25,"432931":24,"434588759225423":25,"4355354501763202":[3,7],"436":25,"436498":13,"4364983936735774":[3,7,25],"436913":24,"43763430414406546":25,"438":25,"440":3,"440000":4,"441596":25,"441773289968473":25,"441784":3,"442699":25,"445":3,"44558":10,"44597731903759075":25,"446":25,"446588":25,"448":25,"449816":25,"450":[22,23],"4520609":[18,25],"4529":7,"4531511689924275":25,"454":25,"454003":25,"4543":3,"454779":3,"455":[24,25,27],"455077":3,"455127":0,"455632":25,"456":[13,23,24],"4567":3,"4568":10,"456d988ecb3bf1b75f057fc6e9fe70db464e9388":8,"4570224877870851":25,"458234":25,"4595":25,"461184":25,"4617":25,"46368":3,"463750":7,"4641":25,"464336":[5,24],"465":3,"4656148241291592":25,"4661":25,"4670":0,"467054":24,"467726":[5,24],"467901e":25,"468":25,"468014":25,"4702":25,"471184":25,"4724542934246524":25,"472899":24,"4730652428100751":25,"4732962944898885":25,"474837":25,"476":25,"477121":24,"477187":3,"479931":[5,24],"480000":4,"480913":25,"481":25,"481402":25,"483050":25,"483548":25,"483895":[5,24],"484973":[18,25],"485038":25,"485076":[5,24],"485170":25,"485879":[5,24],"486337":25,"487764":7,"487899":25,"488189":[18,25],"488393":[5,24],"4890":4,"490":25,"490532":[7,25],"490717":25,"490909":3,"491056":7,"491501":[5,24],"4915175580479536":25,"4920":4,"492141":[5,24],"4925":4,"492560":[7,25],"492586":25,"49262281749172077":25,"492870":25,"493":17,"49322128674835697":[24,25,27],"493294":25,"49355539228753786":25,"493813":[5,24],"493895":25,"494005":[7,25],"4940826462055272":25,"49416101516594396":25,"4946":4,"494754378604669":25,"495106":24,"49529606749929744":25,"495463":[5,24],"495524":7,"4956":4,"4964368415453642":25,"496450":25,"496523":25,"496535":7,"496538":7,"496604":[5,24],"4967":4,"496803":25,"496859":7,"497":25,"497051":7,"497129":[7,25],"497304":25,"497593":25,"497730":[5,24],"49774122460981685":25,"497787":7,"4979":4,"498046":25,"498326":7,"498555":7,"4986":[5,25],"498602":[5,25],"4989623130006362":25,"499085":7,"499385":7,"499599":25,"499612":[5,24],"49969878539567425":25,"4th":24,"500":[22,25],"5000":[4,18,24],"500000":[7,18,24,25],"500403":25,"500651":25,"500679":[5,24],"501019":25,"501050":7,"501159":25,"501319":25,"5014775988383656":25,"501479":25,"501516":4,"501556":25,"502015":25,"502362":[5,24],"5026260055412137":[24,25,27],"5028":4,"502997":25,"503272":25,"503672":[5,24],"504242":25,"504307":25,"504571":25,"504596":25,"504861":[7,25],"505359":25,"5058":0,"505800":0,"5058773791931063":25,"505907":[5,24],"506021":25,"5062":25,"506206":25,"506361":25,"507":25,"507569":25,"507697":25,"509999":[5,24],"50z":17,"5102729153751984":25,"510293":25,"510627":7,"510791":25,"5113763011485609":25,"511866":4,"5123":4,"512529":25,"512756":[5,24],"513118":25,"513314":[5,24],"513576":25,"513903817":8,"514229":3,"514267":[5,24],"514722876":8,"5154934457238382":25,"515588":24,"515618046":8,"5161574810505635":25,"5164":4,"516547441":8,"5167":3,"516969":25,"517518828":8,"5175826237797857":25,"5176199566173642":25,"517717":[7,25],"517901":25,"518699":8,"518717":8,"518723":8,"518727":8,"518730":8,"5196327866973567":25,"519830":[5,24],"520000":4,"520630":25,"5207382318405251":25,"521030":25,"521452":7,"522151":[3,24,25],"5221511083334796":8,"5221511083334797":[3,5,8,10,13,23,24,25,27],"522799":[5,24],"522921":25,"523356":7,"524":27,"525226":25,"525510":25,"525641":25,"526":25,"526301273728043":25,"5263660881848111":25,"5268161165014636":25,"527126":25,"5271261600918548":[24,25,27],"529698":25,"530604":[5,24],"5310":0,"5311465405784674":25,"5322349637512487":25,"533162":4,"5353718443278438":25,"536294":[24,25],"540349":3,"540542":3,"541766":25,"542922":24,"5438":3,"54436":25,"548470":5,"548662":24,"549462":25,"552845":25,"553807":24,"554":17,"554077":[5,25],"5542":0,"55491":25,"557077185510228001":24,"55952913620132":25,"560":25,"560000":4,"563722":4,"566075":25,"567112":25,"56782":3,"568893318795083758":24,"57097":25,"571":25,"572":3,"57313":3,"5732889198020006":[3,5,8,10,13,23,24,25,27],"573289":[3,24,25],"5736853980681922":25,"576":25,"5823723856331258":25,"583333":3,"583995":13,"584354":7,"585086":24,"586560":24,"586800e":25,"587":25,"588349":24,"589":25,"591":25,"5910":0,"591000":0,"5944176543007182":25,"5985540091064224":[24,25,27],"599056":25,"5d18h53m20":[18,24],"600":[22,25],"600000":[4,7,25],"600th":24,"601":25,"601150":0,"603575":25,"6058":7,"605969906":3,"6098":0,"60x":28,"610":3,"6117840605678454":[24,25,27],"612":17,"612050466474166":7,"6189062525431605":25,"619172":0,"622701":24,"625040":13,"630000":7,"630174":25,"6321695890307647":[3,7,13,25],"632170":13,"6329360666849821":25,"634451":3,"635621":3,"6357719216821314":25,"636245":24,"636245e":25,"638428":25,"640000":4,"640635":24,"641":25,"642465":25,"643912":24,"6498":0,"649800":0,"6505816637259333":25,"652400":5,"65473572":[18,25],"657784":24,"661943":3,"662727":25,"662901":24,"664985":3,"666667":3,"6684429446914862":25,"670":3,"671":25,"676":25,"6765":3,"678":[13,23],"67847":25,"680000":4,"680838":24,"6831992610568047":25,"6838":3,"684":3,"6842806710360729":25,"684750":0,"690":24,"690740":24,"691473":25,"692":25,"693499":3,"694":3,"694129944e":4,"6944":3,"696785877560498":25,"696957":25,"6970867759393995":25,"6le":[18,25],"6lf":23,"6th":24,"700000":[7,25],"700z":[18,24],"703":25,"704983":[18,25],"705":25,"705700":3,"707338":25,"709213":25,"7118027080775757":25,"714286":17,"717491":25,"719685":4,"720000":4,"722730":25,"7243899920872646":25,"725365736377487":25,"7268028627434533":[3,5,8,10,13,23,24,25,27],"726803":[3,24,25],"728":17,"7286126830627567":25,"732889e":25,"733813":25,"73425":10,"7346633365041219":25,"734806020620654365":24,"7356782810796262":25,"735993":24,"741251":24,"742016":5,"742150":0,"743231":3,"743946":4,"746720":13,"7467203085342884":[3,7],"747654":24,"747994":24,"748186":4,"748936":[18,24],"7495507603507059":[24,25,27],"7501":4,"75025":3,"751863":[24,25],"753":3,"753094629505863":[3,7],"755350":4,"7554169353781729":25,"756917":25,"7586799647899636":[3,5,8,10,13,23,24,25,27],"75868":25,"758680":[3,24,25],"759862":25,"760000":4,"760388":0,"760531":0,"763670":5,"764003":4,"764119":25,"764950884927175":25,"7674272008085286":25,"770":3,"7709126592971468":25,"771":3,"7719912015786777":7,"772":3,"772857":5,"773":3,"774":[3,25],"774048":24,"774541777078352":25,"775":3,"775542":13,"7755423050923582":[3,7],"776":3,"777":3,"777892":[24,25],"778":3,"779":3,"779995":0,"780":[3,25],"7800986870203719":25,"7803586969333292":25,"7812143304483805":25,"783171":24,"7860928603468063":25,"789":24,"791888":25,"7927778364718627":[3,7],"792778":13,"7930488423451967":25,"793939":7,"798188":13,"7981881667050565":[3,7,25],"800000":[4,7,25],"8014053396013747":25,"802103":3,"805148213865135":25,"805299":24,"8079311983747106":25,"8103":0,"810300":0,"8122903963006748":[3,7],"812961":24,"813994e":25,"8240":0,"8267274952432482":25,"827911":25,"828":23,"830320062215299":25,"8304946402876182":25,"831":25,"832":25,"8361":3,"840000":4,"841230":25,"8442204830496998":25,"845":25,"846":25,"847":4,"847900":24,"849416":[24,25],"852177":24,"852444":25,"8525628505287842":25,"853532":24,"853832":25,"8547010348386344":25,"8548431579124808":25,"857143":17,"857866":25,"8591292672156728":[3,7],"861022949e":4,"861354":25,"863624":[3,24,25],"8636244699032729":[3,5,8,10,13,23,24,25,27],"863624469903273":8,"86400":3,"8685956833908394":25,"870530722602517626":24,"8722623057355134":25,"8729":10,"874904":7,"87506":25,"877042":25,"878132":25,"8785588662666121":25,"880000":4,"880365":24,"880457":3,"881983":24,"883010":24,"884788571337605134":24,"8859":16,"8870":0,"887000":0,"888":25,"8899":10,"889958":25,"890":3,"892427":7,"89248112":[18,25],"895845":25,"897873":25,"898818":25,"899":25,"899167143824484":25,"8e9":23,"900000":[7,25],"900794":25,"900873":3,"9010":0,"901000":0,"9011709461770973":25,"90122":25,"905366":25,"908":[3,25],"908236":3,"910000":7,"912":25,"916097":24,"916877":25,"917":25,"920000":4,"920661":24,"920998":24,"921944":3,"9223372036854773760":23,"9223372036854774271":23,"9223372036854774272":23,"9223372036854774783":23,"9223372036854774784":23,"9223372036854775295":23,"9223372036854775296":23,"9223372036854775806":23,"9223372036854775807":23,"9223372036854775808":23,"926":25,"92735":3,"930643":7,"932820":25,"93291":25,"933":23,"935363":7,"938":25,"939":7,"940705":3,"944117":13,"944117399716207":[3,7],"945021":25,"945286":24,"948745":25,"9497":4,"950":25,"9526183602969864":[24,25,27],"953":25,"9531098083420033":7,"954635":25,"955109300797182":25,"956274":13,"9562743938458542":[3,7],"956835":25,"958668":25,"959350":25,"960000":4,"961778":24,"962":7,"963":25,"963030":24,"963431":25,"963441":25,"965":5,"965677":3,"970":23,"971235037":3,"972":7,"972582":25,"973574":25,"974069":25,"975000":25,"976181385699006":[24,25,27],"9785":0,"978500":0,"979":[5,25],"98012375":[18,25],"980798":7,"981355":3,"983753":24,"984571":3,"985":7,"986":25,"987":3,"987034":25,"9876":3,"987746":4,"988":[7,25],"988287":25,"988341":25,"9887207810889004":[3,7,13,25],"988721":13,"988893":25,"989":7,"989046":25,"989102":25,"990054":25,"990175":25,"990764":25,"991":7,"991394":24,"992655":25,"993":7,"993635":25,"993873":25,"994444":25,"995":7,"997490":25,"998475":7,"998534":25,"9986871176198068":25,"9987":3,"998811":[5,25],"998885":7,"999":10,"999044":25,"999264":25,"999403":[5,25],"999438":25,"999490":[5,25],"999563":25,"999576":7,"999647":7,"999661":7,"999676":7,"999733":25,"99974":25,"99976":25,"999823":[5,25],"999882":7,"9999":24,"99990":25,"999919":7,"999923":7,"999936":7,"99994":25,"999953":[5,25],"999959":25,"999965":25,"999969":7,"999975":7,"999984":25,"999989":25,"999991":25,"999995":7,"9le":[4,23],"9lf":3,"abstract":[18,23,24,25],"bia\u0142i":10,"boolean":[3,13,18,23,25],"break":[4,8,18,23,24,28],"byte":[10,16],"case":[3,4,10,12,13,17,18,22,23,24,25],"catch":24,"char":4,"class":[8,18,24],"default":[0,4,6,10,13,18,23,24,25,27,28],"export":6,"final":[8,18,24],"float":[8,10,13,18,23,25],"function":[3,4,8,10,11,12,16,18,21,23,25],"import":[1,4,8,24,28],"int":[3,4,8,10,18,23,25,27,28],"long":[13,18,22,23,24,25,28],"new":[0,3,8,10,11,18,21,22,23,24,25,26],"null":[4,16,18,25,27],"public":1,"return":[3,4,8,10,13,18,23],"short":[22,23,25],"static":1,"throw":[18,24],"true":[3,4,8,13,18,22,23,24,25,28],"try":[8,10,18,23,24],"typeof":[10,18,23],"var":[5,13,18,24,25],"wei\u00df":10,"while":[1,3,8,10,11,12,13,18,19,20,22,23,25,28],AND:[18,24],Added:19,And:[0,1,3,8,10,20,23,24,28],Are:28,But:[0,1,3,4,10,13,17,18,19,20,22,23,24,25,28],FOR:18,For:[0,1,2,3,4,6,10,12,13,15,18,23,25,27,28],Has:[18,25],IDs:[3,25],IFS:[18,23,24,25],INTO:27,IPS:[13,18,23,24],IRS:[13,18,23,24],LHS:[18,24],LTS:1,NOT:[18,24],Not:[12,18,25,28],OFS:[11,18,23,24,25],OPS:[18,23,24,25],ORS:[11,13,18,23,24,25],One:[1,3,5,10,13,18,19,23,24,25,27,28],Such:13,THEN:18,That:[17,23,24,25],The:[1,3,4,5,6,7,8,9,10,11,13,16,18,19,20,22,23,24,25,28],Their:[24,25],Then:[1,3,4,6,10,13,17,23,24,25,27,28],There:[1,3,18,23,24,25],These:[1,3,4,6,18,23,24,25,28],Use:[0,3,4,6,8,10,13,18,23,24,25],Used:[18,24],Useful:[18,23,25],Using:[3,4,10,18,19,23,24,25,27],With:[13,18,19,23,24,25],YES:27,__class__:8,__none__:[6,18,23],_fraction:[18,25],_in:25,_installassist:25,_lp:25,_networkd:[13,25],_out:25,_p25:4,_percent:[18,25],_postfix:25,_taskgat:[13,25],_type:24,_uucp:[13,25],a_b_c:3,a_in:25,a_in_x:[18,25],a_max:25,a_min:25,a_out:25,a_out_x:[18,25],a_sum:25,a_typ:24,a_x:[18,25],a_x_count:[18,25],a_x_sum:[18,25],aal:4,aalii:4,aam:4,aardvark:4,aardwolf:4,aba:4,abac:4,abaca:4,abaz:4,abc:24,abc_123:24,abil:[5,13,19,23],abixi:27,abl:[8,10,18,23,24,28],aborruso:10,abort:[3,6,18,23],abound:[19,22],about:[0,1,4,7,13,18,19,23,24,25,28],abov:[1,5,6,10,13,18,23,24,25],abs:[18,23],absenc:[13,18,23],absent:[3,4,18,25],absolut:[18,23,24],accept:[23,24],access:[0,18,24,25],accommod:[1,28],accord:23,account:[3,18,21,23,24],account_id:[3,18,21,23],account_nam:[18,21,23],account_statu:3,accumul:[3,13,18,23,24,25,28],acknowledg:1,aco:[18,23],acosh:[18,23],acquir:4,across:[3,11,18,23,24,25,28],act:23,action:[11,18,23],actual:10,ad_hoc_data_analysis_from_the_unix_command_lin:19,adapt:11,add:[1,3,8,10,11,18,21,23,24,25,28],added:19,addedli:4,adding:[3,25],addit:[15,18,23,24,25,28],addition:[9,11,13,23,24],adher:9,adjac:[3,24],administr:[10,12,13,25],admittedli:4,advantag:5,advic:10,affect:[23,27],after:[1,3,6,11,17,18,19,23,24,25],afterwork:1,again:[3,10,13,17,23,24,27],against:[18,20,23,24,25],age:[3,25],aggreg:[4,19,21,25,27],ago:28,aim:[4,28],alarm:23,alb:10,albeit:16,album:9,algorithm:[12,18,19,25],alia:[18,24],alic:[3,25],align:[7,13,16,18,23,25],all:[0,1,4,6,11,12,13,17,18,19,20,22,23,25,27,28],all_kei:3,alloc:[10,18,24,25],allow:[1,3,6,8,11,12,13,18,22,23,24,25],almost:28,along:[4,17,20,22,24],alphabet:[0,25],alreadi:[0,5,8,13,15,19,23,24,28],also:[0,1,2,3,4,5,6,10,12,13,15,17,18,19,22,23,24,25,27,28],altern:[3,10,17,23,25],although:[3,13,18,20,23,24],altkv:[18,23],altogeth:23,alwai:[4,6,12,15,18,19,20,23,24,25],amount:[3,8,10,18,19,25,28],analog:[13,15,19,23],analysi:[12,18,19,25,28],analyt:19,analyz:[13,17,18,21,23],anchor:[18,23,25],angl:28,ani:[0,1,3,4,6,8,12,13,16,17,18,20,23,24,25,28],ann:25,annoi:24,anoth:[0,1,3,4,9,10,11,17,18,20,23,24,25,28],answer:28,anti:[18,25],antimod:[18,25],anyth:[0,10,16,23,28],anywai:[10,23],apart:4,apoapsi:10,appear:[0,1,3,10,13,18,23,24,25],append:[8,18,24,25],appl:[13,18,20,23],appli:[3,13,17,18,21,23,24,25,27],applic:13,approach:23,appropri:24,approxim:4,appveyor:[1,15],apt:[1,15],arbitrari:[8,13,18,23,24,25,28],arbitrarili:[13,24],arch:[1,15],arctang:[18,24],aren:[3,4,13,24,25,28],arg:[18,24],argf:8,arguabl:12,argument:[3,10,18,23,24,25],argumenterror:8,arithmet:[3,4,18,24,25],arol:10,around:[1,18,23,24],arrai:[0,10,12,18,23],arriv:13,articl:4,artifact:[1,15],artifici:4,asana:[13,23],ascend:[10,18,23,25],ascii:[4,13,18,23],asin:[18,23],asinh:[18,23],ask:[3,8,10,13,23,28],askant:4,assert:3,assert_:24,asserting_abs:[18,23],asserting_bool:[18,23],asserting_boolean:[18,23],asserting_empti:[18,23],asserting_empty_map:[18,23],asserting_float:[18,23],asserting_int:[18,23],asserting_map:[18,23],asserting_nonempty_map:[18,23],asserting_not_empti:[18,23],asserting_not_map:[18,23],asserting_not_nul:[18,23],asserting_nul:[18,23],asserting_numer:[18,23],asserting_pres:[18,23],asserting_str:[3,18,23],asset:1,assign:[3,4,13,18,21,23,25],assigned_to:27,assist:[15,25],associ:[15,18,24,25],assum:[18,25],assur:23,ast:[18,25],asterisk:[18,25],asv:[18,23],asvlit:[13,18,23],atabbtabc:10,atan2:[18,23,25],atan:[18,23],atanh:[18,23],attach:1,attr:[18,21,23],attribut:13,audienc:24,augment:[1,3,18,25],august:23,author:[1,18],auto:[4,13,18,23,25],autobuilt:15,autoconf:1,autoconfigur:1,autocorrel:[7,18,25],autodetect:[10,18,23,24,25],autodetector:[13,18,23],autogen:1,autom:3,automak:1,automat:[1,4,6,18,23,25,26],autoreconf:1,autoupd:1,aux:[18,23],auxiliari:18,avail:[12,13,15,18,23,24,28],averag:[18,25],avig:4,avoid:[10,18,23,24,25,28],awar:[1,12,19,20,25],awful:28,awk:[3,12,13,18,19,20,23,24,28],b_1:3,b_2:3,b_3:3,b_in:25,b_in_i:[18,25],b_max:25,b_min:25,b_out:25,b_out_x:[18,25],b_sum:25,b_type:24,b_x:[18,25],b_x_count:[18,25],b_x_sum:[18,25],b_y:[18,25],b_y_count:[18,25],b_y_sum:[18,25],back:[1,4,13,23],background:28,backslash:[10,18,23],backspac:23,bad:3,badli:3,bake:3,balanc:[18,21,23],band:9,bar:[4,13,18,23,24,27],bar_count:[18,25],bar_sum:[18,25],bare:[18,23],barnei:3,base:[1,11,18,19,24],basenam:[18,24,25],bash:[4,8,27],basi:23,basic:[12,24,28],bat:[13,18,23],batch:[18,25],batch_siz:17,bcd:10,beach:7,beard:4,becaus:[10,18,19,23,24,28],becom:[10,18,23,24,28],been:[1,3,18,19,23,24,25],befor:[0,3,10,11,12,13,18,23,24,25,26],begin:[3,4,5,6,8,10,11,18,23,25],behavior:[10,13,18,23,24,25],being:[0,3,5,10,13,18,19,23,24,25,28],belief:28,bell:23,belong:[3,23],below:[1,18,23,24,25],benefit:[10,12,24],bent:28,bereft:25,bernoulli:7,besid:10,best:[18,25,28],better:[1,17,19,24],betti:3,between:[0,4,11,12,13,18,22,23,24,25,28],bewar:[18,24],beyaz:10,beyond:[8,12,24],bianco:10,big:[18,23,25],bigger:28,bigint:27,bill:[3,23],bin:[1,4,8,13,18,25],bin_hi:[4,7,25],bin_lo:[4,7,25],binari:[1,12,15,23,24],bind:24,biologi:28,birchman:4,bit:[15,18,23,24,25,28],bitcount:[18,23],bitwis:[18,23,24],bivari:[7,18,25],black:10,blanc:10,blanco:10,blank:[10,18,23,25],blob:1,block:[3,4,5,11,18,23,25],blow:3,blue:[3,7,18,22,24,25],bob:[3,25],bodi:[18,24],bool:[3,4,18,23,24],bootstrap:[18,23],border:[18,23],bore:7,both:[1,3,10,13,18,23,25,28],bother:1,bound:[18,24,25],brac:24,brace:[10,18,25],bracket:[10,24,28],branch:[3,18,24],breakdown:25,breviti:24,brew:[1,15],brewtestbot:1,bric:24,bring:25,bromanc:4,brown:[3,13,18,23],browser:1,bsd2:1,bsd:[1,13,18,23],budget:[13,23],bug:[2,16],build:[4,14,28],buildbox:1,built:[1,3,11,18,23,25],bulk:[0,11],bull:23,bytecod:20,c2d:[13,18,23],c2j:[13,18,23],c2m:[13,18,23],c2n:[13,18,23],c2p:[13,18,23],c2t:[13,18,23],c2x:[13,18,23],cach:[3,17],calcul:[18,25],call:[0,3,4,5,14,18,24,25],call_count:24,calle:24,callsit:24,can:[0,1,3,4,5,7,11,12,13,15,17,18,19,20,22,23,24,25,27,28],cannot:[13,23,24],canon:25,capabl:16,capit:[16,18,23],captur:[18,24,25],care:[0,28],career:28,carol:[3,25],carriag:[10,13,18,23,24],cash:10,cast:23,cat:[0,3,4,5,7,8,10,11,13,17,18,22,23,24,27],categor:[7,25],categori:[18,23,25,27],caus:[13,18,23,24],caveat:[10,24],cbrt:[18,23],cde:10,ceas:[18,25],ceil:[18,23],cell:4,centuri:1,certain:1,certainli:24,cflag:1,chain:[3,4,11,18,24],chang:[0,1,10,11,13,17,22,23,24,27],charact:[4,10,16,18,23,24,25],chart:25,check:[1,3,10,13,18,19,23,28],checklist:1,checkout:1,checkpoint:[18,21,23,24],cheesi:[18,25],choco:15,chocolatei:15,choic:[1,18,23,24],chomp:8,choos:4,chop:3,chronolog:25,chuck:3,circl:[0,3,7,13,25],clang:1,clash:[10,24],classic:[9,12],classnam:3,claus:1,clean:[12,18,23,24,28],clean_whitespac:[18,23,25],clear:[3,18,24,25],clearer:10,click:28,client:12,clobber:23,close:[9,24],code:[1,3,10,13,18,19,20,23,24,25,28],codepoint:16,coder:28,coeffici:25,coerc:[3,10,18,23,25],cog:[13,18,23],coinmat:4,collaps:[18,25],collapse_whitespac:[18,23,25],collat:19,collect:[8,10,13,19,24],collis:[18,24],colon:[3,13,18,23,24],color:[0,3,10,13,18,22,23,24,25],color_mod:25,color_shap:0,colored_shap:[18,25],colour:10,column2:25,column5:25,column:[0,3,4,7,10,12,13,18,21,22,23,27],com:[1,2,3,5,7,10,12,15,16,18,19,23,25,26,28],combin:[3,18,19,23,25,28],come:[11,22,25],comma:[3,13,18,23,25,27],command:[0,3,6,9,10,13,17,18,19,20,24,25,28],comment:[1,6,18,23,25],commit:[1,15],common:[4,13,14,18,19,24,28],compact:[5,19],compani:3,compar:[8,13,18,19,20,23,24,25],comparison:[10,20,23,24,25],compat:[18,25],compil:[1,12,23,24],complement:[12,18,23,25],complementari:[18,24],complet:[13,19,24,25,28],complex:[3,4,23,28],compliant:[3,22],complic:28,compon:[18,25],compos:18,composit:4,compound:24,comprehens:[19,28],compress:[18,21],comput:[0,5,8,10,13,16,18,23,24,25],concaten:[8,10,13,18,23,24,25],concatent:13,concept:19,concern:13,concis:24,concret:24,condit:[23,24],condition:[18,25],conf:1,configur:1,confus:[1,24],consecut:[18,23],consequ:13,consid:28,consist:23,constant:[18,24],constrain:13,construct:[7,24],consult:[18,24],consum:[4,18,24,25],contact:[1,14],contain:[10,13,17,18,22,23,24,25],content:24,context:[3,12,13,14,18,19,23,24,25],contigu:23,continu:[1,15,18,23,24,28],contrast:[10,18,24,25],contribut:[18,25],controductionari:4,control:[10,11,18,23,25],conveni:[23,24,27],convers:[0,12,18,19,24,25],convert:[0,3,8,10,13,18,23,24,25],cookbook:[14,28],coordin:4,copi:[0,1,8,10,13,18,24,25],copyright:1,core:[1,19,20],corr:[7,18,24,25],correctli:[16,23,28],correl:[7,18,25],correspond:[2,18,24,25],cos:[18,23,25],cosh:[18,23],cosin:[18,24],could:[4,12,19,23,24],couldn:[24,28],count:[0,5,7,10,11,12,13,16,18,21,22,23,24,27,28],count_delta:3,counter:[3,11,18,24,25],counterintuit:[13,18,23],counti:7,countri:4,coupl:19,cours:[1,3,5,8,10,18,24,25],cov:[18,25],covari:[18,25],covx:[18,25],cpu:23,cr2crlf:23,cr2lf:23,crash:[18,25],crcr:[18,23],creach:7,creat:[0,3,4,9,10,19,24,27],credit:10,criteria:19,criterion:[18,24,25],crlf2cr:23,crlf2lf:23,crlf:[13,18,23,24],crlfcrlf:[18,23],cross:23,cryptic:24,csv:[4,6,7,8,10,11,12,17,18,19,20,21,23,24,25,27,28],csvlite:[13,18,23,24,25],cube:[18,24],cultur:19,cumul:[18,24,25],cumulative_sum:24,cup:25,curli:[10,18,25],current:[3,6,8,10,11,15,17,18,23,24,25,28],current_count:3,currtemp:3,curv:28,custom:[14,18,19,21,23,24,25],customiz:[24,25],customz:1,cut:[0,3,4,6,11,12,13,18,19,21,23,24,28],czarni:10,d2c:[13,18,23],d2j:[13,18,23],d2m:[13,18,23],d2n:[13,18,23],d2p:[13,18,23],d2t:[13,18,23],d2x:[13,18,23],dade:7,daemon:[13,25],dai:[3,9,18,25,28],dariu:10,darwin:1,dat:[10,18,21,23,24,25],data:[0,4,5,6,8,9,11,12,14,17,18,19,20,21,22,25,27,28],databas:[3,12,19,22,27],dataset:[10,20,25],datatyp:28,date:[8,13,18,24,25],date_:[18,25],datestamp:3,datestamp_delta:3,datum:[18,25],david:25,dawn:13,dbohdan:[19,28],deal:23,debian:15,debit:10,debug:[18,24],decent:19,decim:[10,18,23,24],deciph:1,decis:[10,24],decl:24,declar:[18,28],decompress:[18,23],decreas:24,deep:[13,24],deeper:[12,24],deepest:24,def:[3,8,24],defin:[4,11,18,23,25,28],definit:24,delet:[8,27],delimit:[0,3,13,18,23,25,27],deliv:23,delta:[3,4,8,17,18,19,23,25],demand:10,demonstr:[4,23,24],denomin:3,depend:[3,7,11,12,18,23,24,25],depth:[18,23,28],deriv:25,desc:27,descend:[0,18,23,25],describ:[1,3,4,10,19,23,25],descript:[18,23,25],design:[3,4,10,18,23,28],desir:[1,18,23,25],detail:[1,18,20,23,24,25],detect:[13,18,23,25],dev:[1,18,23,25],devel:1,develop:19,deviat:[7,18,25],devop:[12,28],dhms2fsec:[18,23],dhms2sec:[18,23],dice:12,did:28,didn:28,diff:1,diffend:4,differ:[0,4,7,8,10,11,12,13,18,19,20,22,23,24,25,28],difficult:1,digit:10,dimens:4,directli:[5,13,18,24,25],directori:[1,6,18,23],disabl:[1,18,23],disallow:24,disambigu:25,discard:[18,25],disciplin:28,disclaim:1,discoveri:10,discuss:[1,3,8,13,23,24,25],dish:[13,18,23],disk:[12,20],distanc:28,distcheck:1,distinct:[0,3,7,10,18,23,24],distribut:[7,15,18,24,25],distro:1,ditto:24,dive:14,divers:1,divis:[4,18,24],dkvp:[0,3,7,10,17,18,20,22,23,24,25],dkvp_io:8,dkvpline2map:8,dll:1,do_julia:4,doc:[1,10,18,23,24,25,26,28],document:[1,2,4,14,18,24,28],doe:[0,10,11,12,13,18,19,20,23,24,25,28],doesn:[1,18,19,20,23,24,25,28],dog:3,doing:[0,17,18,24,25,27,28],dollar:[4,18,24,25],domain:[1,8,19,24,25,28],don:[0,1,3,10,18,20,22,23,24,25,28],done:[1,3,11,12,19,23,24,25,28],donesec:25,dot:23,dotadiw:19,dotti:3,doubl:[1,10,13,18,23,24,25,27],down:[3,18,21,23,24],download:[1,12],downstream:24,draw:23,drawback:10,drew:25,drop:[8,10,13,18,24,25,28],dsl:[1,3,4,8,10,11,13,14,16,18,19,21,23,25,28],dst:10,due:[10,23],dump:[18,21,23,25],durat:24,dure:23,duval:7,dynam:[1,10,15,28],eab0de043d67f441c7fd1e335f0ca38708e6ebf7:8,each:[0,3,4,7,8,10,11,13,17,18,22,23,24,25,28],earli:13,earlier:[18,25],easi:[3,4,10,13],easier:[5,24],easili:[4,19,28],east:[10,18,25],echo:[4,8,10,13,18,23,24,25],edgar:25,edit:1,edump:[18,24],effect:[18,23,24,25],effici:[13,20,23,28],effort:1,efg:[18,25],egg:[13,18,23],eight:4,eighth:28,either:[0,4,8,13,17,18,23,24,25,28],eks:[3,4,5,8,10,13,23,24,25,27],eks_pan:24,eks_wy:24,ekspan:8,ekswy:8,el6:1,elaps:20,elegantli:4,elif:[18,24],els:[0,3,4,10,13,16,18,20,22,23,24,25,28],elsif:24,embed:23,emit:[3,4,5,13,18,21,23,25,28],emitf:[5,18,24,25],emitp:[18,24],empir:7,empti:[3,6,13,18,22],enabl:[12,18,25],encapsul:24,enclos:24,encompass:[12,18,24],encount:[13,16,18,23,24,25,28],end:[0,3,4,5,6,8,10,11,18,19,21,23,25],endpoint:[18,24],endur:23,enforc:24,engin:28,english:4,enjoi:24,enough:[4,19,24,28],ensur:[18,25],entail:[18,25],enter:[17,24],entir:[10,12,13,18,23,24,25,28],entireti:23,entri:[3,18,24,25],env:[8,11,18,24,25],environ:[6,18,23,24,25],epoch:[3,10,18,24,25],eprint:[3,18,24],eprintn:[18,24],equal:[13,18,23,24,25],equival:[1,24],erf:[18,23],erfc:[18,23],eric:18,error:[1,3,5,6,18,22,23,25],escap:[4,18,23],escape_sequences_in_c:23,essenti:[12,18,24,25],estim:[18,21,23,25],etc:[1,2,3,4,8,10,11,12,17,18,19,20,21,23,24,25,27,28],eval:[19,24,25,28],evalu:[3,18,23,24,25],evar:[18,25],eveith:18,even:[0,18,23,24,25,28],event:[3,10,17],everi:[3,4,6,8,15,17,18,22,23,24,25],everydai:[4,24],everyon:[24,28],everyth:[3,18,23],ewma:[5,18,25],exactli:[18,23,25],examin:25,exampl:[1,4,5,6,10,12,14,15,18,19,22,23,24,25,28],exce:23,exceedingli:1,except:[4,6,7,8,13,18,23,24,25,28],excit:24,exclud:[11,18,24,25],exclus:1,exe:1,execpt:24,execut:[1,3,9,18,23,24,25],exist:[6,8,10,18,19,23,24,25,28],exp:[18,23],expand:[13,23],expans:25,expect:[1,10,12,23,24,25],experi:[23,24,28],expert:1,explain:28,explanatori:24,explicit:[3,11,16,22,23,24,25],explicitli:[1,13,18,19,23,24],explod:[3,18,25],expm1:[18,23],expo:4,expo_sampl:4,exponenti:[3,4,18,24,25],exponential_distribut:4,exponential_moving_averag:[18,25],express:[3,4,10,11,16,18,19,21,25,28],extend:[8,9],extent:[11,24],extra:[6,10,24,27],extract:[3,10],extractor:10,extrem:28,f29c748220331c273ef16d5115f6ecd799947f13:8,fact:[1,23,24],factor:[18,25],factori:24,fail:3,fair:19,fall:23,fals:[1,3,4,13,18,22,23,24,25],familiar:[1,12,18,19,24],famou:3,faq:14,far:[9,13,19,20],farawai:12,farther:24,fast:[18,19,25,28],faster:[5,11,18,20,23,24,25],fatal:[13,18,23,24],favorit:[13,17,19,25],fcach:3,fcount:3,featur:[0,2,10,13,14,18,19,22,23,24,28],fed:23,feed:24,feel:[1,9],felt:28,femal:25,fetch:1,few:[0,1,3,4,7,10,18,19,23,24,28],fewer:[6,18,23,24,25,28],ff0000:10,fflush:[18,25],fibonacci:3,field:[0,4,6,7,8,11,12,13,17,18,22,27],fifth:28,figur:[1,13,23],file:[1,4,5,6,7,8,12,14,16,17,18,19,20,21,22,23,25,28],filenam:[3,6,11,18,21,23,24,25],filenum:[18,24,25],fill:[3,10,18,22,23,28],filler:[18,25],filter:[0,3,4,13,17,18,19,21],find:[0,1,4,5,10,18,22,23,24,25,28],fine:[0,10],finer:[18,25],finish:17,first:[0,1,3,4,10,12,13,18,19,23,24,25,28],fit:[11,18,24,25],fiv:1,five:24,fix:10,flag:[0,3,6,7,10,13,17,18,21,23,24,25,27],flag_count:7,flag_max:7,flag_mean:7,flag_min:7,flatten:[18,23,24,25],flex:1,flexibl:[19,23,24],flint:[13,18,23],floor:[18,23],flour:9,flow:24,fly:19,fmtnum:[18,23,25],fnr:[3,10,18,24,25],focus:24,fold:[3,18,25],folk:[1,28],follow:[1,3,4,5,6,10,13,15,18,22,23,24,25,28],font:4,foo:[18,24,25],foo_:24,foo_count:[18,25],foo_sum:[18,25],food:5,forc:[13,23],foreach:24,forget:[1,24],form:[3,5,10,18,19,23,24,25],formal:23,format1:[18,23],format2:[18,23],format:[3,6,7,8,12,14,16,17,18,19,20,21,27,28],format_ok:3,former:[5,18,22,24,25],formfe:23,formula:[1,23],found:[1,4,10,13,18,24,25,28],four:[3,4,13,18,23,24,25],fourth:[24,28],fourthli:19,fox:[3,13,18,23],fraction:[1,13,18,23],frame:12,fred:[3,25],free:[1,12,19],freebsd:1,frequent:[18,23,24],fresh:1,friendli:[12,16,18,25,28],from:[0,3,5,6,7,10,11,13,14,17,18,19,21,22,23,25,26,27,28],front:25,frustrat:19,fsec2dhm:[18,23],fsec2hm:[18,23],full:[10,18,19,23,24,25],fulli:[3,12],fun:[4,28],func:[3,4,18,24],fundament:[20,28],further:[11,12,27],furthermor:[18,23,24,25],g_h_i:3,gap:3,garlic:[13,18,23],gate:[13,24,25],gaussian:7,gcc:1,geco:[13,25],gen:[18,23],gender:25,gener:[1,3,7,10,13,15,18,23,24,25],genom:28,genuin:24,get:[0,1,3,4,5,10,12,15,18,19,20,22,23,24,25,27,28],get_point_plot:4,gid:[13,18,21,23,25],github:[1,2,5,10,12,13,16,19,23,26,28],give:[4,5,13,18,23,24,25],given:[0,3,4,5,10,18,24,25],glibc:1,global:[3,13,18,23,24,25],glue:28,gmail:[1,2,18],gmt2sec:[18,23],gmt:[18,24,25],gnu99:1,gnu:[1,20],goe:[0,12,17,23,24,25,28],going:[10,28],good:[1,3,7,8,19,24,25,28],gotten:[19,24,28],grain:[9,18,25],gram:4,grammar:[18,25],granular:23,graphic:[4,12,28],grate:1,great:[1,28],greater:[18,23,24,25],green:[3,7,10,13,18,22,23,24,25],green_blu:24,gregreda:19,grep:[3,10,11,13,17,18,19,20,21,23,24],grfx:[18,25],grind:9,group:[0,13,17,18,19,21,22,23,24,27],group_nam:[18,25],gsl:4,gsub:[3,10,16,18,23],guarante:28,guid:28,gunzip:[18,23],gzip:[18,21,23,24],had:[6,18,23,24,28],half:25,hand:[3,4,18,23,24],handcraft:23,handi:22,handl:[3,12,13,16,18,19,20,22,23,24,26,27,28],happen:[0,18,23,24,25],happi:1,hard:[23,28],has:[0,1,3,5,6,10,12,13,17,18,20,23,24,25,28],hash:[10,12,18,23,25],hashmap:[13,18,24],haskei:[3,18,23],hasn:[18,23,24],hat:[4,5,24,25,27],have:[0,1,6,7,8,10,12,13,15,16,17,18,19,22,23,24,28],haven:1,head:[0,1,3,4,5,7,10,11,13,15,18,23,26],header:[0,3,6,10,11,12,13,18,19,20,22,23,25,27],headerless:[13,18,23,25],heavi:[18,25,28],held:[18,25],hello:[8,10,23,24],help:[6,18,24,25,28],henc:[19,24],here:[0,3,4,6,7,8,10,12,13,17,18,19,20,23,24,25,26,27,28],het:[3,22,23,25],heteregen:24,heterogen:[3,10,12,13,14,18,23,24,25],hex:[18,23],hexadecim:23,hexfmt:[18,23],high:[12,18,19,24,25,28],higher:24,highest:[0,24],highland:7,highli:[3,24,25],histogram:[4,7,18,23],hit:[3,17],hit_mean:17,hms2fsec:[18,23],hms2sec:[18,23],hoc:[3,17,28],hold:[18,25],home:[1,6,18,23,24],home_dir:[13,25],homebrew:[1,15],homogen:24,honor:[13,18,23],hood:24,hook:19,hope:24,horizont:25,host:[1,13],hostnam:[10,13,18,19,21,23,24,25],hour:22,how:[3,4,8,11,13,14,18,20,23,24,25,28],howev:[3,10,18,23,24,25,28],html:[1,10,18,23,25],http:[1,2,4,5,7,10,12,15,16,18,19,23,24,25,26,28],hu_site_deduct:7,hu_site_deductible_p0:7,hu_site_deductible_p100:7,hu_site_deductible_p10:7,hu_site_deductible_p50:7,hu_site_deductible_p90:7,hu_site_deductible_p95:7,hu_site_deductible_p99:7,hundr:28,hurri:12,hyperbol:[18,24],i_cumu:3,i_iqr:4,i_p25:4,i_p75:4,i_typ:24,iasv:[13,18,23],iasvlit:[13,18,23],icorn:4,icsv:[0,3,7,10,13,18,22,23,25],icsvlit:[10,13,18,23,25],id_count:27,idcod:25,idea:[3,4,6,7,10,24],ideal:13,ident:[4,18,24,25],idiom:[24,25],idiosyncraci:1,idiosyncrat:24,idkvp:[17,18,23,25],idl:3,ieee:23,iformat1:[18,23],ifs:[3,8,10,13,18,21,23,25],ignor:[6,13,18,23,24,25],igur:23,iheight:4,ijson:[3,13,18,23,25],imagin:3,imaginari:4,imit:[4,5,19],immedi:[13,18,23,24],implement:[1,4,5,19,20,23,24,28],implicit:[3,10,13,18,22,23,25],implicitli:[13,18,23,24],implod:[18,25],imposs:[18,23],in_:[18,25],inadvert:24,includ:[0,1,6,8,10,11,12,13,16,18,19,21,23,24,25,27],inclus:[18,24,25],incompat:[18,25],inconsist:[3,24],increas:[3,24],increment:[3,18,24],inde:1,independ:[4,25],index1:[18,24],index2:[18,24],index:[0,3,10,11,12,18,19,20,23,25],indic:[10,12,13,18,22,23,24,25],individu:[10,25],industri:28,inequ:[18,24],inf:24,infer:[8,10,18,24,25,28],inferenc:[18,25],infil:[18,21,23,27],infinit:24,infix:[18,24],info:[3,23],inform:[1,4,13,17,18,23,24,25,26,28],ingest:[3,12,18,24,25,28],inherit:[18,23],inidx:[3,13,18,23,25],initi:[6,10,23,24,28],inlin:24,inner1:3,inner2:3,inner:[3,24],inner_a:24,inner_b:24,inner_c:24,inner_d:24,innermost:24,inout:25,input:[0,4,5,6,10,11,12,13,17,18,22,24,25,28],insan:28,insensit:[18,23,25],insert:[3,6,12,18,24],insid:[10,24],inspir:[19,24],instal:[1,14,18,23,25],installdir:1,installhom:1,instanc:[3,18,25],instead:[0,3,6,13,18,23,24,25,27],insul:4,insur:7,integ:[3,4,8,10,12,13,18,23,24,25],integer:[18,23,25],intend:[10,18,24,25],intent:[16,19,24],intention:10,interest:[18,23,24,25],interfac:[23,28],interleav:[12,25],intermedi:[10,25],intern:[18,19,23,25],internation:14,interoper:[12,21,28],interpol:[18,25],interpret:[16,19,23],interv:[7,18,24,25],interven:[18,24,25],intoler:23,introduc:[10,18,24],introductori:4,introspect:4,invalid:23,invers:[4,18,24],inverse_transform_sampl:4,invert:[18,25],invoic:3,invok:[13,18,23,24],involv:[1,2,24],invqnorm:[18,23],invqorm:[18,24],ipaddr:10,ipprint:[18,23],ips:[8,18,23,25],iqr:4,irb:8,irecord:3,irregular:24,irs:[13,18,23,25],is_abs:[18,23],is_bool:[18,23],is_boolean:[18,23],is_empti:[18,23],is_empty_map:[18,23],is_float:[18,23],is_int:[18,23],is_map:[18,23],is_nonempty_map:[18,23],is_not_empti:[18,23],is_not_map:[18,23],is_not_nul:[18,23],is_nul:[18,23,25],is_numer:[18,21,23],is_perman:27,is_pres:[3,5,17,18,23],is_str:[3,18,23],ish:[23,28],isn:[3,4,5,10,13,18,19,23,24,25,28],iso:16,isol:[18,23],issu:[1,2,5,10,15,16,23,28],item:[3,17,18,20,25],iter:[4,18,21,23,24,25],iti:[4,23],its:[0,1,3,5,6,8,9,11,12,17,18,19,23,24,25,28],itself:[4,8,24,28],itsv:[3,13,18,23,27],itsvlit:[13,18,23,27],iusv:[13,18,23],iusvlit:[13,18,23],ivar:[18,25],iwidth:4,ixtab:[18,23],j2c:[13,18,23],j2d:[13,18,23],j2m:[13,18,23],j2n:[13,18,23],j2p:[13,18,23],j2t:[13,18,23],j2x:[13,18,23],jane:23,java:28,jera:1,jflatsep:[13,18,23],jknquoteint:[18,23,24,25],jlistwrap:[6,13,18,23,27],job:[25,28],jofmt:13,john:[1,2,3,7,18,25],johnkerl:[1,2,5,10,12,15,16,18,23,24,25,26,28],join:[8,12,13,18,21,23,24,27,28],joiner:10,joink:[18,23],joinkv:[18,23],joinv:[18,23],journalist:28,jpeg:4,jquoteal:13,json:[1,3,6,8,12,18,19,20,21,23,24,25,27,28],jsonx:[13,18,23],jtn002:1,jtn:1,judg:4,julia:4,jumbl:17,jump:[3,13,18,23],jumpxd:3,just:[0,1,3,4,6,8,9,10,12,13,17,18,19,20,22,23,24,25,27,28],justifi:[18,23],juxtapos:[18,23],jvquoteal:[18,23,25],jvstack:[6,13,18,23,27],keep:[0,1,3,4,12,18,24,25,28],kei:[0,3,8,10,12,18,19,20,21,23,25,27,28],kerl:[1,2,18],key1:24,key2:24,key_count:3,key_fract:3,keyfield:3,keylist:24,keystrok:[3,10,18,19,22,23,24,25,28],keyword:[18,23,25],khavari:10,kind:[19,20,23,24,28],klausner:1,knead:3,knew:19,know:[3,13,18,20,25,28],known:[3,7,8,13,18,23,25,27],kuna:25,kurtosi:[18,25],label1:24,label2:24,label:[3,7,11,13,18,21,23],lack:[1,3,13,23,24],lambda:4,landslid:19,languag:[3,4,11,13,14,17,19,25,28],larg:[1,10,12,13,16,20,28],larger:[3,12,25],largest:[3,18,23,24,25],last:[0,5,8,18,19,23,24,25],last_update_tim:27,lastli:[0,3,20,24],latenc:[3,24],later:[3,13,28],latest:[13,15,18,25],latter:[12,18,19,22,23,24,25],layout:7,lazi:3,ldd:1,lead:[10,13,18,23,24,25],leafcount:[18,23],learn:[17,19,24,25,28],least:[18,23],leav:[6,8,10,18,20,24,25],lecat:[18,23],left:[3,10,18,23,24,25],left_:[18,23,24,25],left_a:25,left_abc:24,left_b:25,left_c:25,left_xyz:24,legibl:24,lemon:1,len:[18,24],length:[16,18,23],less:[1,3,5,10,18,19,23,24,25,28],lesseng:4,lessor:4,let:[0,3,4,10,11,18,23,24,25,28],letter:[4,13,18,23,24],level:[3,4,18,19,23,24,25,28],levelstep:4,lexic:[10,18,23,25],lf2cr:23,lf2crlf:23,lflf:[18,23],lib:1,librari:[1,4,10,18,19,24],libtool:1,life:28,light:[13,18,24,25],lighter:19,like:[0,1,3,4,6,10,12,13,17,18,19,22,23,24,27,28],likewis:[3,9,10,11,13,20,22,23,24,25],limit:[4,12,18,23,24,25,27],lin:10,line:[0,1,4,6,7,8,9,10,11,12,17,18,19,20,22,24,25,28],lineag:19,linear:[18,21,25],linefe:[13,18,23],link:[1,15,25],linkag:24,linreg:[7,18,21,23,25],linux:[1,10,13,15,18,23,28],linux_x86_64:1,list:[0,1,3,10,13,17,18,19,23,24,25,28],lite:[10,13,18,22,23,25],liter:[3,8,18,25],littl:[1,4,10,23,24,27,28],lld:[18,25],load:[6,10,12,18,23,25,27],loadmilli:23,loadsec:[13,22,23,25],loan:4,local:[1,11,17,18,27],localtim:10,localtime2sec:[18,23],locat:[1,4,18,23],log10:[18,23,25],log1p:[18,23],log:[4,12,13,14,18,23,25,28],logarithm:[18,24],logger:13,logic:[5,18,24],logifit:[18,23],logireg:[18,25],logist:[18,24,25],look:[0,1,3,4,7,9,10,13,17,18,24,25],lookup:[3,25],loop:[3,4,8,18,28],lose:[4,18,19,24],lost:[18,23,25],lot:[0,28],love:28,low:[18,19,24,25,28],lower:[18,25,28],lowercas:[18,24],lstrip:[18,23,25],lua:24,m_e:[18,24,25],m_pi:[18,24,25],mac:4,machin:[12,13,28],maco:1,macosx:[13,15,18,23],macport:[1,15],madd:[18,23],made:[10,19,23,24,25,28],mag:4,magnitud:20,mai:[1,3,10,13,15,18,20,22,23,24,25],mail:25,mailto:[1,2],main:[0,8,13,14,18,19,20,22,24,25],mainli:[19,28],mainstai:9,maintain:24,make:[1,3,4,10,11,18,19,23,24,25,28],makefil:1,male:25,malform:3,man:[1,18,24,25,28],manag:1,mand:4,mani:[1,3,18,19,20,24,25,28],manipul:19,manpag:[1,14,25],mantissa:23,manual:18,map2dkvplin:8,map:[3,4,8,10,11,12,13,18,23,25],mapdiff:[18,23],mapexcept:[18,23],mapselect:[18,23],mapsum:[3,18,23],margin:24,mark:[4,24],markdown:[18,23],marker:13,marvel:28,mask:24,master:1,masterdata_colourcode_1:10,masterdata_colourcode_2:10,match:[3,10,18,23,24,25],math:[14,18,24],mathemat:[18,24],matrix:[4,18,25],matsumoto:1,matter:[3,16],mawk:20,max:[0,4,7,18,21,23,25,28],maximum:[13,18,24,25],maxit:4,maxn:3,maxnf:3,maxrow:3,mayb:[6,19,24,28],mbin:1,mean:[0,3,7,11,12,13,17,18,21,23,24,25,27,28],meaneb:[18,25],meanwhil:[4,16],mechan:23,media:1,median:[18,25],medium:[4,5,19,24,25,27],meet:25,member:[4,18,21,23],membership:4,memoiz:24,memori:[3,10,12,13,18,23,25],mention:[19,28],mere:[18,25],merg:[18,23],mersenn:1,messag:[6,13,18,23,24,25],messier:10,method:3,metric:[18,25],mexp:[18,23],miami:7,mid:20,middl:[3,10,25,28],might:[3,4,13,15,18,23,24,25],mildewi:4,miller:[2,3,4,5,6,7,8,10,11,12,13,15,16,17,18,20,22,23,25,26,27],million:3,mime:18,min:[0,3,4,7,18,21,23,25,28],mind:24,mingw64:1,mingw:1,minim:[18,23],minimum:[18,24,25,28],minu:[3,8,18,24],minunit:1,minut:[1,14],mishmash:10,miss:[6,10,18,22,23,25],misspel:[23,24],mistyp:[6,18,23],mix:[3,9,14,18,23,24,25],mkdat2:7,mkdir:1,mkstemp:1,mlr:[0,1,3,4,5,6,7,8,9,13,15,17,18,20,21,22,23,24,25,27,28],mlrrc:[14,18,23],mlrver:1,mmul:[18,23],mod:[6,18,23,24],mode:[18,24,25],moder:19,modern:[1,12,23],modif:1,modifi:[3,8,18,24,25],modul:19,moment:27,mono:23,month:[18,24,25],more:[0,1,3,4,5,9,11,13,17,18,19,23,24,25,28],moreov:[19,22,24],most:[12,13,18,19,23,24,27,28],move:[8,18,20,25],moving_averag:[18,25],msg:13,msp:18,msub:[18,23],msy:1,msys2:1,msys64:1,mt_string:[18,24],much:[3,12,19,20,24,25,27,28],mul:27,multi:[3,12,13,18,20,23,25,28],multicountdown:25,multilevel:24,multipl:[4,18,19,21,23,24,25,28],multipli:23,mung:12,music:9,must:[3,18,22,23,24,25,28],musta:10,mustn:24,mutual:24,my_:25,my_bin_hi:25,my_bin_lo:25,my_x2_count:25,my_x3_count:25,my_x_count:25,mydata:[6,13,18,21,23],mydb:27,myfil:[13,18,23,24,25],myfile1:23,myfile2:23,mykei:[18,24],mymap:[13,18,24],myself:[1,28],mysql:27,mytabl:27,mytap:[18,24,25],myvar:24,n2c:[13,18,23],n2d:[13,18,23],n2j:[13,18,23],n2m:[13,18,23],n2p:[13,18,23],n2t:[13,18,23],n2x:[13,18,23],n_cumulative_perc:25,n_fraction:25,n_percent:25,nadir:10,name1:[18,25],name2:[18,25],name:[0,3,4,11,12,13,17,18,19,22,23,25],namegoesher:[18,25],namesak:[9,23],namespac:24,nan:24,nanosecond:8,narrow:24,nativ:19,natur:[12,13,18,22,23,24,25],nbin:[4,7,18,25],nearest:[18,24],nearli:23,neat:28,necessari:[1,13,18,23,24,28],need:[1,3,6,10,12,13,16,17,19,22,23,24,25,27,28],needless:1,needn:23,neg:[1,18,23,24,25],negat:[18,24],negro:10,negru:10,neither:[4,10,18,25],nero:10,nest:[10,18,23,24],netbsd:[1,15,18,23],network:[13,25],networkd:[13,25],never:[10,13,18,24,25],new1:[18,25],new2:[18,25],new3:[18,25],new_nam:[18,25],new_name_1:[18,25],new_name_2:[18,25],newfil:0,newlin:[8,18,22,23,25],newnam:10,newrec:3,next:[3,10,11,23,24,28],nf1:10,nf2:10,nf3:10,ng5:4,ngfunc:4,ngram:4,ngrid:13,nice:[4,6,19,28],nich:28,nidx:[3,4,10,18,21,23,25,27],nim:[19,24],nine:[10,23],nishimura:1,nkei:24,nobodi:[13,25],node:3,noir:10,nois:4,nomin:[8,18,23],non:[3,8,10,16,18,19,20,22,23,24,25,28],none:[18,23,25,27],nonesuch:23,nonetheless:[5,13],nor:[3,4,18,23,25],normal:[18,23,24],notat:[5,24],note:[3,8,10,12,13,18,19,23,25,28],noth:[0,18,23,24,28],notic:4,notifi:1,notion:24,now:[0,1,3,10,13,23,24,28],nowher:28,nr1:10,nr2:10,nrec:24,nth:[18,25],num:[3,4,18,24],num_filt:17,num_filtered_delta:17,num_posit:24,num_tot:24,number:[1,10,18,24,25,28],numcal:24,numer:[0,3,13,18,23,24,25],oasv:[13,18,23],oasvlit:[13,18,23],object:[18,23,24],obligatori:24,obtain:[1,7],occupi:3,occur:[18,25],occurr:[3,23],ocsv:[3,13,18,23,24,25],ocsvlit:[13,18,22,23],octal:[10,23],odkvp:[10,13,18,23,25],off:[0,1,4,6,12,18,24,25],offset:23,oflatsep:[18,24,25],ofmt:[3,4,10,13,18,23],oformat2:[18,23],ofs:[8,10,13,18,22,23,24,25],often:[0,3,5,23,25],ojson:[0,6,10,13,18,23,24,25,27],ojsonx:[13,18,23],old1:[18,25],old2:[18,25],old:[3,18,24,25,28],old_nam:[18,25],old_name_1:[18,25],old_name_2:[18,25],oldk:3,ols:[7,18,25],omap:8,omd:[13,18,23],omit:[0,10,18,24,25],onc:[3,11,18,23,24,25],one:[0,1,3,4,6,7,10,11,12,13,15,17,18,19,20,23,24,25,28],ones:[6,24],onidx:[13,18,22,23,25,27],onli:[0,1,3,10,12,13,18,23,25,27,28],onlin:19,onward:[10,15,26],ooo:4,open:[1,18,24],oper:[0,4,11,12,18,19,22,25],operand:23,opprint:[0,3,4,5,7,8,10,13,17,18,21,22,23,24,25,27],ops:[6,8,18,23],opt:28,optim:28,option:[0,4,6,10,18,19,24,25,28],orang:[3,7,13,23,25],order:[0,1,3,12,18,20,23,24,25,27,28],ordereddict:8,ordinari:[18,23,25],orecord:3,org:[1,4,10,15,18,19,23,24,25],orient:23,origin:[0,1,3,7,8,10,14,18,23,24,25,28],ors:[13,18,23],os_vers:23,osx:[15,28],other:[1,2,3,5,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,28],othernam:23,otherwis:[6,8,18,23,24,25],otsv:[13,18,23],otsvlit:[13,18,23],our:[0,10,12,13],ousv:[13,18,23],ousvlit:[13,18,23],out:[1,4,7,8,10,12,13,14,17,18,19,23,25,28],out_:[18,25],outer:[3,18,24,25],outer_a:24,outer_b:24,outer_c:24,outer_d:24,outermost:[10,13,18,23],outfil:23,output:[0,1,4,6,12,13,16,18,20,21,23,25,28],outputfilenamegoesher:0,outsid:[1,3,10,24],over:[4,5,8,18,21,23,24,25,28],overflow:[18,23,24],overrid:[4,6,10,23,25],overridden:[18,23,25],overwrit:[18,24,25],overwritten:[23,24],ovxr:3,owes:19,own:[3,4,5,17,18,19,23,24,25],owner:[18,25],oxtab:[0,3,4,5,7,10,13,18,22,23,24,25],oxx:4,oxxx:4,oxxxxx:4,oxxxxxx:4,oxxxxxxxxxx:4,p100:[0,7,18,25],p10:[0,3,7,18,21,23,25],p25:[0,4,18,25],p2c:[13,18,23],p2d:[13,18,23],p2j:[13,18,23],p2m:[13,18,23],p2n:[13,18,23],p2t:[13,18,23],p2x:[13,18,23],p50:[0,3,7,18,21,23,25],p75:[0,4],p90:[0,3,7,18,21,23,25],p95:7,p98:[18,25],p99:[0,7,25],p_count:4,pack:23,packag:[1,18,23],pacman:1,pad:3,page:[14,18,20,23],pageset:1,pai:28,paid:10,pair:[0,4,7,8,10,12,18,20,24,25,28],pairwis:7,palett:4,palm:7,pan:[3,4,5,8,10,13,23,24,25,27],pan_pan:24,panda:12,panpan:8,par:12,paradigm:28,parallel:10,paramet:[4,18,25],parameter:13,parenthes:[23,24],pars:[10,11,13,18,23,24],parser:[1,13,18,25],part:[6,13,14,17,18,23,24,25,28],partial:3,particip:[18,19,23,24],particular:[3,4,7,11,13,15,17,18,19,24,25],particularli:[3,13,18,23,25],pass:[0,8,12,13,18,19,21,23,24,25,28],passwd:[13,25],password:[13,25],past:[3,4,18,25],patch:19,path:[1,3,6,13,22,23,25],pattern:[14,23,25],payment_typ:10,pca:[18,21,23,25],pcre:1,pct:3,peek:7,penalti:23,pend:10,peopl:[19,24,28],per:[0,3,6,13,18,21,22,23,24,25],percent:[18,20,25],percentil:[18,25],perform:[3,11,12,14,19,23,24,25,28],perhap:[3,8,13,15,24],perl:[19,24,28],permut:[18,25],persist:[3,24],person:[18,23,28],pgr:25,philosophi:[19,23],php:24,pick:[1,17],pictur:[4,10],piec:[10,18,25],pipe:[0,3,8,10,12,18,19,21,23,24,27,28],pipelin:[10,23],pivot:[18,25],pkg:1,place:[0,10,13,18,19,20,24,25,28],plain:[7,9,18,25],plan:16,plane:4,plastinguish:4,platform:[1,11,13,15,18,20,23],pleas:[1,2,3,5,8,10,13,15,16,18,19,23,24,25,28],plenti:1,plot:[4,18,25],plotter:4,plu:[18,23,24],plug:[19,28],png:4,poignant:19,point:[0,3,4,8,10,13,15,18,19,23,24,25],politici:4,polyglot:8,pop:[7,8],popul:24,port:[1,15,26,28],portabl:[1,12],portfil:1,posit:[0,12,13,18,19,22,23],position:[3,12,18,20],posix:23,possibl:[12,24,28],post:[12,27],postfix:25,pow:[18,23],power:[10,13,18,19,24,25],pprint:[0,10,16,18,23,24,25],practic:[4,24],pre:[1,3,10,18,23,28],preced:[18,23,25],precis:[10,13,18,19,23,24,25],preclud:28,precompil:[1,15,23],predefin:[18,25],prefer:[0,1,3,6,24,25,28],prefix:[1,13,18,23,24,25],prep:28,prepar:[12,25],prepend:[18,25],prepip:[18,23,25],prerequisit:1,present:[1,3,5,13,17,18,23,24,25],presum:1,pretti:[0,4,6,8,12,18,19,21,23,25],previou:[0,1,3,15,18,20,25],previous:[18,25],previous_count:3,prevtemp:3,price:[3,28],primari:1,primarili:[0,18,23,25,28],prime:4,princip:[18,20,25],print:[3,4,6,8,10,11,12,17,18,19,21,23,25],printabl:10,printf:[18,23,24,25],printn:[4,18,24],pro:23,probabl:[7,13,23,24,25],problem:[3,10,24,28],process:[0,3,4,6,8,10,11,12,13,14,18,19,20,21,23,24,25,27,28],processor:[3,13,23],produc:[1,3,4,7,10,12,13,18,20,23,24,25,27],product:[4,9,10,23],program:[3,10,17,18,19,20,23,24,25,28],programat:23,programm:11,progress:[6,10,18,23,25],project:[1,15],prompt:18,prone:[5,24],propag:[1,24],properti:[7,12,24],prosaic:9,protect:10,protocol:[13,25],prototyp:24,provid:[5,23,24],pseudorandom:1,publish:1,pull:1,punctuat:[3,24,28],pure:3,purpl:[0,3,7,13,23,25],purple_squar:0,purple_triangl:0,purpos:[3,4,12,13,20,28],push:[1,19],put:[0,3,4,5,8,9,13,18,19,21,28],python2:8,python3:8,python:[4,18,19,24,28],qnorm:[18,23],qoh:3,qualiti:[18,25],quaniti:24,quant:23,quantiti:[0,13,23,24,25,28],quantity_count:0,quantity_max:0,quantity_mean:0,quantity_min:0,queri:[7,12,27,28],question:[3,10,19,24],quick:[3,7,12,13,14,18,19,23,25,28],quicker:[24,28],quit:[1,13,18,19,23,24],quot:[13,18,23,24,25],quotient:[18,23,25],rag:[6,18,22,23],ram:[3,12,20,28],ran:28,random:[14,24],randomli:[18,25],rang:23,rate:[0,3,4,28],rate_p0:0,rate_p100:0,rate_p10:0,rate_p25:0,rate_p50:0,rate_p75:0,rate_p90:0,rate_p99:0,rather:[0,1,3,5,6,10,12,16,18,23,24,25],ratio:[0,18,25],raw:[19,23],rcorn:4,reach:24,reachabl:3,read:[0,3,4,8,11,13,18,22,23,24,25,28],reader:[13,24],readili:22,readlin:8,readm:1,readthedoc:[1,18,25,26],real:[4,23,28],realiz:28,realli:[0,17,19,24,28],reap:12,reason:[1,3,7,10,23,24,28],reassign:24,rebas:1,recal:24,recapitul:13,recip:19,recmax:[18,24,25],recommend:24,reconstruct:25,record:[0,4,7,8,10,11,12,13,14,17,18,19,20,24,27,28],record_count:[3,13,22,23,25],recordstream:19,recov:[7,10,18,24],recreat:[18,23],rect:3,rectangular:22,recurs:[3,10,24],red:[0,3,7,10,13,23,24,25],red_circl:0,red_squar:0,redeclar:24,redefin:24,redirect:[18,23,25],reduc:[1,12,21],reduct:[12,19,28],redund:23,refactor:3,refer:[0,10,11,13,18,19,22,28],reformat:12,regard:13,regardless:[10,13,18,23,24,25],regener:4,regex:[18,24,25],regextract:[18,23],regextract_or_els:[18,23],regress:[1,6,18,21,24,25],regular:[10,16,18],rel:10,relat:[3,16,23],releas:[10,12,13,14],relev:[12,18,20,23],reli:1,remain:[10,18,23,24,25],remaind:[18,23,24],rememb:[3,24],reminisc:24,remot:1,remov:[6,10,18,23,24],renam:[10,18,23],render:[4,13],reorder:[3,10,18,23],repeat:[18,23,24],repetit:[18,23,28],repif:[3,13,18,23,25],repip:[18,25],replac:[1,18,22,23,24,25,27],report:[2,12],repres:[10,13,18,24,25,28],represent:[10,23],request:[1,2,5,10,28],request_s:[18,25],requir:[3,8,10,12,13,18,19,23,24,25],rescu:8,resembl:24,reserv:24,reservoir:[18,25],reset:[18,24],reshap:[18,23],residenti:7,resolut:[4,23],resourc:[13,22,23,25],respect:[1,3,11,13,18,20,23,24,25],rest:[18,22,23,24,25,27],restart:1,restrict:24,result:[3,4,9,10,13,18,20,23,24,25],retain:[0,3,10,12,13,18,23,24,25],retent:12,retri:10,retval:24,reus:[3,19,23,24],revers:[18,25],revis:1,rfc4180:22,rfc:[13,18,23],rich:25,right:[3,4,7,10,18,23,24,25],right_123:24,right_789:24,right_:[18,23,24,25],right_a:25,right_b:25,right_c:25,rightmost:[18,24],role:10,roll:24,root:[3,13,18,24,25],rottend:4,rough:[18,25],roughli:20,round:[18,23],roundm:[18,23],routin:[1,8],row:[0,4,10,18,19,21,22,25,27,28],rpm:1,rreason:20,rstrip:[18,23,25],rsum:[18,23,25],rubi:[4,11,13,19,24,28],rule:[6,10,18,23,24,25],run:[1,3,5,10,13,17,18,20,21,23,24,25,28],runner:[18,25],running_sum:[18,24],runtim:[1,4,12,24],rust:[19,24],s_count:4,sadli:19,sai:[0,1,3,6,13,20,24,25,28],said:[10,24],sake:3,same:[0,1,3,4,5,6,7,10,13,17,18,20,22,23,24,25,28],sampl:[4,7,18,23],sar:3,save:[3,10,23,28],saver:[18,22,23,25],saw:28,sbin:[13,25],scalar:[18,24],scan:[10,24,25],scannabl:23,scanner:13,scenario:24,schema:[12,17,22,25],schwarz:10,scienc:[19,28],scientist:28,scope:[18,24],score:3,scp:12,scratch:28,screen:[0,4,13,23],screenshot:25,script:[4,7,10,19,21,28],sda:[18,23,25],search:[14,18,25],sec2dhm:[18,23],sec2gmt:[17,18,23],sec2gmtdat:[18,23],sec2hm:[18,23],sec2locald:[18,23],sec2localtim:[18,23],sec:27,second:[1,3,10,13,18,22,23,24,25,28],secondarili:[0,18,23,25],seconds_delta:3,section:[3,8,10,17,23,24,25,27],sed:[3,10,11,12,18,19,20,23,25,28],see:[1,3,4,7,8,13,15,16,18,19,20,22,23,24,25,28],seed:[4,18,23,24],seek:28,seem:[24,28],seen:[0,18,25],select:[12,15,21,24,25,27],self:[24,25],selfupd:15,selinux:1,sell:[0,24],semant:[1,10,16],semicolon:[10,18,23,25],seminol:7,send:[1,4,18,24,25,27],sens:[10,18,19,23,25],sensibl:10,sensic:[18,25],sent:[24,25],separ:[0,1,3,6,8,10,13,18,19,24,25],septemb:26,seqgen:[3,4,18,23,24],sequenc:[3,13,16,18,23,25],sequenti:10,server:[13,25],servic:[13,25],set:[1,6,11,12,13,15,18,19,23,24,25,27],setup:[1,12],seventh:28,sever:[8,13,19,24,28],sgn:[18,23],sha1sum:8,shadow:24,shallow:24,shape:[0,3,13,17,18,21,23,24,25],share:[0,1],sharper:10,shasum:1,shell:[1,6,10,13,18,23,24,25],sheredom:[1,16],shift:[18,24,25],shine:17,shorter:24,shorthand:[18,23,24,25],should:[10,12,13,18,19,23,24,25,28],show:[7,8,18,23,24,25,27],shown:[18,22,23,24],shuffl:[18,23],side:[3,4,12,18,23,24,25],sign:[13,18,23,24,25],signifi:23,significantli:[25,28],sikhnerd:15,silent:[6,18,23],similar:[17,18,19,23,24],similarli:[1,3,24],simon:25,simpl:[1,4,7,10,19,20,23,24,25,28],simpler:[3,10,24],simplest:[3,24],simpli:[1,3,4,5,10,13,15,17,18,22,23,24,25],simplic:[10,23,24],simultan:28,sin:[18,23],sinc:[1,3,6,8,9,10,17,18,23,24,25,27,28],sine:[18,24],singl:[3,12,18,19,23,24,25,28],sinh:[18,23],site:2,six:10,sixth:28,siyah:10,size:[4,18,19,23,25],skew:[18,25],skip:[6,13,18,23,24,27],slash:[18,23],slice:12,slightli:[18,23],slot:[18,24],slower:[24,25,28],small2:24,small:[3,4,5,8,10,13,19,23,24,25],smaller:25,smallest:[18,25],smooth:[18,25],snarf:12,social:1,softwar:[1,3,18,23,25,28],solut:10,solv:28,some:[3,5,7,8,12,13,14,19,20,22,23,24,25,27,28],somehow:[23,25],someon:[9,28],someothernam:25,somepattern:[18,24],sometext:3,someth:[6,7,12,13,17,18,19,23,24,25,28],sometim:[0,3,24,28],somewher:[0,1],soon:[13,24],sort:[3,6,7,10,11,12,13,17,18,19,20,21,22,23,24,27,28],sourc:[14,19,21,23],space:[3,4,7,13,18,23],spars:[3,25],spatialkei:7,spec:1,special:[12,18,20,22,23,24,25,27],specif:[1,8,13,15,18,19,20,23,24,25,26,28],specifi:[0,4,6,13,18,22,23,24,25],speed:[19,24],spell:[18,24],spelt:23,sphinx:1,spill:20,split:[0,8,10,13,18,21,24,25],splitkv:[18,23],splitkvx:[18,23],splitnv:[3,18,23],splitnvx:[18,23],spool:[13,25],spork:4,spot:24,spreadsheet:19,sprintf:[13,18,23],sql:[12,14,19,22,23,28],sqrt:[5,11,18,23,25],squar:[0,3,7,10,13,18,24,25],src:1,srec:24,srpm:1,sscanf:10,ssub:[10,18,23],stabl:[18,20,23,25],stack:[13,18,23,24,25],stage:23,stamp:3,stand:[3,17],standalon:[18,23],standard:[1,4,7,13,18,19,21,23,24,25,27],star:28,starrer:28,start:[1,3,6,11,13,18,23,24,25],starter:19,startup:[11,24],stash:24,stat:[4,7,14,18,25,27],statement:[4,5,11,13,17,18,23,25],statist:[0,12,18,19,21,23,25],stats1:[0,3,4,5,7,10,11,12,13,17,18,19,21,23,24,27,28],stats2:[7,18,19,21,23,24],stats_m:19,statu:[3,10,18,21,22,23,25],std:1,stddev:[5,13,18,25,28],stderr:[18,21,23,24,25],stdin:8,stdout:[18,23,24,25],steep:28,step:[1,3,4,5,8,10,12,17,18,23,24],stepper:[18,25],steve:9,sticki:[18,23],still:[10,18,24,25],stop:[3,4,18,24,25],store:23,str:[8,18,24],straight:[11,24],stream:[10,11,12,14,18,19,22,23,25,28],strength:[5,20,24],strftime:[18,23],strftime_loc:[18,23],strike:4,string:[3,8,13,16,18,22,25],stringifi:23,strip:[8,18,23,25],strive:19,strlen:[4,16,18,23],strptime:[1,3,10,18,23],strptime_loc:[18,23],structur:[3,10,11,12,13,18,19,25,28],stty:4,stuff:28,style:[9,10,12,18,23],sub:[8,16,18,21,23,25],subcommand:[9,11,18,19,23],subdirectori:[1,23],subhashmap:24,subject:[18,25],sublevel:24,submit:1,subordin:[18,24],subprocess:8,subr:[18,24],subroutin:[18,25],subsampl:[18,25],subsect:24,subsequ:[1,10,13,23,24],subset:10,substitut:10,substr:[4,18,23,25],substract:24,substream:12,subtract:[18,23,24],succe:10,success:[1,4,18,23,25],successfulli:1,succinctli:24,sudo:[1,15],suffic:23,suffici:[10,19],suffix:[18,25],suggest:[4,10,13,18,23,24],suitabl:3,sum1:24,sum2:24,sum3:24,sum:[4,5,11,18,19,21,23,24,25],suma:24,sumb:24,summat:24,sumn:4,sumw:4,sumwx:4,sumx2:5,sumx:[4,5,23],supperi:4,suppli:[18,23,25],support:[1,7,8,10,13,15,16,18,20,23,24,25,28],suppos:[0,1,3,6,10,13,17,24,25],suppress:[3,18,24,25],sure:[1,10,18,24,25],surpris:24,surround:10,survei:19,surviv:4,survivor:4,swap:24,sweet:24,symbol:[23,24],symmetr:24,symmetri:23,synonym:[13,18,23,24,25],synopsi:18,syntact:[11,24],syntax:[6,10,11,18,23,25],sys:[8,18,23,25],sys_load:[18,25],system:[1,3,8,10,12,13,15,17,18,19,20,23,25],systim:[3,4,8,18,23],syu:1,t2c:[13,18,23],t2d:[13,18,23],t2j:[13,18,23],t2m:[13,18,23],t2n:[13,18,23],t2p:[13,18,23,27],t2x:[13,18,23],t_delta:[4,8],t_delta_max:4,t_delta_mean:4,t_delta_min:4,tab:[3,8,10,13,18,23,27],tabl:[10,13,19,22,23,24,25,27],tabular:[0,4,7,10,12,16,18,23,25,28],tabwidth:1,tac:[3,11,12,18,23],tag:[1,26],tail:[0,11,12,13,18,23],take:[0,3,4,8,18,22,23,24,25],taken:[4,10,11,13,18,23,24,25],tan:[18,23],tangent:[18,24],tanh:[18,23],tap:[18,21,23,24],tar:1,task:[3,4,12,13,19,25],tast:3,tbl:[10,18,21,23,24],techinfo:1,technic:23,techniqu:23,tediou:5,tee:[0,18,21,23],teeabl:24,tell:28,temp:[18,23],temporari:23,ten:[4,28],term:[1,19,20,23,24,28],termcvt:[18,23],termin:[1,4,6,10,13,18,23,24,27],ternari:[18,24],test:[1,3,4,6,18,23,25,28],tester:10,text:[3,10,13,18,19,23,25,28],textproc:1,than:[0,1,3,5,6,10,11,12,13,16,18,19,20,23,24,25,28],thank:[10,25],thei:[0,3,6,8,10,13,18,23,24,25,28],them:[3,4,8,11,13,16,17,18,23,24,25,28],thereaft:23,thereof:24,theta:[18,25],thi:[0,1,2,3,4,5,6,9,10,11,12,13,15,17,18,19,20,22,23,24,25,27,28],thin:1,thing:[0,3,5,6,8,10,13,14,18,19,23,24,25,28],think:[19,22,23,28],thionin:4,third:[1,3,19,24,25,28],thirdli:24,thoma:1,those:[3,4,7,11,12,18,19,24,25,28],though:[0,6,18,23,24],thought:[5,28],thousand:28,thread:[23,25],three:[0,10,18,24,25],through:[0,3,10,11,13,18,23,24,25,28],throughput:[12,24],thu:[13,18,23,25],thx:3,tie:[18,25],ties:[18,25],tightli:7,tii:8,time1:[18,25],time2:[18,25],time:[0,1,3,8,10,11,12,13,17,18,19,20,23,24,25,28],time_delta:17,timestamp:[4,10,17,18,24,25],timezon:[10,18,24],tinyint:27,tip:[10,18,23],titl:25,tiv_2011:7,tiv_2011_tiv_2012_corr:7,tiv_2011_tiv_2012_ols_b:7,tiv_2011_tiv_2012_ols_m:7,tiv_2011_tiv_2012_ols_n:7,tiv_2011_tiv_2012_r2:7,tiv_2012:7,tiv_2012_max:7,tiv_2012_mean:7,tiv_2012_min:7,tmp:[18,24],to_:8,todai:22,togeth:[0,4,9,10,17,18,19,23,24,25],toler:23,tolow:[16,18,23],too:[18,20,22,24,25,28],took:[10,28],tool:[4,8,9,10,12,13,18,19,20,21,23,25],toolchain:1,toolkit:[9,12,14,18,19,20,23],top:[0,11,18,23,24],top_idx:[18,25],topic:4,total:[3,7,18,24,25],touch:[18,25],toupper:[0,16,18,23],toward:23,trace:[18,21,24,25],track:[3,15,24],trail:[18,23,24,25],transform:[4,25,28],transit:4,transpar:[1,18,23,25],transpos:[13,18,23],travi:[1,15],treat:[10,16,18,23,25],tree:[1,3,18,23,24,25],tri:[10,28],triangl:[0,3,7,13,25],tribut:9,trick:3,tricki:10,trickl:28,trigger:[13,18,23],trigonometr:[18,24],trivial:[3,8,18,23,28],truli:[10,13],truncat:[18,23],tsv:[3,12,18,23,27,28],tsvlite:[13,18,23,27],tune:25,tupl:24,turn:[1,18,19,23,24],turnaround:19,twice:4,twister:1,two:[1,6,10,13,18,20,23,24,25,28],txt:[0,1,3,4,13,17,18,24,25],type:[3,5,6,8,10,13,17,18,25,27,28],type_str:8,typedecl:24,typesaf:28,typesafeti:28,typo:[1,28],u_count:[4,7,13,25],u_max:7,u_mean:[7,13,25],u_min:7,u_p50:25,u_p99:25,u_stddev:13,u_v_corr:7,ubuntu:[1,15],udp:1,uid2:3,uid:[3,13,25],unambigu:24,unari:[18,24],uncategor:7,uncondition:24,undefin:[13,18,24,25],under:[18,23,24,25],underscor:3,understood:6,undo:[18,25],unencumb:1,unexpect:24,unhappi:28,unhex:[18,23],unicod:[10,13,18,23],uniform:[7,25],uniformli:[18,24,25],uniniti:24,union:[3,18,25],uniq:[3,11,18,23,27],uniqifi:24,uniqu:[3,18,25,28],unit:[1,7,18,24,25,28],univari:[7,18,25],unix:[9,10,12,13,14,18,19,20,23,25],unlash:[18,25],unless:[6,18,23,24,25],unlik:[11,12,13,24],unmanag:28,unmiller:[18,23],unmodifi:0,unpair:[3,18,25],unpars:13,unprivileg:[13,25],unrel:23,unset:[3,10,18,21,23],unsort:[18,25],unsparsifi:[3,10,18,23],unstabl:20,unsurpris:24,until:[3,13,18,23,24,25,28],untyp:[18,24],unwanted_column_nam:[0,23],updat:[1,10,11,15,18,23,24,25],upload:1,upon:[13,18,23],upper:[4,18,25],uppercas:[18,24],upsec:[18,21,23,25],upsec_count_pca_b:25,upsec_count_pca_m:25,upsec_count_pca_n:25,upsec_count_pca_qu:25,upstream:1,uptak:19,uptim:[18,19,21,23,25],upward:15,urand32:[18,23],urand:[4,18,23,25],urandint:[18,23],urandrang:[18,23],url:[1,23],usag:[6,13,18,23,24,25],use:[0,1,2,3,4,8,10,12,13,17,18,19,20,22,23,24,25,27,28],used:[6,10,13,18,23,24,25,28],useful:[12,13,18,23,24,25,28],usefulness:9,user:[1,13,18,23,25,28],uses:[10,13,18,24,28],using:[0,3,4,5,7,8,10,12,13,15,16,17,18,19,20,21,23,24,25,27],usr:[1,8,13,25],usual:[18,23,24],usv:[18,23],usvlit:[13,18,23],utf8:16,utf:[1,10,13,16,18,23],util:[12,18,23,28],uucico:[13,25],uucp:[13,25],v_count:7,v_max:7,v_mean:7,v_min:7,v_p50:25,v_p99:25,valid:[10,13,18,23],valkoinen:10,valu:[0,6,7,8,10,11,12,17,18,19,20,23,27,28],value1:[18,25],value2:[18,25],value_pair:10,valuetyp:24,varchar:27,vari:[0,20,22],variabl:[4,6,10,11,14,18,23,25,28],variad:[18,24],varianc:[18,25],variant:[20,24],varieti:[12,18,28],variou:[1,3,13,15,17,19,20,24,25,28],vee:25,vein:4,veith:18,verb:[3,4,5,10,11,14,18,24,28],verbos:4,veri:[4,12,13,19,20,23,24,28],verifi:7,version:[1,10,18,20,23],versu:8,vertic:[0,7,10,18,23,25],via:[18,23,24],viewabl:24,visibl:28,visual:[4,25],w64:1,w_x_corr:7,wai:[0,1,3,4,5,10,12,18,20,22,23,24,25,28],wait:[4,13,18,24],walk:[1,24],wall:1,wang:25,want:[0,3,6,17,18,19,23,24,25,27,28],warn:[18,24,27],warranti:1,wash:3,wcolumn5:25,web:[4,13,24,28],webdoc:4,websit:18,weight:[18,25],well:[3,4,8,10,11,13,18,19,23,24,25,28],were:[1,9,10,13,18,23,24,25,28],west:10,what:[0,3,4,7,8,13,17,18,19,23,24,25],whatev:[1,3,4],whatsoev:17,when:[1,3,6,10,12,13,17,18,19,22,23,24,25,28],whenev:[6,10,12,18,23,24,26],where:[3,10,12,13,15,17,23,24,25,28],wherea:[23,24],wherev:1,whether:[0,17,18,23,24,25],which:[0,1,3,4,5,6,8,10,11,12,13,18,19,20,22,23,24,28],whichev:[23,27],whimsic:5,white:10,whitespac:[13,18,23,24],who:[9,24],whose:[10,24],why:[14,19,24],wide:[1,13,18,20,24,25],width:[1,13,18,23,25],wiki:[4,18,19,23,25],wikibook:19,wikipedia:[4,18,23,25],wild:25,wildcard:4,wilma:3,win:[18,23,24,25],window:[4,13,15,18,23],wish:[5,18,23,25,28],wit:10,within:[0,1,3,4,6,10,11,13,16,18,23,24,27],without:[0,3,4,10,11,12,14,16,18,19,23,24,25,28],wmean:4,won:[1,10,13,18,19,23,24,25,28],wonder:28,word:23,work:[1,4,7,10,12,13,18,23,25,28],world:[8,12,23,28],worth:28,would:[9,18,19,20,23,24,28],wouldn:[4,19],wrap:[13,18,23,24,25],wrapper:1,write:[0,1,4,8,10,13,17,18,19,23,24,25,28],written:[0,9,11,12,13,18,23,24,25,28],wrote:[19,20,28],www:[1,18,19,25],wye:[3,4,5,8,10,13,23,24,25,27],wye_pan:24,wye_wy:24,wyepan:8,wyewy:8,x00:23,x2_count:25,x2_xy_corr:25,x2_xy_cov:25,x2_y2_corr:25,x2_y2_cov:25,x2c:[13,18,23],x2d:[13,18,23],x2j:[13,18,23],x2m:[13,18,23],x2n:[13,18,23],x2p:[13,18,23],x2t:[13,18,23],x3_count:25,x7f:23,x86:15,x86_64:1,x_1:[18,25],x_2:[18,25],x_3:[18,25],x_count:[5,24,25],x_counter:25,x_cumulative_fract:[18,25],x_delta:[5,25],x_ewma_0:[5,25],x_ewma_rough:25,x_ewma_smooth:25,x_fraction:[18,25],x_iqr:4,x_max:[3,5,25],x_mean:[5,24,25],x_min:[3,5,25],x_p10:25,x_p25:4,x_p50:25,x_p75:4,x_p90:25,x_pct:3,x_rsum:25,x_shift:25,x_stddev:5,x_sum:[5,24,25],x_top:25,x_type:24,x_var:5,x_y_corr:[24,25],x_y_cov:25,x_y_ols_b:25,x_y_ols_m:25,x_y_ols_n:25,x_y_pca_b:25,x_y_pca_m:25,x_y_pca_qu:25,x_y_r2:25,xcv:10,xeksx:25,xenial:15,xff:23,xiao:10,xmax:[18,24,25],xmin:25,xor:[18,24],xpanx:25,xsv:28,xtab:[0,10,16,18,23,25],xvright:[18,23],xwyex:25,xxx:4,xxxx:4,xxxxx:4,xxxxxx:4,xxxxxxooo:4,xxxxxxx:4,xxxxxxxooxxxx:4,xxxxxxxx:4,xxxxxxxxx:4,xxxxxxxxxx:4,xxxxxxxxxxo:4,xxxxxxxxxxxx:4,xxxxxxxxxxxxoo:4,xxxxxxxxxxxxx:4,xxxxxxxxxxxxxxx:4,xy_y2_ols_b:25,xy_y2_ols_m:25,xy_y2_ols_n:25,xy_y2_r2:25,xyz:[18,24],xyz_789:24,y_count:25,y_iqr:4,y_max:25,y_mean:25,y_min:25,y_p10:25,y_p25:4,y_p50:25,y_p75:4,y_p90:25,y_sum:[24,25],y_type:24,y_y_corr:25,y_y_cov:25,y_y_ols_b:25,y_y_ols_m:25,y_y_ols_n:25,y_y_r2:25,year:[18,24,25,28],yellow:[0,3,7,13,24,25],yellow_circl:0,yellow_triangl:0,yes:28,yet:[7,18,23,25],yfit:25,yhat:[18,24],yield:[18,24],ymax:25,ymin:25,yml:1,yosemit:[1,15],you:[0,1,3,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20,22,23,24,25,28],your:[0,1,3,4,10,11,12,13,15,17,18,22,23,24,25],yourself:5,yourstringher:13,yum:[1,15],zcat:[18,23],zee:[4,5,24,25,27],zenith:10,zero:[3,10,12,18,23,24,25],zone:[18,24],zoom:4,zwart:10,zxvf:1},titles:["Miller in 10 minutes","Building from source","Contact","Cookbook part 1: common patterns","Cookbook part 2: Random things, and some math","Cookbook part 3: Stats with and without out-of-stream variables","Customization: .mlrrc","Data-diving examples","Mixing with other languages","Why call it Miller?","FAQ","Unix-toolkit context","Features","File formats","Miller Docs v2","Installation","Internationalization","Log-processing examples","Manpage","How original is Miller?","Performance","Quick examples","Record-heterogeneity","Main reference","DSL reference","Verbs reference","Documents by release","SQL examples","Why?"],titleterms:{"9th":10,"boolean":24,"case":1,"float":24,"function":24,"int":24,"new":1,"null":[23,24],"return":24,"typeof":24,"while":24,Doing:3,For:[22,24],Using:[],about:10,abs:24,absent:[23,24],aco:24,acosh:24,action:24,after:10,aggreg:24,algorithm:3,all:[3,10,24],also:11,altkv:25,arithmet:23,arrai:13,asin:24,asinh:24,assert:24,asserting_abs:24,asserting_bool:24,asserting_boolean:24,asserting_empti:24,asserting_empty_map:24,asserting_float:24,asserting_int:24,asserting_map:24,asserting_nonempty_map:24,asserting_not_empti:24,asserting_not_map:24,asserting_not_nul:24,asserting_nul:24,asserting_numer:24,asserting_pres:24,asserting_str:24,assign:[10,24],asv:13,atan2:24,atan:24,atanh:24,autoconfig:1,autodetect:13,auxiliari:23,averag:5,awar:11,awk:11,background:14,bar:25,begin:24,between:3,bitcount:24,block:24,bootstrap:25,brace:24,build:[1,15],built:24,bulk:3,call:9,can:[6,10],capit:24,captur:23,cat:25,cbrt:24,ceil:24,chain:[10,23],check:[24,25],choic:0,clean:[3,25],clean_whitespac:24,clone:1,collapse_whitespac:24,color:7,column:25,comma:[10,24],command:[8,23],comment:13,common:3,complex:24,compress:23,comput:[3,4],consecut:10,contact:2,context:11,control:24,convers:[10,13,23],cookbook:[3,4,5],cos:24,cosh:24,count:[3,25],creat:[1,28],csv:[0,3,13,22],curli:24,custom:6,cut:[10,25],data:[3,7,10,13,23,24],date:[3,10],deal:3,decim:25,declar:24,defin:24,delimit:10,delta:5,depend:1,depth:24,detail:14,develop:1,deviat:5,dhms2fsec:24,dhms2sec:24,diagnos:10,differ:3,disclaim:20,distinct:25,distribut:4,dive:7,divis:23,dkvp:[8,13],doc:14,document:26,doesn:10,down:25,dsl:24,dump:24,duplic:3,emit:24,empti:[23,24,25],end:[13,24],eratosthen:4,erf:24,erfc:24,error:24,escap:10,etc:13,examin:10,exampl:[0,3,7,8,13,17,21,27],execut:15,exp:24,expm1:24,exponenti:5,express:[23,24],extern:1,faq:10,featur:[3,11,12,25],field:[3,10,23,24,25],file:[0,3,10,11,13,24],fill:25,filter:[10,11,23,24,25],find:3,flin:7,floor:24,fmtnum:24,format:[0,10,11,13,22,23,24,25],forward:28,fraction:25,frequent:25,from:[1,4,15,24],fsec2dhm:24,fsec2hm:24,full:3,gener:4,git:1,github:15,gmt2sec:24,grep:25,group:25,gsub:24,handl:10,haskei:24,have:[3,25],head:25,headerless:3,help:23,heterogen:22,hexfmt:24,histogram:25,hms2fsec:24,hms2sec:24,how:[6,10,19],index:[13,14,22,24],input:[3,8,23,27],instal:15,intern:1,internation:16,interquartil:4,invqnorm:24,is_abs:24,is_bool:24,is_boolean:24,is_empti:24,is_empty_map:24,is_float:24,is_int:24,is_map:24,is_nonempty_map:24,is_not_empti:24,is_not_map:24,is_not_nul:24,is_nul:24,is_numer:24,is_pres:24,is_str:24,jabberwocki:4,join:[3,10,25],joink:24,joinkv:24,joinv:24,json:[0,10,13],kei:[5,13,22,24],keystrok:13,keyword:24,label:25,languag:[8,23,24],leafcount:24,least:25,length:24,level:13,licens:1,like:[11,25],line:[3,13,23],list:4,liter:[23,24],local:24,localtime2sec:24,log10:24,log1p:24,log:[3,17,24],logifit:24,loop:24,lstrip:24,madd:24,main:23,manag:15,mandelbrot:4,manpag:18,map:24,mapdiff:24,mapexcept:24,mapselect:24,mapsum:24,markdown:13,math:[4,23],max:[3,5,24],mean:[4,5],memoiz:3,merg:25,mexp:24,miller:[0,1,9,14,19,24,28],min:[5,24],minut:0,misc:1,miss:3,mix:8,mlr:[10,11],mlrrc:6,mmul:24,mode:23,most:25,move:[5,28],msub:24,multi:24,multipl:3,name:[10,24],nest:[3,13,25],newlin:24,nidx:13,non:13,note:[1,24],noth:25,number:[3,4,13,22,23],numer:10,object:13,occur:10,onli:24,oosvar:5,oper:[23,24],option:[1,3,13,23],order:10,origin:19,other:[0,8],out:[3,5,24],output:[3,8,10,24,27],over:3,overview:[5,14,23,24,25],packag:15,pair:[13,22,23],paramet:24,pars:3,part:[3,4,5],pass:3,pattern:[3,24],per:15,percentag:3,perform:20,place:23,posit:24,possibl:10,pow:24,pprint:13,prebuilt:15,preced:24,pretti:[13,22],print:[0,13,22,24],problem:1,process:[17,22],program:4,put:[6,10,11,23,24,25],python:[8,23],qnorm:24,queri:3,quick:21,quot:10,rag:3,random:4,randomli:4,rang:4,ratio:3,reassign:3,record:[3,22,23,25],rectangular:[3,10],redirect:24,refer:[14,23,24,25],regex:[10,23],regextract:24,regextract_or_els:24,regular:[3,23,25],relat:28,releas:[1,15,26],remov:25,renam:[3,25],renumb:3,reorder:25,repeat:25,replac:3,requir:1,reshap:25,round:24,roundm:24,routin:23,row:3,rstrip:24,rubi:8,run:8,sampl:25,saver:13,scan:23,search:3,sec2dhm:24,sec2gmt:[24,25],sec2gmtdat:[24,25],sec2hm:24,sec2locald:24,sec2localtim:24,see:[10,11],select:[4,10],semant:24,semicolon:24,separ:23,seqgen:25,set:4,sgn:24,shape:7,share:25,shell:8,show:3,shuffl:25,siev:4,similar:25,sin:24,singl:[10,13],sinh:24,skip:25,some:4,sort:[0,25],sourc:[1,15],special:10,specif:10,split:3,splitkv:24,splitkvx:24,splitnv:24,splitnvx:24,sql:[8,27],sqrt:24,ssub:24,standard:5,stat:[0,5],statement:24,stats1:25,stats2:25,step:25,stream:[3,5,13,24],strftime:24,strftime_loc:24,string:[10,23,24],strip:24,strlen:24,strptime:24,strptime_loc:24,structur:24,style:[13,24],sub:24,subroutin:24,substr:24,success:3,summari:[20,24],suppress:10,symbol:10,syntax:24,system:24,systim:24,tabular:[13,22],tac:25,tail:25,tan:24,tanh:24,tarbal:1,tee:[24,25],test:24,them:10,thing:4,time:4,tolow:24,tool:28,toolkit:[11,13],top:25,toupper:24,tradeoff:28,transform:23,transpar:24,tripl:24,trivial:25,truncat:24,tsv:13,two:3,type:[23,24],uniq:25,unix:11,unpair:10,unset:24,unspars:3,unsparsifi:25,urand32:24,urand:24,urandint:24,urandrang:24,use:6,user:24,using:1,usv:13,valu:[3,13,22,24,25],variabl:[3,5,24],varianc:5,variou:[4,10],verb:[23,25],vertic:[13,22],via:15,want:10,weight:[4,5],what:[6,10,28],where:6,which:25,whitespac:25,who:28,why:[9,10,28],window:1,within:25,without:[1,5],word:4,xml:10,xtab:13,you:6,your:6}}) \ No newline at end of file diff --git a/docs6/_build/html/sql-examples.html b/docs6/_build/html/sql-examples.html deleted file mode 100644 index 228e6fb7f..000000000 --- a/docs6/_build/html/sql-examples.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - SQL examples — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

SQL examples

-
-

SQL-output examples

-

I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with mlr --tsv or mlr --tsvlite. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller – whichever is most convenient for my needs at the moment.

-

For example, using default output formatting in mysql we get formatting like Miller’s --opprint --barred:

-
$ mysql --database=mydb -e 'show columns in mytable'
-+------------------+--------------+------+-----+---------+-------+
-| Field            | Type         | Null | Key | Default | Extra |
-+------------------+--------------+------+-----+---------+-------+
-| id               | bigint(20)   | NO   | MUL | NULL    |       |
-| category         | varchar(256) | NO   |     | NULL    |       |
-| is_permanent     | tinyint(1)   | NO   |     | NULL    |       |
-| assigned_to      | bigint(20)   | YES  |     | NULL    |       |
-| last_update_time | int(11)      | YES  |     | NULL    |       |
-+------------------+--------------+------+-----+---------+-------+
-
-
-

Using mysql’s -B we get TSV output:

-
$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat
-Field            Type         Null Key Default Extra
-id               bigint(20)   NO  MUL NULL -
-category         varchar(256) NO  -   NULL -
-is_permanent     tinyint(1)   NO  -   NULL -
-assigned_to      bigint(20)   YES -   NULL -
-last_update_time int(11)      YES -   NULL -
-
-
-

Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.:

-
$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat
-[
-  {
-    "Field": "id",
-    "Type": "bigint(20)",
-    "Null": "NO",
-    "Key": "MUL",
-    "Default": "NULL",
-    "Extra": ""
-  },
-  {
-    "Field": "category",
-    "Type": "varchar(256)",
-    "Null": "NO",
-    "Key": "",
-    "Default": "NULL",
-    "Extra": ""
-  },
-  {
-    "Field": "is_permanent",
-    "Type": "tinyint(1)",
-    "Null": "NO",
-    "Key": "",
-    "Default": "NULL",
-    "Extra": ""
-  },
-  {
-    "Field": "assigned_to",
-    "Type": "bigint(20)",
-    "Null": "YES",
-    "Key": "",
-    "Default": "NULL",
-    "Extra": ""
-  },
-  {
-    "Field": "last_update_time",
-    "Type": "int(11)",
-    "Null": "YES",
-    "Key": "",
-    "Default": "NULL",
-    "Extra": ""
-  }
-]
-
-$ mysql --database=mydb -B -e 'select * from mytable' > query.tsv
-
-$ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to
-category assigned_to id_count
-special  10000978    207
-special  10003924    385
-special  10009872    168
-standard 10000978    524
-standard 10003924    392
-standard 10009872    108
-...
-
-
-

Again, all the examples in the CSV section apply here – just change the input-format flags.

-
-
-

SQL-input examples

-

One use of NIDX (value-only, no keys) format is for loading up SQL tables.

-

Create and load SQL table:

-
mysql> CREATE TABLE abixy(
-  a VARCHAR(32),
-  b VARCHAR(32),
-  i BIGINT(10),
-  x DOUBLE,
-  y DOUBLE
-);
-Query OK, 0 rows affected (0.01 sec)
-
-bash$ mlr --onidx --fs comma cat data/medium > medium.nidx
-
-mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ;
-Query OK, 10000 rows affected (0.07 sec)
-Records: 10000  Deleted: 0  Skipped: 0  Warnings: 0
-
-mysql> SELECT COUNT(*) AS count FROM abixy;
-+-------+
-| count |
-+-------+
-| 10000 |
-+-------+
-1 row in set (0.00 sec)
-
-mysql> SELECT * FROM abixy LIMIT 10;
-+------+------+------+---------------------+---------------------+
-| a    | b    | i    | x                   | y                   |
-+------+------+------+---------------------+---------------------+
-| pan  | pan  |    1 |  0.3467901443380824 |  0.7268028627434533 |
-| eks  | pan  |    2 |  0.7586799647899636 |  0.5221511083334797 |
-| wye  | wye  |    3 | 0.20460330576630303 | 0.33831852551664776 |
-| eks  | wye  |    4 | 0.38139939387114097 | 0.13418874328430463 |
-| wye  | pan  |    5 |  0.5732889198020006 |  0.8636244699032729 |
-| zee  | pan  |    6 |  0.5271261600918548 | 0.49322128674835697 |
-| eks  | zee  |    7 |  0.6117840605678454 |  0.1878849191181694 |
-| zee  | wye  |    8 |  0.5985540091064224 |   0.976181385699006 |
-| hat  | wye  |    9 | 0.03144187646093577 |  0.7495507603507059 |
-| pan  | wye  |   10 |  0.5026260055412137 |  0.9526183602969864 |
-+------+------+------+---------------------+---------------------+
-
-
-

Aggregate counts within SQL:

-
mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC;
-+------+------+-------+
-| a    | b    | count |
-+------+------+-------+
-| zee  | wye  |   455 |
-| pan  | eks  |   429 |
-| pan  | pan  |   427 |
-| wye  | hat  |   426 |
-| hat  | wye  |   423 |
-| pan  | hat  |   417 |
-| eks  | hat  |   417 |
-| pan  | zee  |   413 |
-| eks  | eks  |   413 |
-| zee  | hat  |   409 |
-| eks  | wye  |   407 |
-| zee  | zee  |   403 |
-| pan  | wye  |   395 |
-| wye  | pan  |   392 |
-| zee  | eks  |   391 |
-| zee  | pan  |   389 |
-| hat  | eks  |   389 |
-| wye  | eks  |   386 |
-| wye  | zee  |   385 |
-| hat  | zee  |   385 |
-| hat  | hat  |   381 |
-| wye  | wye  |   377 |
-| eks  | pan  |   371 |
-| hat  | pan  |   363 |
-| eks  | zee  |   357 |
-+------+------+-------+
-25 rows in set (0.01 sec)
-
-
-

Aggregate counts within Miller:

-
$ mlr --opprint uniq -c -g a,b then sort -nr count data/medium
-a   b   count
-zee wye 455
-pan eks 429
-pan pan 427
-wye hat 426
-hat wye 423
-pan hat 417
-eks hat 417
-eks eks 413
-pan zee 413
-zee hat 409
-eks wye 407
-zee zee 403
-pan wye 395
-hat pan 363
-eks zee 357
-
-
-

Pipe SQL output to aggregate counts within Miller:

-
$ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count
-a   b   count
-zee wye 455
-pan eks 429
-pan pan 427
-wye hat 426
-hat wye 423
-pan hat 417
-eks hat 417
-eks eks 413
-pan zee 413
-zee hat 409
-eks wye 407
-zee zee 403
-pan wye 395
-wye pan 392
-zee eks 391
-zee pan 389
-hat eks 389
-wye eks 386
-hat zee 385
-wye zee 385
-hat hat 381
-wye wye 377
-eks pan 371
-hat pan 363
-eks zee 357
-
-
-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/_build/html/why.html b/docs6/_build/html/why.html deleted file mode 100644 index 531921274..000000000 --- a/docs6/_build/html/why.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - Why? — Miller 5.10.2 documentation - - - - - - - - - - - - - - - - -
-
-
-
- -
-

Why?

-

Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers.

-
-

Who is Miller for?

-

For background, I’m a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. Initially I wrote Miller mainly for myself: I’m coder-friendly (being a coder); I’m Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I’ve encountered them all); I do all my work on Linux or OSX.

-

But now there’s this neat little tool which seems to be useful for people in various disciplines. I don’t even know entirely who. I can click through Github starrers and read a bit about what they seem to do, but not everyone that uses Miller is even on Github (or stars things). I’ve gotten a lot of feature requests through Github – but only from people who are Github users. Not everyone’s a coder (it seems like a lot of Miller’s Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on.

-

So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn’t? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even is in the first place? Should I think differently about who it’s for?

-
-
-

What was Miller created to do?

-

First: there are tools like xsv which handles CSV marvelously and jq which handles JSON marvelously, and so on – but I over the years of my career in the software industry I’ve found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same except for format. So the number one thing about Miller is doing common things while supporting multiple formats: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream – either in the same format as input, or in a different format.

-

Second thing, a lot like the first: just as I didn’t want to build something only for a single file format, I didn’t want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to solve as many problems simultaneously as possible.

-

Third: it had to be streaming. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it’s maybe less important, but I’m unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time.

-

Fourth: it had to be fast. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a lot lower – it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn’t write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C.

-

Fifth thing: I wanted Miller to be pipe-friendly and interoperate with other command-line tools. Since the basic paradigm is ingest records, transform records, emit records – where the input and output formats can be the same or different, and the transform can be complex, or just pass-through – this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the “real” work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can.

-

Sixth thing: Must have comprehensive documentation and unit-test. Since Miller handles a lot of formats and solves a lot of problems, there’s a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself – not only through web docs like the one you’re reading but also through man mlr and mlr --help, mlr sort --help, etc.

-

Seventh thing: Must have a domain-specific language (DSL) but also must let you do common things without it. All those little verbs Miller has to help you avoid having to write for-loops are great. I use them for keystroke-saving: mlr stats1 -a mean,stddev,min,max -f quantity, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: mlr put '$distance = $rate * $time' or anything else you can think up. In Perl/AWK/etc. it’s all DSL. In xsv et al. it’s all verbs. In Miller I like having the combination.

-

Eighth thing: It’s an awful lot of fun to write. In my experience I didn’t find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don’t guarantee it’s unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life.

-
-
-

Tradeoffs

-

Miller is command-line-only by design. People who want a graphical user interface won’t find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying.

-

Another tradeoff: supporting lists of records – each with only one depth – keeps me supporting only what can be expressed in all of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn’t handle. So Miller can’t (and won’t) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats.

-

A third tradeoff is doing build-from-scratch in a low-level language. It’d be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an eval of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the rows tool – if you find Miller useful, you should check out rows as well.

-

A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed – so you can just say y=x+1 with a minimum number of keystrokes – vs. having it do a good job of telling you when you’ve made a typo. This is a common paradigm across all languages. Some like Ruby you don’t declare anything and they’re quick to code little stuff in but programs of even a few thousand lines (which isn’t large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get y=x+1 by default but you can have things like int y = x+1 etc. so the typesafety is opt-in. See also Type-checking for more information on type-checking.

-
- -
-

Moving forward

-

I originally aimed Miller at people who already know what sed/awk/cut/sort/join are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who don’t know what those things are; people who aren’t primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next.

-
-
- - -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs6/build.rst b/docs6/build.rst index a18af470b..9912f01df 100644 --- a/docs6/build.rst +++ b/docs6/build.rst @@ -11,13 +11,9 @@ Miller license Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt. -From release tarball using autoconfig +From release tarball ---------------------------------------------------------------- -Miller allows you the option of using GNU ``autoconfigure`` to build portably. - -Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous and expert efforts of `Thomas Klausner `_. - * Obtain ``mlr-i.j.k.tar.gz`` from https://github.com/johnkerl/miller/tags, replacing ``i.j.k`` with the desired release, e.g. ``2.2.1``. * ``tar zxvf mlr-i.j.k.tar.gz`` * ``cd mlr-i.j.k`` @@ -36,73 +32,12 @@ Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous * ``make check`` * ``make install`` copies the ``c/mlr`` executable to your prefix's ``bin`` subdirectory. -From git clone using autoconfig +From git clone ---------------------------------------------------------------- * ``git clone https://github.com/johnkerl/miller`` -* ``cd miller`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **automake autoconf libtool flex** -* Run ``autoreconf -fiv``. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.) -* Then continue from "Install the following ... " as above. - -Without using autoconfig ----------------------------------------------------------------- - -GNU autoconfig is familiar to many users, and indeed plenty of folks won't bother to use an open-source software package which doesn't have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I'm happy that Miller supports autoconfig. - -But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ``./configure && make`` output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can't figure out the build errors, you may just keep walking. For this reason I'm happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues.) - -Steps: - -* Obtain a release tarball or git clone. -* ``cd`` into the ``c`` subdirectory. -* Edit the ``INSTALLDIR`` in ``Makefile.no-autoconfig``. -* To change the C compiler, edit the ``CC=`` lines in ``Makefile.no-autoconfig`` and ``dsls/Makefile.no-autoconfig``. -* ``make -f Makefile.no-autoconfig`` creates the ``mlr`` executable and runs unit/regression tests (i.e. the equivalent of both ``make`` and ``make check`` using autoconfig). -* ``make install`` copies the ``mlr`` executable to your install directory. - -The ``Makefile.no-autoconfig`` is simple: little more than ``gcc *.c``. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I'm aware of successful use with ``gcc`` and ``clang``, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD. - -Windows ----------------------------------------------------------------- - -*Disclaimer: I'm now relying exclusively on* `Appveyor `_ *for Windows builds; I haven't built from source using MSYS in quite a while.* - -Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above). - -You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to ``C:\msys2\``) run ``C:\msys2\mingw64.exe``. Within the MSYS2 shell, you can run the following to install dependent packages: - -:: - - pacman -Syu - pacman -Su - pacman -S base-devel - pacman -S msys2-devel - pacman -S mingw-w64-x86_64-toolchain - pacman -S mingw-w64-x86_64-pcre - pacman -S msys2-runtime - -The list of dependent packages may be also found in **appveyor.yml** in the Miller base directory. - -Then, simply run **msys2-build.sh** which is a thin wrapper around ``./configure && make`` which accommodates certain Windows/MSYS2 idiosyncracies. - -There is a unit-test false-negative issue involving the semantics of the ``mkstemp`` library routine but a ``make -k`` in the ``c`` subdirectory has been producing a ``mlr.exe`` for me. - -Within MSYS2 you can run ``mlr``: simply copy it from the ``c`` subdirectory to your desired location somewhere within your MSYS2 ``$PATH``. To run ``mlr`` outside of MSYS2, just as with precompiled binaries as described above, you'll need ``msys-2.0.dll``. One way to do this is to augment your path: - -:: - - C:\> set PATH=%PATH%;\msys64\mingw64\bin - -Another way to do it is to copy the Miller executable and the DLL to the same directory: - -:: - - C:\> mkdir \mbin - C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin - C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin - C:\> set PATH=%PATH%;\mbin - +* ``cd miller/go`` +* ``./build`` In case of problems ---------------------------------------------------------------- @@ -117,28 +52,13 @@ Required external dependencies These are necessary to produce the ``mlr`` executable. -* ``gcc``, ``clang``, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers) -* The standard C library -* ``flex`` -* ``automake``, ``autoconf``, and ``libtool``, if you build with autoconfig +* Go version 1.16 or higher Optional external dependencies ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This documentation pageset is built using Sphinx. Please see `./README.md` for details. -Internal dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are included within the `Miller source tree `_ and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build): - -* `Mersenne Twister `_ for pseudorandom-number generation: `C implementation by Nishimura and Matsumoto `_ with license terms respected. -* `MinUnit `_ for unit-testing, with as-is-no-warranty license http://www.jera.com/techinfo/jtns/jtn002.html#License, https://github.com/johnkerl/miller/blob/master/c/lib/minunit.h. -* The `Lemon parser-generator `_, the author of which explicitly disclaims copyright. -* The `udp JSON parser `_, with BSD2 license. -* The `sheredom UTF-8 library `_, which is free and unencumbered software released into the public domain. -* The NetBSD ``strptime`` (needed for the Windows/MSYS2 port since MSYS2 lacks this), with BSD license. - Creating a new release: for developers ---------------------------------------------------------------- diff --git a/docs6/build.rst.in b/docs6/build.rst.in index 8117bc4ab..592e40664 100644 --- a/docs6/build.rst.in +++ b/docs6/build.rst.in @@ -8,13 +8,9 @@ Miller license Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt. -From release tarball using autoconfig +From release tarball ---------------------------------------------------------------- -Miller allows you the option of using GNU ``autoconfigure`` to build portably. - -Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous and expert efforts of `Thomas Klausner `_. - * Obtain ``mlr-i.j.k.tar.gz`` from https://github.com/johnkerl/miller/tags, replacing ``i.j.k`` with the desired release, e.g. ``2.2.1``. * ``tar zxvf mlr-i.j.k.tar.gz`` * ``cd mlr-i.j.k`` @@ -33,73 +29,12 @@ Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous * ``make check`` * ``make install`` copies the ``c/mlr`` executable to your prefix's ``bin`` subdirectory. -From git clone using autoconfig +From git clone ---------------------------------------------------------------- * ``git clone https://github.com/johnkerl/miller`` -* ``cd miller`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **automake autoconf libtool flex** -* Run ``autoreconf -fiv``. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.) -* Then continue from "Install the following ... " as above. - -Without using autoconfig ----------------------------------------------------------------- - -GNU autoconfig is familiar to many users, and indeed plenty of folks won't bother to use an open-source software package which doesn't have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I'm happy that Miller supports autoconfig. - -But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ``./configure && make`` output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can't figure out the build errors, you may just keep walking. For this reason I'm happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues.) - -Steps: - -* Obtain a release tarball or git clone. -* ``cd`` into the ``c`` subdirectory. -* Edit the ``INSTALLDIR`` in ``Makefile.no-autoconfig``. -* To change the C compiler, edit the ``CC=`` lines in ``Makefile.no-autoconfig`` and ``dsls/Makefile.no-autoconfig``. -* ``make -f Makefile.no-autoconfig`` creates the ``mlr`` executable and runs unit/regression tests (i.e. the equivalent of both ``make`` and ``make check`` using autoconfig). -* ``make install`` copies the ``mlr`` executable to your install directory. - -The ``Makefile.no-autoconfig`` is simple: little more than ``gcc *.c``. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I'm aware of successful use with ``gcc`` and ``clang``, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD. - -Windows ----------------------------------------------------------------- - -*Disclaimer: I'm now relying exclusively on* `Appveyor `_ *for Windows builds; I haven't built from source using MSYS in quite a while.* - -Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above). - -You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to ``C:\msys2\``) run ``C:\msys2\mingw64.exe``. Within the MSYS2 shell, you can run the following to install dependent packages: - -:: - - pacman -Syu - pacman -Su - pacman -S base-devel - pacman -S msys2-devel - pacman -S mingw-w64-x86_64-toolchain - pacman -S mingw-w64-x86_64-pcre - pacman -S msys2-runtime - -The list of dependent packages may be also found in **appveyor.yml** in the Miller base directory. - -Then, simply run **msys2-build.sh** which is a thin wrapper around ``./configure && make`` which accommodates certain Windows/MSYS2 idiosyncracies. - -There is a unit-test false-negative issue involving the semantics of the ``mkstemp`` library routine but a ``make -k`` in the ``c`` subdirectory has been producing a ``mlr.exe`` for me. - -Within MSYS2 you can run ``mlr``: simply copy it from the ``c`` subdirectory to your desired location somewhere within your MSYS2 ``$PATH``. To run ``mlr`` outside of MSYS2, just as with precompiled binaries as described above, you'll need ``msys-2.0.dll``. One way to do this is to augment your path: - -:: - - C:\> set PATH=%PATH%;\msys64\mingw64\bin - -Another way to do it is to copy the Miller executable and the DLL to the same directory: - -:: - - C:\> mkdir \mbin - C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin - C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin - C:\> set PATH=%PATH%;\mbin - +* ``cd miller/go`` +* ``./build`` In case of problems ---------------------------------------------------------------- @@ -114,28 +49,13 @@ Required external dependencies These are necessary to produce the ``mlr`` executable. -* ``gcc``, ``clang``, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers) -* The standard C library -* ``flex`` -* ``automake``, ``autoconf``, and ``libtool``, if you build with autoconfig +* Go version 1.16 or higher Optional external dependencies ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This documentation pageset is built using Sphinx. Please see `./README.md` for details. -Internal dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are included within the `Miller source tree `_ and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build): - -* `Mersenne Twister `_ for pseudorandom-number generation: `C implementation by Nishimura and Matsumoto `_ with license terms respected. -* `MinUnit `_ for unit-testing, with as-is-no-warranty license http://www.jera.com/techinfo/jtns/jtn002.html#License, https://github.com/johnkerl/miller/blob/master/c/lib/minunit.h. -* The `Lemon parser-generator `_, the author of which explicitly disclaims copyright. -* The `udp JSON parser `_, with BSD2 license. -* The `sheredom UTF-8 library `_, which is free and unencumbered software released into the public domain. -* The NetBSD ``strptime`` (needed for the Windows/MSYS2 port since MSYS2 lacks this), with BSD license. - Creating a new release: for developers ---------------------------------------------------------------- diff --git a/docs6/customization.rst b/docs6/customization.rst index 84ab845f9..af6d8740b 100644 --- a/docs6/customization.rst +++ b/docs6/customization.rst @@ -40,6 +40,8 @@ What you can put in your .mlrrc * You can include any command-line flags, except the "terminal" ones such as ``--help``. +* The ``--prepipe``, ``--load``, and ``--mload`` flags aren't allowed in ``.mlrrc`` as they control code execution, and could result in your scripts running things you don't expect if you receive data from someone with a ``.mlrrc`` in it. + * The formatting rule is you need to put one flag beginning with ``--`` per line: for example, ``--csv`` on one line and ``--nr-progress-mod 1000`` on a separate line. * Since every line starts with a ``--`` option, you can leave off the initial ``--`` if you want. For example, ``ojson`` is the same as ``--ojson``, and ``nr-progress-mod 1000`` is the same as ``--nr-progress-mod 1000``. diff --git a/docs6/customization.rst.in b/docs6/customization.rst.in index c35026ccf..eedd919dd 100644 --- a/docs6/customization.rst.in +++ b/docs6/customization.rst.in @@ -37,6 +37,8 @@ What you can put in your .mlrrc * You can include any command-line flags, except the "terminal" ones such as ``--help``. +* The ``--prepipe``, ``--load``, and ``--mload`` flags aren't allowed in ``.mlrrc`` as they control code execution, and could result in your scripts running things you don't expect if you receive data from someone with a ``.mlrrc`` in it. + * The formatting rule is you need to put one flag beginning with ``--`` per line: for example, ``--csv`` on one line and ``--nr-progress-mod 1000`` on a separate line. * Since every line starts with a ``--`` option, you can leave off the initial ``--`` if you want. For example, ``ojson`` is the same as ``--ojson``, and ``nr-progress-mod 1000`` is the same as ``--nr-progress-mod 1000``. diff --git a/docs6/genrst b/docs6/genrst index 42535d989..0ce436af3 100755 --- a/docs6/genrst +++ b/docs6/genrst @@ -4,7 +4,11 @@ set -euo pipefail # Use poki to run the live-code bits within the markup files. See README.md for details. -names=$(echo *.rst.in | sed 's/\.rst\.in//g') +if [ $# -ge 1 ]; then + names="$@" +else + names=$(echo *.rst.in | sed 's/\.rst\.in//g') +fi for name in $names; do echo BUILDING $name diff --git a/docs6/install.rst b/docs6/install.rst index b45fab5f8..26f4e9b67 100644 --- a/docs6/install.rst +++ b/docs6/install.rst @@ -42,11 +42,9 @@ On Windows, Miller is available via `Chocolatey `_: Prebuilt executables via GitHub per release ---------------------------------------------------------------- -Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts). +Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows. -Miller is autobuilt for **Linux** using **Travis** on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of `SikhNerd `_ on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for **Windows** using the **Appveyor** continuous-build system: https://ci.appveyor.com/project/johnkerl/miller. - -Miller releases from `5.1.0 `_ onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select *Latest Build* and then *Artifacts* to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release. +Miller is autobuilt for **Linux**, **MacOS**, and **Windows** using **GitHub Actions** on every commit (https://github.com/johnkerl/miller/actions). Building from source ---------------------------------------------------------------- diff --git a/docs6/install.rst.in b/docs6/install.rst.in index 8cb583419..2abd1b3b7 100644 --- a/docs6/install.rst.in +++ b/docs6/install.rst.in @@ -39,11 +39,9 @@ On Windows, Miller is available via `Chocolatey `_: Prebuilt executables via GitHub per release ---------------------------------------------------------------- -Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts). +Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows. -Miller is autobuilt for **Linux** using **Travis** on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of `SikhNerd `_ on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for **Windows** using the **Appveyor** continuous-build system: https://ci.appveyor.com/project/johnkerl/miller. - -Miller releases from `5.1.0 `_ onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select *Latest Build* and then *Artifacts* to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release. +Miller is autobuilt for **Linux**, **MacOS**, and **Windows** using **GitHub Actions** on every commit (https://github.com/johnkerl/miller/actions). Building from source ---------------------------------------------------------------- diff --git a/docs6/internationalization.rst b/docs6/internationalization.rst index 74c917e3c..c8ca70874 100644 --- a/docs6/internationalization.rst +++ b/docs6/internationalization.rst @@ -4,14 +4,12 @@ Internationalization ================================================================ -Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.) +Miller handles ASCII and UTF-8 strings. (I have no plans to support UTF-16 or ISO-8859-1.) -By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes: +Support for internationalization includes: * Tabular output formats such pprint and xtab (see :doc:`file-formats`) are aligned correctly. * The :ref:`reference-dsl-strlen` function correctly counts UTF-8 codepoints rather than bytes. -* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions within the capabilities of https://github.com/sheredom/utf8.h. - -Meanwhile, regular expressions and the DSL functions :ref:`reference-dsl-sub` and :ref:`reference-dsl-gsub` function correctly, albeit without explicit intentional support. +* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions operate within the capabilities of the Go libraries. Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). diff --git a/docs6/internationalization.rst.in b/docs6/internationalization.rst.in index ce639f128..d315430e8 100644 --- a/docs6/internationalization.rst.in +++ b/docs6/internationalization.rst.in @@ -1,14 +1,12 @@ Internationalization ================================================================ -Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.) +Miller handles ASCII and UTF-8 strings. (I have no plans to support UTF-16 or ISO-8859-1.) -By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes: +Support for internationalization includes: * Tabular output formats such pprint and xtab (see :doc:`file-formats`) are aligned correctly. * The :ref:`reference-dsl-strlen` function correctly counts UTF-8 codepoints rather than bytes. -* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions within the capabilities of https://github.com/sheredom/utf8.h. - -Meanwhile, regular expressions and the DSL functions :ref:`reference-dsl-sub` and :ref:`reference-dsl-gsub` function correctly, albeit without explicit intentional support. +* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions operate within the capabilities of the Go libraries. Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter).

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 outputfilenamegoeshere** at the end of your command: - -:: - - % mlr --icsv --opprint cat example.csv > newfile.csv - # Output goes to the new file; - # nothing is printed to the screen. - -:: - - % cat newfile.csv - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Other times we just want our files to be **changed in-place**: just use **mlr -I**:: - - % cp example.csv newfile.txt - - % cat newfile.txt - color,shape,flag,index,quantity,rate - yellow,triangle,1,11,43.6498,9.8870 - red,square,1,15,79.2778,0.0130 - red,circle,1,16,13.8103,2.9010 - red,square,0,48,77.5542,7.4670 - purple,triangle,0,51,81.2290,8.5910 - red,square,0,64,77.1991,9.5310 - purple,triangle,0,65,80.1405,5.8240 - yellow,circle,1,73,63.9785,4.2370 - yellow,circle,1,87,63.5058,8.3350 - purple,square,0,91,72.3735,8.2430 - - % mlr -I --icsv --opprint cat newfile.txt - - % cat newfile.txt - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Also using ``mlr -I`` you can bulk-operate on lots of files: e.g.:: - - mlr -I --csv cut -x -f unwanted_column_name *.csv - -If you like, you can first copy off your original data somewhere else, before doing in-place operations. - -Lastly, using ``tee`` within ``put``, you can split your input data into separate files per one or more field names:: - - $ mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*' - -:: - - $ cat circle.csv - color,shape,flag,index,quantity,rate - red,circle,1,16,13.8103,2.9010 - yellow,circle,1,73,63.9785,4.2370 - yellow,circle,1,87,63.5058,8.3350 - -:: - - $ cat square.csv - color,shape,flag,index,quantity,rate - red,square,1,15,79.2778,0.0130 - red,square,0,48,77.5542,7.4670 - red,square,0,64,77.1991,9.5310 - purple,square,0,91,72.3735,8.2430 - -:: - - $ cat triangle.csv - color,shape,flag,index,quantity,rate - yellow,triangle,1,11,43.6498,9.8870 - purple,triangle,0,51,81.2290,8.5910 - purple,triangle,0,65,80.1405,5.8240 - -Other-format examples -^^^^^^^^^^^^^^^^^^^^^ - -What's a CSV file, really? It's an array of rows, or *records*, each being a list of key-value pairs, or *fields*: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line. - -For example, if you have:: - - shape,flag,index - circle,1,24 - square,0,36 - -then that's a way of saying:: - - shape=circle,flag=1,index=24 - shape=square,flag=0,index=36 - -Data written this way are called **DKVP**, for *delimited key-value pairs*. - -We've also already seen other ways to write the same data:: - - CSV PPRINT JSON - shape,flag,index shape flag index [ - circle,1,24 circle 1 24 { - square,0,36 square 0 36 "shape": "circle", - "flag": 1, - "index": 24 - }, - DKVP XTAB { - shape=circle,flag=1,index=24 shape circle "shape": "square", - shape=square,flag=0,index=36 flag 1 "flag": 0, - index 24 "index": 36 - } - shape square ] - flag 0 - index 36 - -Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format. diff --git a/docs6/_build/html/_sources/build.rst.txt b/docs6/_build/html/_sources/build.rst.txt deleted file mode 100644 index a18af470b..000000000 --- a/docs6/_build/html/_sources/build.rst.txt +++ /dev/null @@ -1,211 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Building from source -================================================================ - -Please also see :doc:`install` for information about pre-built executables. - -Miller license ----------------------------------------------------------------- - -Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt. - -From release tarball using autoconfig ----------------------------------------------------------------- - -Miller allows you the option of using GNU ``autoconfigure`` to build portably. - -Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous and expert efforts of `Thomas Klausner `_. - -* Obtain ``mlr-i.j.k.tar.gz`` from https://github.com/johnkerl/miller/tags, replacing ``i.j.k`` with the desired release, e.g. ``2.2.1``. -* ``tar zxvf mlr-i.j.k.tar.gz`` -* ``cd mlr-i.j.k`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **flex** -* Various configuration options of your choice, e.g. - - * ``./configure`` - * ``./configure --prefix=/usr/local`` - * ``./configure --prefix=$HOME/pkgs`` - * ``./configure CC=clang`` - * ``./configure --disable-shared`` (to make a statically linked executable) - * ``./configure 'CFLAGS=-Wall -std=gnu99 -O3'`` - * etc. - -* ``make`` creates the ``c/mlr`` executable -* ``make check`` -* ``make install`` copies the ``c/mlr`` executable to your prefix's ``bin`` subdirectory. - -From git clone using autoconfig ----------------------------------------------------------------- - -* ``git clone https://github.com/johnkerl/miller`` -* ``cd miller`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **automake autoconf libtool flex** -* Run ``autoreconf -fiv``. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.) -* Then continue from "Install the following ... " as above. - -Without using autoconfig ----------------------------------------------------------------- - -GNU autoconfig is familiar to many users, and indeed plenty of folks won't bother to use an open-source software package which doesn't have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I'm happy that Miller supports autoconfig. - -But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ``./configure && make`` output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can't figure out the build errors, you may just keep walking. For this reason I'm happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues.) - -Steps: - -* Obtain a release tarball or git clone. -* ``cd`` into the ``c`` subdirectory. -* Edit the ``INSTALLDIR`` in ``Makefile.no-autoconfig``. -* To change the C compiler, edit the ``CC=`` lines in ``Makefile.no-autoconfig`` and ``dsls/Makefile.no-autoconfig``. -* ``make -f Makefile.no-autoconfig`` creates the ``mlr`` executable and runs unit/regression tests (i.e. the equivalent of both ``make`` and ``make check`` using autoconfig). -* ``make install`` copies the ``mlr`` executable to your install directory. - -The ``Makefile.no-autoconfig`` is simple: little more than ``gcc *.c``. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I'm aware of successful use with ``gcc`` and ``clang``, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD. - -Windows ----------------------------------------------------------------- - -*Disclaimer: I'm now relying exclusively on* `Appveyor `_ *for Windows builds; I haven't built from source using MSYS in quite a while.* - -Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above). - -You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to ``C:\msys2\``) run ``C:\msys2\mingw64.exe``. Within the MSYS2 shell, you can run the following to install dependent packages: - -:: - - pacman -Syu - pacman -Su - pacman -S base-devel - pacman -S msys2-devel - pacman -S mingw-w64-x86_64-toolchain - pacman -S mingw-w64-x86_64-pcre - pacman -S msys2-runtime - -The list of dependent packages may be also found in **appveyor.yml** in the Miller base directory. - -Then, simply run **msys2-build.sh** which is a thin wrapper around ``./configure && make`` which accommodates certain Windows/MSYS2 idiosyncracies. - -There is a unit-test false-negative issue involving the semantics of the ``mkstemp`` library routine but a ``make -k`` in the ``c`` subdirectory has been producing a ``mlr.exe`` for me. - -Within MSYS2 you can run ``mlr``: simply copy it from the ``c`` subdirectory to your desired location somewhere within your MSYS2 ``$PATH``. To run ``mlr`` outside of MSYS2, just as with precompiled binaries as described above, you'll need ``msys-2.0.dll``. One way to do this is to augment your path: - -:: - - C:\> set PATH=%PATH%;\msys64\mingw64\bin - -Another way to do it is to copy the Miller executable and the DLL to the same directory: - -:: - - C:\> mkdir \mbin - C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin - C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin - C:\> set PATH=%PATH%;\mbin - - -In case of problems ----------------------------------------------------------------- - -If you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues. - -Dependencies ----------------------------------------------------------------- - -Required external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are necessary to produce the ``mlr`` executable. - -* ``gcc``, ``clang``, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers) -* The standard C library -* ``flex`` -* ``automake``, ``autoconf``, and ``libtool``, if you build with autoconfig - -Optional external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This documentation pageset is built using Sphinx. Please see `./README.md` for details. - -Internal dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are included within the `Miller source tree `_ and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build): - -* `Mersenne Twister `_ for pseudorandom-number generation: `C implementation by Nishimura and Matsumoto `_ with license terms respected. -* `MinUnit `_ for unit-testing, with as-is-no-warranty license http://www.jera.com/techinfo/jtns/jtn002.html#License, https://github.com/johnkerl/miller/blob/master/c/lib/minunit.h. -* The `Lemon parser-generator `_, the author of which explicitly disclaims copyright. -* The `udp JSON parser `_, with BSD2 license. -* The `sheredom UTF-8 library `_, which is free and unencumbered software released into the public domain. -* The NetBSD ``strptime`` (needed for the Windows/MSYS2 port since MSYS2 lacks this), with BSD license. - -Creating a new release: for developers ----------------------------------------------------------------- - -At present I'm the primary developer so this is just my checklist for making new releases. - -In this example I am using version 3.4.0; of course that will change for subsequent revisions. - -* Update version found in ``mlr --version`` and ``man mlr``: - - * Edit ``configure.ac``, ``c/mlrvers.h``, ``miller.spec``, and ``docs/conf.py`` from ``3.3.2-dev`` to ``3.4.0``. - * Do a fresh ``autoreconf -fiv`` and commit the output. (Preferably on a Linux host, rather than MacOS, to reduce needless diffs in autogen build files.) - * ``make -C c -f Makefile.no-autoconfig installhome && make -C man -f Makefile.no-autoconfig installhome && make -C docs -f Makefile.no-autoconfig html`` - * The ordering is important: the first build creates ``mlr``; the second runs ``mlr`` to create ``manpage.txt``; the third includes ``manpage.txt`` into one of its outputs. - * Commit and push. - -* Create the release tarball and SRPM: - - * On buildbox: ``./configure && make distcheck`` - * On buildbox: make SRPM as in https://github.com/johnkerl/miller/blob/master/README-RPM.md - * On all buildboxes: ``cd c`` and ``make -f Makefile.no-autoconfig mlr.static``. Then copy ``mlr.static`` to ``../mlr.{arch}``. (This may require as prerequisite ``sudo yum install glibc-static`` or the like.) - * For static binaries, please do ``ldd mlr.static`` and make sure it says ``not a dynamic executable``. - * Then ``mv mlr.static ../mlr.linux_x86_64`` - * Pull back release tarball ``mlr-3.4.0.tar.gz`` and SRPM ``miller-3.4.0-1.el6.src.rpm`` from buildbox, and ``mlr.{arch}`` binaries from whatever buildboxes. - * Download ``mlr.exe`` and ``msys-2.0.dll`` from https://ci.appveyor.com/project/johnkerl/miller/build/artifacts. - -* Create the Github release tag: - - * Don't forget the ``v`` in ``v3.4.0`` - * Write the release notes - * Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded. - * Publish the release - -* Check the release-specific docs: - - * Look at https://miller.readthedocs.io for new-version docs, after a few minutes' propagation time. - -* Notify: - - * Submit ``brew`` pull request; notify any other distros which don't appear to have autoupdated since the previous release (notes below) - * Similarly for ``macports``: https://github.com/macports/macports-ports/blob/master/textproc/miller/Portfile. - * Social-media updates. - -:: - - git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only - git fetch upstream - git rebase upstream/master - git checkout -b miller-3.4.0 - shasum -a 256 /path/to/mlr-3.4.0.tar.gz - edit Formula/miller.rb - # Test the URL from the line like - # url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz" - # in a browser for typos - # A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build - git add Formula/miller.rb - git commit -m 'miller 3.4.0' - git push -u origin miller-3.4.0 - (submit the pull request) - -* Afterwork: - - * Edit ``configure.ac`` and ``c/mlrvers.h`` to change version from ``3.4.0`` to ``3.4.0-dev``. - * ``make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome`` - * Commit and push. - - -Misc. development notes ----------------------------------------------------------------- - -I use terminal width 120 and tabwidth 4. diff --git a/docs6/_build/html/_sources/contact.rst.txt b/docs6/_build/html/_sources/contact.rst.txt deleted file mode 100644 index 05fcaf93a..000000000 --- a/docs6/_build/html/_sources/contact.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Contact -================================================================ - -Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues - -For issues involving this documentation site please also use https://github.com/johnkerl/miller/issues - -Other correspondence: mailto:kerl.john.r+miller@gmail.com diff --git a/docs6/_build/html/_sources/cookbook.rst.txt b/docs6/_build/html/_sources/cookbook.rst.txt deleted file mode 100644 index b910cf24e..000000000 --- a/docs6/_build/html/_sources/cookbook.rst.txt +++ /dev/null @@ -1,1143 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 1: common patterns -================================================================ - -Headerless CSV on input or output ----------------------------------------------------------------- - -Sometimes we get CSV files which lack a header. For example: - -:: - - $ cat data/headerless.csv - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -You can use Miller to add a header. The ``--implicit-csv-header`` applies positionally indexed labels: - -:: - - $ mlr --csv --implicit-csv-header cat data/headerless.csv - 1,2,3 - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -Following that, you can rename the positionally indexed labels to names with meaning for your context. For example: - -:: - - $ mlr --csv --implicit-csv-header label name,age,status data/headerless.csv - name,age,status - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller's output to the system command ``sed 1d``, or you can use Miller's ``--headerless-csv-output`` option: - -:: - - $ head -5 data/colored-shapes.dkvp | mlr --ocsv cat - color,shape,flag,i,u,v,w,x - yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565 - red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207 - red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998 - red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269 - purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863 - -:: - - $ head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat - yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565 - red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207 - red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998 - red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269 - purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863 - -Lastly, often we say "CSV" or "TSV" when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it's perhaps simpler to **just use NIDX format** which was designed for this purpose. (See also :doc:`file-formats`.) For example: - -:: - - $ mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv - 1 John - 3 present - - 1 Fred - 3 present - - 1 Alice - 3 missing - - 1 Carol - 3 present - -Doing multiple joins ----------------------------------------------------------------- - -Suppose we have the following data: - -:: - - $ cat multi-join/input.csv - id,task - 10,chop - 20,puree - 20,wash - 30,fold - 10,bake - 20,mix - 10,knead - 30,clean - -And we want to augment the ``id`` column with lookups from the following data files: - -:: - - $ cat multi-join/name-lookup.csv - id,name - 30,Alice - 10,Bob - 20,Carol - -:: - - $ cat multi-join/status-lookup.csv - id,status - 30,occupied - 10,idle - 20,idle - -We can run the input file through multiple ``join`` commands in a ``then``-chain: - -:: - - $ mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv - id status name task - 10 idle Bob chop - 20 idle Carol puree - 20 idle Carol wash - 30 occupied Alice fold - 10 idle Bob bake - 20 idle Carol mix - 10 idle Bob knead - 30 occupied Alice clean - -Bulk rename of fields ----------------------------------------------------------------- - -Suppose you want to replace spaces with underscores in your column names: - -:: - - $ cat data/spaces.csv - a b c,def,g h i - 123,4567,890 - 2468,1357,3579 - 9987,3312,4543 - -The simplest way is to use ``mlr rename`` with ``-g`` (for global replace, not just first occurrence of space within each field) and ``-r`` for pattern-matching (rather than explicit single-column renames): - -:: - - $ mlr --csv rename -g -r ' ,_' data/spaces.csv - a_b_c,def,g_h_i - 123,4567,890 - 2468,1357,3579 - 9987,3312,4543 - -:: - - $ mlr --csv --opprint rename -g -r ' ,_' data/spaces.csv - a_b_c def g_h_i - 123 4567 890 - 2468 1357 3579 - 9987 3312 4543 - -You can also do this with a for-loop: - -:: - - $ cat data/bulk-rename-for-loop.mlr - map newrec = {}; - for (oldk, v in $*) { - newrec[gsub(oldk, " ", "_")] = v; - } - $* = newrec - -:: - - $ mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv - a_b_c def g_h_i - 123 4567 890 - 2468 1357 3579 - 9987 3312 4543 - -Search-and-replace over all fields ----------------------------------------------------------------- - -How to do ``$name = gsub($name, "old", "new")`` for all fields? - -:: - - $ cat data/sar.csv - a,b,c - the quick,brown fox,jumped - over,the,lazy dogs - -:: - - $ cat data/sar.mlr - for (k in $*) { - $[k] = gsub($[k], "e", "X"); - } - -:: - - $ mlr --csv put -f data/sar.mlr data/sar.csv - a,b,c - thX quick,brown fox,jumpXd - ovXr,thX,lazy dogs - -Full field renames and reassigns ----------------------------------------------------------------- - -Using Miller 5.0.0's map literals and assigning to ``$*``, you can fully generalize :ref:`mlr rename `, :ref:`mlr reorder `, etc. - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put ' - begin { - @i_cumu = 0; - } - - @i_cumu += $i; - $* = { - "z": $x + y, - "KEYFIELD": $a, - "i": @i_cumu, - "b": $b, - "y": $x, - "x": $y, - }; - ' data/small - z=0.346790,KEYFIELD=pan,i=1,b=pan,y=0.346790,x=0.726803 - z=0.758680,KEYFIELD=eks,i=3,b=pan,y=0.758680,x=0.522151 - z=0.204603,KEYFIELD=wye,i=6,b=wye,y=0.204603,x=0.338319 - z=0.381399,KEYFIELD=eks,i=10,b=wye,y=0.381399,x=0.134189 - z=0.573289,KEYFIELD=wye,i=15,b=pan,y=0.573289,x=0.863624 - -Numbering and renumbering records ----------------------------------------------------------------- - -The ``awk``-like built-in variable ``NR`` is incremented for each input record: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$nr = NR' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 - -However, this is the record number within the original input stream -- not after any filtering you may have done: - -:: - - $ mlr filter '$a == "wye"' then put '$nr = NR' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 - -There are two good options here. One is to use the ``cat`` verb with ``-n``: - -:: - - $ mlr filter '$a == "wye"' then cat -n data/small - n=1,a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -The other is to keep your own counter within the ``put`` DSL: - -:: - - $ mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,n=1 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,n=2 - -The difference is a matter of taste (although ``mlr cat -n`` puts the counter first). - -Options for dealing with duplicate rows ----------------------------------------------------------------- - -If your data has records appearing multiple times, you can use :ref:`mlr uniq ` to show and/or count the unique records. - -If you want to look at partial uniqueness -- for example, show only the first record for each unique combination of the ``account_id`` and ``account_status`` fields -- you might use ``mlr head -n 1 -g account_id,account_status``. Please also see :ref:`mlr head `. - -.. _cookbook-data-cleaning-examples: - -Data-cleaning examples ----------------------------------------------------------------- - -Here are some ways to use the type-checking options as described in :ref:`reference-dsl-type-tests-and-assertions` Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can't see it all at once and some automation is called for.) - -:: - - $ cat data/het-bool.csv - name,reachable - barney,false - betty,true - fred,true - wilma,1 - -One option is to coerce everything to boolean, or integer: - -:: - - $ mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv - name reachable - barney false - betty true - fred true - wilma true - -:: - - $ mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv - name reachable - barney 0 - betty 1 - fred 1 - wilma 1 - -A second option is to flag badly formatted data within the output stream: - -:: - - $ mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv - name reachable format_ok - barney false true - betty true true - fred true true - wilma 1 false - -Or perhaps to flag badly formatted data outside the output stream: - -:: - - $ mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv - Malformed at NR=4 - name reachable - barney false - betty true - fred true - wilma 1 - -A third way is to abort the process on first instance of bad data: - -:: - - $ mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv - mlr: string type-assertion failed at NR=4 FNR=4 FILENAME=data/het-bool.csv - name,reachable - barney,false - betty,true - fred,true - -Splitting nested fields ----------------------------------------------------------------- - -Suppose you have a TSV file like this: - -:: - - a b - x z - s u:v:w - -The simplest option is to use :ref:`mlr nest `: - -:: - - $ mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv - a b - x z - s u - s v - s w - -:: - - $ mlr --tsv nest --explode --values --across-fields -f b --nested-fs : data/nested.tsv - a b_1 - x z - - a b_1 b_2 b_3 - s u v w - -While ``mlr nest`` is simplest, let's also take a look at a few ways to do this using the ``put`` DSL. - -One option to split out the colon-delimited values in the ``b`` column is to use ``splitnv`` to create an integer-indexed map and loop over it, adding new fields to the current record: - -:: - - $ mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}' - a x - b z - p1 z - - a s - b u:v:w - p1 u - p2 v - p3 w - -while another is to loop over the same map from ``splitnv`` and use it (with ``put -q`` to suppress printing the original record) to produce multiple records: - -:: - - $ mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {x=mapsum($*, {"b":v}); emit x}' - a x - b z - - a s - b u - - a s - b v - - a s - b w - -:: - - $ mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {x=mapsum($*, {"b":v}); emit x}' - a b - x z - s u - s v - s w - -Showing differences between successive queries ----------------------------------------------------------------- - -Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right: - -:: - - $ cat data/previous_counters.csv - color,count - red,3472 - blue,6838 - orange,694 - purple,12 - -:: - - $ cat data/current_counters.csv - color,count - red,3467 - orange,670 - yellow,27 - blue,6944 - -And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren't all in the same order, nor are they all present on both sides, we can't just paste the two files side-by-side and do some column-four-minus-column-two arithmetic. - -First, rename counter columns to make them distinct: - -:: - - $ mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv - -:: - - $ cat data/prevtemp.csv - color,previous_count - red,3472 - blue,6838 - orange,694 - purple,12 - -:: - - $ mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv - -:: - - $ cat data/currtemp.csv - color,current_count - red,3467 - orange,670 - yellow,27 - blue,6944 - -Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use ``--ul`` and ``--ur`` to emit unpaired records (namely, purple on the left and yellow on the right): - -:: - - $ mlr --icsv --opprint \ - join -j color --ul --ur -f data/prevtemp.csv \ - then unsparsify --fill-with 0 \ - then put '$count_delta = $current_count - $previous_count' \ - data/currtemp.csv - color previous_count current_count count_delta - red 3472 3467 -5 - orange 694 670 -24 - yellow 0 27 27 - blue 6838 6944 106 - purple 12 0 -12 - -Finding missing dates ----------------------------------------------------------------- - -Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates: - -:: - - $ head -n 10 data/miss-date.csv - date,qoh - 2012-03-05,10055 - 2012-03-06,10486 - 2012-03-07,10430 - 2012-03-08,10674 - 2012-03-09,10880 - 2012-03-10,10718 - 2012-03-11,10795 - 2012-03-12,11043 - 2012-03-13,11177 - -:: - - $ wc -l data/miss-date.csv - 1372 data/miss-date.csv - -Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using ``strptime``, then compute adjacent differences (the ``cat -n`` simply inserts record-counters): - -:: - - $ mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ - | head - n=1,date=2012-03-05,qoh=10055,datestamp=1330905600.000000,datestamp_delta=0 - n=2,date=2012-03-06,qoh=10486,datestamp=1330992000.000000,datestamp_delta=86400.000000 - n=3,date=2012-03-07,qoh=10430,datestamp=1331078400.000000,datestamp_delta=86400.000000 - n=4,date=2012-03-08,qoh=10674,datestamp=1331164800.000000,datestamp_delta=86400.000000 - n=5,date=2012-03-09,qoh=10880,datestamp=1331251200.000000,datestamp_delta=86400.000000 - n=6,date=2012-03-10,qoh=10718,datestamp=1331337600.000000,datestamp_delta=86400.000000 - n=7,date=2012-03-11,qoh=10795,datestamp=1331424000.000000,datestamp_delta=86400.000000 - n=8,date=2012-03-12,qoh=11043,datestamp=1331510400.000000,datestamp_delta=86400.000000 - n=9,date=2012-03-13,qoh=11177,datestamp=1331596800.000000,datestamp_delta=86400.000000 - n=10,date=2012-03-14,qoh=11498,datestamp=1331683200.000000,datestamp_delta=86400.000000 - -Then, filter for adjacent difference not being 86400 (the number of seconds in a day): - -:: - - $ mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ - then filter '$datestamp_delta != 86400 && $n != 1' - n=774,date=2014-04-19,qoh=130140,datestamp=1397865600.000000,datestamp_delta=259200.000000 - n=1119,date=2015-03-31,qoh=181625,datestamp=1427760000.000000,datestamp_delta=172800.000000 - -Given this, it's now easy to see where the gaps are: - -:: - - $ mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv - n=770,1=2014-04-12,2=129435 - n=771,1=2014-04-13,2=129868 - n=772,1=2014-04-14,2=129797 - n=773,1=2014-04-15,2=129919 - n=774,1=2014-04-16,2=130181 - n=775,1=2014-04-19,2=130140 - n=776,1=2014-04-20,2=130271 - n=777,1=2014-04-21,2=130368 - n=778,1=2014-04-22,2=130368 - n=779,1=2014-04-23,2=130849 - n=780,1=2014-04-24,2=131026 - -:: - - $ mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv - n=1115,1=2015-03-25,2=181006 - n=1116,1=2015-03-26,2=180995 - n=1117,1=2015-03-27,2=181043 - n=1118,1=2015-03-28,2=181112 - n=1119,1=2015-03-29,2=181306 - n=1120,1=2015-03-31,2=181625 - n=1121,1=2015-04-01,2=181494 - n=1122,1=2015-04-02,2=181718 - n=1123,1=2015-04-03,2=181835 - n=1124,1=2015-04-04,2=182104 - n=1125,1=2015-04-05,2=182528 - -Two-pass algorithms ----------------------------------------------------------------- - -Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as ``sort``, ``tac``, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory. - -Two-pass algorithms: computation of percentages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record's value to a percentage. - -:: - - $ mlr --from data/small --opprint put -q ' - # These are executed once per record, which is the first pass. - # The key is to use NR to index an out-of-stream variable to - # retain all the x-field values. - @x_min = min($x, @x_min); - @x_max = max($x, @x_max); - @x[NR] = $x; - - # The second pass is in a for-loop in an end-block. - end { - for (nr, x in @x) { - @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min); - } - emit (@x, @x_pct), "NR" - } - ' - NR x x_pct - 1 0.346790 25.661943 - 2 0.758680 100.000000 - 3 0.204603 0.000000 - 4 0.381399 31.908236 - 5 0.573289 66.540542 - -Two-pass algorithms: line-number ratios -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Similarly, finding the total record count requires first reading through all the data: - -:: - - $ mlr --opprint --from data/small put -q ' - @records[NR] = $*; - end { - for((I,k),v in @records) { - @records[I]["I"] = I; - @records[I]["N"] = NR; - @records[I]["PCT"] = 100*I/NR - } - emit @records,"I" - } - ' then reorder -f I,N,PCT - I N PCT a b i x y - 1 5 20 pan pan 1 0.3467901443380824 0.7268028627434533 - 2 5 40 eks pan 2 0.7586799647899636 0.5221511083334797 - 3 5 60 wye wye 3 0.20460330576630303 0.33831852551664776 - 4 5 80 eks wye 4 0.38139939387114097 0.13418874328430463 - 5 5 100 wye pan 5 0.5732889198020006 0.8636244699032729 - -Two-pass algorithms: records having max value -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The idea is to retain records having the largest value of ``n`` in the following data: - -:: - - $ mlr --itsv --opprint cat data/maxrows.tsv - a b n score - purple red 5 0.743231 - blue purple 2 0.093710 - red purple 2 0.802103 - purple red 5 0.389055 - red purple 2 0.880457 - orange red 2 0.540349 - purple purple 1 0.634451 - orange purple 5 0.257223 - orange purple 5 0.693499 - red red 4 0.981355 - blue purple 5 0.157052 - purple purple 1 0.441784 - red purple 1 0.124912 - orange blue 1 0.921944 - blue purple 4 0.490909 - purple red 5 0.454779 - green purple 4 0.198278 - orange blue 5 0.705700 - red red 3 0.940705 - purple red 5 0.072936 - orange blue 3 0.389463 - orange purple 2 0.664985 - blue purple 1 0.371813 - red purple 4 0.984571 - green purple 5 0.203577 - green purple 3 0.900873 - purple purple 0 0.965677 - blue purple 2 0.208785 - purple purple 1 0.455077 - red purple 4 0.477187 - blue red 4 0.007487 - -Of course, the largest value of ``n`` isn't known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end: - -:: - - $ cat data/maxrows.mlr - # Retain all records - @records[NR] = $*; - # Track max value of n - @maxn = max(@maxn, $n); - - # After all records have been read, loop through retained records - # and print those with the max n value. - end { - for (nr in @records) { - map record = @records[nr]; - if (record["n"] == @maxn) { - emit record; - } - } - } - -:: - - $ mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv - a b n score - purple red 5 0.743231 - purple red 5 0.389055 - orange purple 5 0.257223 - orange purple 5 0.693499 - blue purple 5 0.157052 - purple red 5 0.454779 - orange blue 5 0.705700 - purple red 5 0.072936 - green purple 5 0.203577 - -Rectangularizing data ----------------------------------------------------------------- - -Suppose you have a method (in whatever language) which is printing things of the form - -:: - - outer=1 - outer=2 - outer=3 - -and then calls another method which prints things of the form - -:: - - middle=10 - middle=11 - middle=12 - middle=20 - middle=21 - middle=30 - middle=31 - -and then, perhaps, that second method calls a third method which prints things of the form - -:: - - inner1=100,inner2=101 - inner1=120,inner2=121 - inner1=200,inner2=201 - inner1=210,inner2=211 - inner1=300,inner2=301 - inner1=312 - inner1=313,inner2=314 - -with the result that your program's output is - -:: - - outer=1 - middle=10 - inner1=100,inner2=101 - middle=11 - middle=12 - inner1=120,inner2=121 - outer=2 - middle=20 - inner1=200,inner2=201 - middle=21 - inner1=210,inner2=211 - outer=3 - middle=30 - inner1=300,inner2=301 - middle=31 - inner1=312 - inner1=313,inner2=314 - -The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don't refactor your code just to handle some ad-hoc log-data formatting -- instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs. - -:: - - $ mlr --from data/rect.txt put -q ' - is_present($outer) { - unset @r - } - for (k, v in $*) { - @r[k] = v - } - is_present($inner1) { - emit @r - }' - outer=1,middle=10,inner1=100,inner2=101 - outer=1,middle=12,inner1=120,inner2=121 - outer=2,middle=20,inner1=200,inner2=201 - outer=2,middle=21,inner1=210,inner2=211 - outer=3,middle=30,inner1=300,inner2=301 - outer=3,middle=31,inner1=312,inner2=301 - outer=3,middle=31,inner1=313,inner2=314 - -Regularizing ragged CSV ----------------------------------------------------------------- - -Miller handles compliant CSV: in particular, it's an error if the number of data fields in a given data line don't match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line. - -:: - - $ cat data/ragged.csv - a,b,c - 1,2,3 - 4,5 - 6,7,8,9 - -:: - - $ mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - @nf = NF; - while(@nf < @maxnf) { - @nf += 1; - $[@nf] = "" - } - ' - a,b,c - 1,2,3 - 4,5, - 6,7,8,9 - -or, more simply, - -:: - - $ mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - while(NF < @maxnf) { - $[NF+1] = ""; - } - ' - a,b,c - 1,2,3 - 4,5, - 6,7,8,9 - -Feature-counting ----------------------------------------------------------------- - -Suppose you have some heterogeneous data like this: - -:: - - { "qoh": 29874, "rate": 1.68, "latency": 0.02 } - { "name": "alice", "uid": 572 } - { "qoh": 1227, "rate": 1.01, "latency": 0.07 } - { "qoh": 13458, "rate": 1.72, "latency": 0.04 } - { "qoh": 56782, "rate": 1.64 } - { "qoh": 23512, "rate": 1.71, "latency": 0.03 } - { "qoh": 9876, "rate": 1.89, "latency": 0.08 } - { "name": "bill", "uid": 684 } - { "name": "chuck", "uid2": 908 } - { "name": "dottie", "uid": 440 } - { "qoh": 0, "rate": 0.40, "latency": 0.01 } - { "qoh": 5438, "rate": 1.56, "latency": 0.17 } - -A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm: - -:: - - for (key in $*) { - @key_counts[key] += 1; - } - @record_count += 1; - - end { - for (key in @key_counts) { - @key_fraction[key] = @key_counts[key] / @record_count - } - emit @record_count; - emit @key_counts, "key"; - emit @key_fraction,"key" - } - -Then - -:: - - $ mlr --json put -q -f data/feature-count.mlr data/features.json - { "record_count": 12 } - { "key": "qoh", "key_counts": 8 } - { "key": "rate", "key_counts": 8 } - { "key": "latency", "key_counts": 7 } - { "key": "name", "key_counts": 4 } - { "key": "uid", "key_counts": 3 } - { "key": "uid2", "key_counts": 1 } - { "key": "qoh", "key_fraction": 0.666667 } - { "key": "rate", "key_fraction": 0.666667 } - { "key": "latency", "key_fraction": 0.583333 } - { "key": "name", "key_fraction": 0.333333 } - { "key": "uid", "key_fraction": 0.250000 } - { "key": "uid2", "key_fraction": 0.083333 } - -:: - - $ mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json - record_count - 12 - - key key_counts - qoh 8 - rate 8 - latency 7 - name 4 - uid 3 - uid2 1 - - key key_fraction - qoh 0.666667 - rate 0.666667 - latency 0.583333 - name 0.333333 - uid 0.250000 - uid2 0.083333 - -Unsparsing ----------------------------------------------------------------- - -The previous section discussed how to fill out missing data fields within CSV with full header line -- so the list of all field names is present within the header line. Next, let's look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names. - -For example, suppose you have JSON input like this: - -:: - - $ cat data/sparse.json - {"a":1,"b":2,"v":3} - {"u":1,"b":2} - {"a":1,"v":2,"x":3} - {"v":1,"w":2} - -There are field names ``a``, ``b``, ``v``, ``u``, ``x``, ``w`` in the data -- but not all in every record. Since we don't know the names of all the keys until we've read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use ``put -q`` since we don't want to produce per-record output, only emitting output in the ``end`` block: - -:: - - $ cat data/unsparsify.mlr - # First pass: - # Remember all unique key names: - for (k in $*) { - @all_keys[k] = 1; - } - # Remember all input records: - @records[NR] = $*; - - # Second pass: - end { - for (nr in @records) { - # Get the sparsely keyed input record: - irecord = @records[nr]; - # Fill in missing keys with empty string: - map orecord = {}; - for (k in @all_keys) { - if (haskey(irecord, k)) { - orecord[k] = irecord[k]; - } else { - orecord[k] = ""; - } - } - # Produce the output: - emit orecord; - } - } - -:: - - $ mlr --json put -q -f data/unsparsify.mlr data/sparse.json - { "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" } - { "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" } - { "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" } - { "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 } - -:: - - $ mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json - a,b,v,u,x,w - 1,2,3,,, - ,2,,1,, - 1,,2,,3, - ,,1,,,2 - -:: - - $ mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json - a b v u x w - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - 3 - - - - 1 - - 2 - -There is a keystroke-saving verb for this: :ref:`mlr unsparsify `. - -Parsing log-file output ----------------------------------------------------------------- - -This, of course, depends highly on what's in your log files. But, as an example, suppose you have log-file lines such as - -:: - - 2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378 - -I prefer to pre-filter with ``grep`` and/or ``sed`` to extract the structured text, then hand that to Miller. Example: - -:: - - grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status - -.. _cookbook-memoization-with-oosvars: - -Memoization with out-of-stream variables ----------------------------------------------------------------- - -The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using *f*(0)=1, *f*(1)=1, *f*(*n*)=*f*(*n*-1)+*f*(*n*-2) for *n*≥2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger *n*. This program - -:: - - mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (n < 2) { - return 1 - } else { - return f(n-1) + f(n-2) # recurse - } - } - - @fcount = 0; - $o = f($i); - $fcount = @fcount; - - ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds - - -produces output like this: - -:: - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000039101 - 3 3 5 0.000015974 - 4 5 9 0.000019073 - 5 8 15 0.000026941 - 6 13 25 0.000036955 - 7 21 41 0.000056028 - 8 34 67 0.000086069 - 9 55 109 0.000134945 - 10 89 177 0.000217915 - 11 144 287 0.000355959 - 12 233 465 0.000506163 - 13 377 753 0.000811815 - 14 610 1219 0.001297235 - 15 987 1973 0.001960993 - 16 1597 3193 0.003417969 - 17 2584 5167 0.006215811 - 18 4181 8361 0.008294106 - 19 6765 13529 0.012095928 - 20 10946 21891 0.019592047 - 21 17711 35421 0.031193972 - 22 28657 57313 0.057254076 - 23 46368 92735 0.080307961 - 24 75025 150049 0.129482031 - 25 121393 242785 0.213325977 - 26 196418 392835 0.334423065 - 27 317811 635621 0.605969906 - 28 514229 1028457 0.971235037 - -Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using ``@``-variables, which persist across records, we can cache and reuse the results of previous computations: - -:: - - mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (is_present(@fcache[n])) { # cache hit - return @fcache[n] - } else { # cache miss - num rv = 1; - if (n >= 2) { - rv = f(n-1) + f(n-2) # recurse - } - @fcache[n] = rv; - return rv - } - } - @fcount = 0; - $o = f($i); - $fcount = @fcount; - ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds - -with output like this: - -:: - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000053883 - 3 3 3 0.000035048 - 4 5 3 0.000045061 - 5 8 3 0.000014067 - 6 13 3 0.000028849 - 7 21 3 0.000028133 - 8 34 3 0.000027895 - 9 55 3 0.000014067 - 10 89 3 0.000015020 - 11 144 3 0.000012875 - 12 233 3 0.000033140 - 13 377 3 0.000014067 - 14 610 3 0.000012875 - 15 987 3 0.000029087 - 16 1597 3 0.000013828 - 17 2584 3 0.000013113 - 18 4181 3 0.000012875 - 19 6765 3 0.000013113 - 20 10946 3 0.000012875 - 21 17711 3 0.000013113 - 22 28657 3 0.000013113 - 23 46368 3 0.000015974 - 24 75025 3 0.000012875 - 25 121393 3 0.000013113 - 26 196418 3 0.000012875 - 27 317811 3 0.000013113 - 28 514229 3 0.000012875 diff --git a/docs6/_build/html/_sources/cookbook2.rst.txt b/docs6/_build/html/_sources/cookbook2.rst.txt deleted file mode 100644 index 634af778a..000000000 --- a/docs6/_build/html/_sources/cookbook2.rst.txt +++ /dev/null @@ -1,526 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 2: Random things, and some math -================================================================ - -Randomly selecting words from a list ----------------------------------------------------------------- - -Given this `word list `_, first take a look to see what the first few lines look like: - -:: - - $ head data/english-words.txt - a - aa - aal - aalii - aam - aardvark - aardwolf - aba - abac - abaca - -Then the following will randomly sample ten words with four to eight characters in them: - -:: - - $ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10 - thionine - birchman - mildewy - avigate - addedly - abaze - askant - aiming - insulant - coinmate - -Randomly generating jabberwocky words ----------------------------------------------------------------- - -These are simple *n*-grams as `described here `_. Some common functions are `located here `_. Then here are scripts for `1-grams `_ `2-grams `_ `3-grams `_ `4-grams `_, and `5-grams `_. - -The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list -- giving us automatically generated words in the same vein as *bromance* and *spork*: - -:: - - $ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr - beard - plastinguish - politicially - noise - loan - country - controductionary - suppery - lose - lessors - dollar - judge - rottendence - lessenger - diffendant - suggestional - -Program timing ----------------------------------------------------------------- - -This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller's own runtime. The ``delta`` function computes the difference between successive timestamps. - -:: - - $ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt - - $ head -n 5 lines.txt - i=1 - i=2 - i=3 - i=4 - i=5 - - mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7 - i t t_delta - 1 1430603027.018016 1.430603027e+09 - 2 1430603027.018043 2.694129944e-05 - 3 1430603027.018048 5.006790161e-06 - 4 1430603027.018052 4.053115845e-06 - 5 1430603027.018055 2.861022949e-06 - 6 1430603027.018058 3.099441528e-06 - - mlr --ofmt '%.9le' --oxtab \ - put '$t=systime()' then \ - step -a delta -f t then \ - filter '$i>1' then \ - stats1 -a min,mean,max -f t_delta \ - lines.txt - t_delta_min 2.861022949e-06 - t_delta_mean 4.077508505e-06 - t_delta_max 5.388259888e-05 - -Computing interquartile ranges ----------------------------------------------------------------- - -For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25: - -:: - - $ mlr --oxtab stats1 -f x -a p25,p75 \ - then put '$x_iqr = $x_p75 - $x_p25' \ - data/medium - x_p25 0.246670 - x_p75 0.748186 - x_iqr 0.501516 - -For wildcarded field names, first compute p25 and p75, then loop over field names with ``p25`` in them: - -:: - - $ mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \ - then put 'for (k,v in $*) { - if (k =~ "(.*)_p25") { - $["\1_iqr"] = $["\1_p75"] - $["\1_p25"] - } - }' \ - data/medium - i_p25 2501 - i_p75 7501 - x_p25 0.246670 - x_p75 0.748186 - y_p25 0.252137 - y_p75 0.764003 - i_iqr 5000 - x_iqr 0.501516 - y_iqr 0.511866 - -Computing weighted means ----------------------------------------------------------------- - -This might be more elegantly implemented as an option within the ``stats1`` verb. Meanwhile, it's expressible within the DSL: - -:: - - $ mlr --from data/medium put -q ' - # Using the y field for weighting in this example - weight = $y; - - # Using the a field for weighted aggregation in this example - @sumwx[$a] += weight * $i; - @sumw[$a] += weight; - - @sumx[$a] += $i; - @sumn[$a] += 1; - - end { - map wmean = {}; - map mean = {}; - for (a in @sumwx) { - wmean[a] = @sumwx[a] / @sumw[a] - } - for (a in @sumx) { - mean[a] = @sumx[a] / @sumn[a] - } - #emit wmean, "a"; - #emit mean, "a"; - emit (wmean, mean), "a"; - }' - a=pan,wmean=4979.563722,mean=5028.259010 - a=eks,wmean=4890.381593,mean=4956.290076 - a=wye,wmean=4946.987746,mean=4920.001017 - a=zee,wmean=5164.719685,mean=5123.092330 - a=hat,wmean=4925.533162,mean=4967.743946 - -Generating random numbers from various distributions ----------------------------------------------------------------- - -Here we can chain together a few simple building blocks: - -:: - - $ cat expo-sample.sh - # Generate 100,000 pairs of independent and identically distributed - # exponentially distributed random variables with the same rate parameter - # (namely, 2.5). Then compute histograms of one of them, along with - # histograms for their sum and their product. - # - # See also https://en.wikipedia.org/wiki/Exponential_distribution - # - # Here I'm using a specified random-number seed so this example always - # produces the same output for this web document: in everyday practice we - # wouldn't do that. - - mlr -n \ - --seed 0 \ - --opprint \ - seqgen --stop 100000 \ - then put ' - # https://en.wikipedia.org/wiki/Inverse_transform_sampling - func expo_sample(lambda) { - return -log(1-urand())/lambda - } - $u = expo_sample(2.5); - $v = expo_sample(2.5); - $s = $u + $v; - $p = $u * $v; - ' \ - then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \ - then bar -f u_count,s_count,p_count --auto -w 20 - -Namely: - -* Set the Miller random-number seed so this webdoc looks the same every time I regenerate it. -* Use pretty-printed tabular output. -* Use pretty-printed tabular output. -* Use ``seqgen`` to produce 100,000 records ``i=0``, ``i=1``, etc. -* Send those to a ``put`` step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples. -* Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc. - -The output is as follows: - -:: - - $ sh expo-sample.sh - bin_lo bin_hi u_count s_count p_count - 0.000000 0.040000 [78]*******************#[9497] [353]#...................[3732] [20]*******************#[39755] - 0.040000 0.080000 [78]******************..[9497] [353]*****...............[3732] [20]*******.............[39755] - 0.080000 0.120000 [78]****************....[9497] [353]*********...........[3732] [20]****................[39755] - 0.120000 0.160000 [78]**************......[9497] [353]************........[3732] [20]***.................[39755] - 0.160000 0.200000 [78]*************.......[9497] [353]**************......[3732] [20]**..................[39755] - 0.200000 0.240000 [78]************........[9497] [353]****************....[3732] [20]*...................[39755] - 0.240000 0.280000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755] - 0.280000 0.320000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755] - 0.320000 0.360000 [78]*********...........[9497] [353]*******************.[3732] [20]#...................[39755] - 0.360000 0.400000 [78]********............[9497] [353]*******************.[3732] [20]#...................[39755] - 0.400000 0.440000 [78]*******.............[9497] [353]*******************#[3732] [20]#...................[39755] - 0.440000 0.480000 [78]******..............[9497] [353]******************..[3732] [20]#...................[39755] - 0.480000 0.520000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755] - 0.520000 0.560000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755] - 0.560000 0.600000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755] - 0.600000 0.640000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755] - 0.640000 0.680000 [78]****................[9497] [353]****************....[3732] [20]#...................[39755] - 0.680000 0.720000 [78]***.................[9497] [353]****************....[3732] [20]#...................[39755] - 0.720000 0.760000 [78]***.................[9497] [353]**************......[3732] [20]#...................[39755] - 0.760000 0.800000 [78]**..................[9497] [353]**************......[3732] [20]#...................[39755] - 0.800000 0.840000 [78]**..................[9497] [353]*************.......[3732] [20]#...................[39755] - 0.840000 0.880000 [78]**..................[9497] [353]************........[3732] [20]#...................[39755] - 0.880000 0.920000 [78]**..................[9497] [353]***********.........[3732] [20]#...................[39755] - 0.920000 0.960000 [78]*...................[9497] [353]***********.........[3732] [20]#...................[39755] - 0.960000 1.000000 [78]*...................[9497] [353]**********..........[3732] [20]#...................[39755] - 1.000000 1.040000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755] - 1.040000 1.080000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755] - 1.080000 1.120000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755] - 1.120000 1.160000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755] - 1.160000 1.200000 [78]#...................[9497] [353]*******.............[3732] [20]#...................[39755] - 1.200000 1.240000 [78]#...................[9497] [353]******..............[3732] [20]#...................[39755] - 1.240000 1.280000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.280000 1.320000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.320000 1.360000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.360000 1.400000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755] - 1.400000 1.440000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755] - 1.440000 1.480000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.480000 1.520000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.520000 1.560000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.560000 1.600000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755] - 1.600000 1.640000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755] - 1.640000 1.680000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.680000 1.720000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.720000 1.760000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.760000 1.800000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.800000 1.840000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.840000 1.880000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.880000 1.920000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.920000 1.960000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.960000 2.000000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - -Sieve of Eratosthenes ----------------------------------------------------------------- - -The `Sieve of Eratosthenes `_ is a standard introductory programming topic. The idea is to find all primes up to some *N* by making a list of the numbers 1 to *N*, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in ``begin`` and ``end`` statements; there is no file input (so we use ``mlr -n`` to keep Miller from waiting for input data). - -:: - - $ cat programs/sieve.mlr - # ================================================================ - # Sieve of Eratosthenes: simple example of Miller DSL as programming language. - # ================================================================ - - # Put this in a begin-block so we can do either - # mlr -n put -q -f name-of-this-file.mlr - # or - # mlr -n put -q -f name-of-this-file.mlr -e '@n = 200' - # i.e. 100 is the default upper limit, and another can be specified using -e. - begin { - @n = 100; - } - - end { - for (int i = 0; i <= @n; i += 1) { - @s[i] = true; - } - @s[0] = false; # 0 is neither prime nor composite - @s[1] = false; # 1 is neither prime nor composite - # Strike out multiples - for (int i = 2; i <= @n; i += 1) { - for (int j = i+i; j <= @n; j += i) { - @s[j] = false; - } - } - # Print survivors - for (int i = 0; i <= @n; i += 1) { - if (@s[i]) { - print i; - } - } - } - -:: - - $ mlr -n put -f programs/sieve.mlr - 2 - 3 - 5 - 7 - 11 - 13 - 17 - 19 - 23 - 29 - 31 - 37 - 41 - 43 - 47 - 53 - 59 - 61 - 67 - 71 - 73 - 79 - 83 - 89 - 97 - -Mandelbrot-set generator ----------------------------------------------------------------- - -The `Mandelbrot set `_ is also easily expressed. This isn't an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language -- a test case for the expressiveness of the language. - -The (approximate) computation of points in the complex plane which are and aren't members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen: - -:: - - $ cat programs/mand.mlr - # Mandelbrot set generator: simple example of Miller DSL as programming language. - begin { - # Set defaults - @rcorn = -2.0; - @icorn = -2.0; - @side = 4.0; - @iheight = 50; - @iwidth = 100; - @maxits = 100; - @levelstep = 5; - @chars = "@X*o-."; # Palette of characters to print to the screen. - @verbose = false; - @do_julia = false; - @jr = 0.0; # Real part of Julia point, if any - @ji = 0.0; # Imaginary part of Julia point, if any - } - - # Here, we can override defaults from an input file (if any). In Miller's - # put/filter DSL, absent-null right-hand sides result in no assignment so we - # can simply put @rcorn = $rcorn: if there is a field in the input like - # 'rcorn = -1.847' we'll read and use it, else we'll keep the default. - @rcorn = $rcorn; - @icorn = $icorn; - @side = $side; - @iheight = $iheight; - @iwidth = $iwidth; - @maxits = $maxits; - @levelstep = $levelstep; - @chars = $chars; - @verbose = $verbose; - @do_julia = $do_julia; - @jr = $jr; - @ji = $ji; - - end { - if (@verbose) { - print "RCORN = ".@rcorn; - print "ICORN = ".@icorn; - print "SIDE = ".@side; - print "IHEIGHT = ".@iheight; - print "IWIDTH = ".@iwidth; - print "MAXITS = ".@maxits; - print "LEVELSTEP = ".@levelstep; - print "CHARS = ".@chars; - } - - # Iterate over a matrix of rows and columns, printing one character for each cell. - for (int ii = @iheight-1; ii >= 0; ii -= 1) { - num pi = @icorn + (ii/@iheight) * @side; - for (int ir = 0; ir < @iwidth; ir += 1) { - num pr = @rcorn + (ir/@iwidth) * @side; - printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji); - } - print; - } - } - - # This is a function to approximate membership in the Mandelbrot set (or Julia - # set for a given Julia point if do_julia == true) for a given point in the - # complex plane. - func get_point_plot(pr, pi, maxits, do_julia, jr, ji) { - num zr = 0.0; - num zi = 0.0; - num cr = 0.0; - num ci = 0.0; - - if (!do_julia) { - zr = 0.0; - zi = 0.0; - cr = pr; - ci = pi; - } else { - zr = pr; - zi = pi; - cr = jr; - ci = ji; - } - - int iti = 0; - bool escaped = false; - num zt = 0; - for (iti = 0; iti < maxits; iti += 1) { - num mag = zr*zr + zi+zi; - if (mag > 4.0) { - escaped = true; - break; - } - # z := z^2 + c - zt = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = zt; - } - if (!escaped) { - return "."; - } else { - # The // operator is Miller's (pythonic) integer-division operator - int level = (iti // @levelstep) % strlen(@chars); - return substr(@chars, level, level); - } - } - -At standard resolution this makes a nice little ASCII plot: - -:: - - $ mlr -n put -f ./programs/mand.mlr - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - .........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture: - -:: - - #!/bin/bash - # Get the number of rows and columns from the terminal window dimensions - iheight=$(stty size | mlr --nidx --fs space cut -f 1) - iwidth=$(stty size | mlr --nidx --fs space cut -f 2) - echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \ - | mlr put -f programs/mand.mlr - -.. image:: pix/mand.png diff --git a/docs6/_build/html/_sources/cookbook3.rst.txt b/docs6/_build/html/_sources/cookbook3.rst.txt deleted file mode 100644 index 1537c4cd6..000000000 --- a/docs6/_build/html/_sources/cookbook3.rst.txt +++ /dev/null @@ -1,321 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 3: Stats with and without out-of-stream variables -================================================================ - -Overview ----------------------------------------------------------------- - -One of Miller's strengths is its compact notation: for example, given input of the form - -:: - - $ head -n 5 ../data/medium - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -you can simply do - -:: - - $ mlr --oxtab stats1 -a sum -f x ../data/medium - x_sum 4986.019682 - -or - -:: - - $ mlr --opprint stats1 -a sum -f x -g b ../data/medium - b x_sum - pan 965.763670 - wye 1023.548470 - zee 979.742016 - eks 1016.772857 - hat 1000.192668 - -rather than the more tedious - -:: - - $ mlr --oxtab put -q ' - @x_sum += $x; - end { - emit @x_sum - } - ' data/medium - x_sum 4986.019682 - -or - -:: - - $ mlr --opprint put -q ' - @x_sum[$b] += $x; - end { - emit @x_sum, "b" - } - ' data/medium - b x_sum - pan 965.763670 - wye 1023.548470 - zee 979.742016 - eks 1016.772857 - hat 1000.192668 - -The former (``mlr stats1`` et al.) has the advantages of being easier to type, being less error-prone to type, and running faster. - -Nonetheless, out-of-stream variables (which I whimsically call *oosvars*), begin/end blocks, and emit statements give you the ability to implement logic -- if you wish to do so -- which isn't present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.) - -The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought. - -Mean without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint stats1 -a mean -f x data/medium - x_mean - 0.498602 - -:: - - $ mlr --opprint put -q ' - @x_sum += $x; - @x_count += 1; - end { - @x_mean = @x_sum / @x_count; - emit @x_mean - } - ' data/medium - x_mean - 0.498602 - -Keyed mean without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint stats1 -a mean -f x -g a,b data/medium - a b x_mean - pan pan 0.513314 - eks pan 0.485076 - wye wye 0.491501 - eks wye 0.483895 - wye pan 0.499612 - zee pan 0.519830 - eks zee 0.495463 - zee wye 0.514267 - hat wye 0.493813 - pan wye 0.502362 - zee eks 0.488393 - hat zee 0.509999 - hat eks 0.485879 - wye hat 0.497730 - pan eks 0.503672 - eks eks 0.522799 - hat hat 0.479931 - hat pan 0.464336 - zee zee 0.512756 - pan hat 0.492141 - pan zee 0.496604 - zee hat 0.467726 - wye zee 0.505907 - eks hat 0.500679 - wye eks 0.530604 - -:: - - $ mlr --opprint put -q ' - @x_sum[$a][$b] += $x; - @x_count[$a][$b] += 1; - end{ - for ((a, b), v in @x_sum) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]; - } - emit @x_mean, "a", "b" - } - ' data/medium - a b x_mean - pan pan 0.513314 - pan wye 0.502362 - pan eks 0.503672 - pan hat 0.492141 - pan zee 0.496604 - eks pan 0.485076 - eks wye 0.483895 - eks zee 0.495463 - eks eks 0.522799 - eks hat 0.500679 - wye wye 0.491501 - wye pan 0.499612 - wye hat 0.497730 - wye zee 0.505907 - wye eks 0.530604 - zee pan 0.519830 - zee wye 0.514267 - zee eks 0.488393 - zee zee 0.512756 - zee hat 0.467726 - hat wye 0.493813 - hat zee 0.509999 - hat eks 0.485879 - hat hat 0.479931 - hat pan 0.464336 - -Variance and standard deviation without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium - x_count 10000 - x_sum 4986.019682 - x_mean 0.498602 - x_var 0.084270 - x_stddev 0.290293 - -:: - - $ cat variance.mlr - @n += 1; - @sumx += $x; - @sumx2 += $x**2; - end { - @mean = @sumx / @n; - @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1); - @stddev = sqrt(@var); - emitf @n, @sumx, @sumx2, @mean, @var, @stddev - } - -:: - - $ mlr --oxtab put -q -f variance.mlr data/medium - n 10000 - sumx 4986.019682 - sumx2 3328.652400 - mean 0.498602 - var 0.084270 - stddev 0.290293 - -You can also do this keyed, of course, imitating the keyed-mean example above. - -Min/max without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --oxtab stats1 -a min,max -f x data/medium - x_min 0.000045 - x_max 0.999953 - -:: - - $ mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium - x_min 0.000045 - x_max 0.999953 - -Keyed min/max without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint stats1 -a min,max -f x -g a data/medium - a x_min x_max - pan 0.000204 0.999403 - eks 0.000692 0.998811 - wye 0.000187 0.999823 - zee 0.000549 0.999490 - hat 0.000045 0.999953 - -:: - - $ mlr --opprint --from data/medium put -q ' - @min[$a] = min(@min[$a], $x); - @max[$a] = max(@max[$a], $x); - end{ - emit (@min, @max), "a"; - } - ' - a min max - pan 0.000204 0.999403 - eks 0.000692 0.998811 - wye 0.000187 0.999823 - zee 0.000549 0.999490 - hat 0.000045 0.999953 - -Delta without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint step -a delta -f x data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 - wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 - eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 - wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 - -:: - - $ mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 - wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 - eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 - wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 - -Keyed delta without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint step -a delta -f x -g a data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0 - wye wye 3 0.20460330576630303 0.33831852551664776 0 - eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281 - wye pan 5 0.5732889198020006 0.8636244699032729 0.368686 - -:: - - $ mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0 - wye wye 3 0.20460330576630303 0.33831852551664776 0 - eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281 - wye pan 5 0.5732889198020006 0.8636244699032729 0.368686 - -Exponentially weighted moving averages without/with oosvars ----------------------------------------------------------------- - -:: - - $ mlr --opprint step -a ewma -d 0.1 -f x data/small - a b i x y x_ewma_0.1 - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 - -:: - - $ mlr --opprint put ' - begin{ @a=0.1 }; - $e = NR==1 ? $x : @a * $x + (1 - @a) * @e; - @e=$e - ' data/small - a b i x y e - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 diff --git a/docs6/_build/html/_sources/customization.rst.txt b/docs6/_build/html/_sources/customization.rst.txt deleted file mode 100644 index 84ab845f9..000000000 --- a/docs6/_build/html/_sources/customization.rst.txt +++ /dev/null @@ -1,92 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Customization: .mlrrc -================================================================ - -How to use .mlrrc ----------------------------------------------------------------- - -Suppose you always use CSV files. Then instead of always having to type ``--csv`` as in - -:: - - mlr --csv cut -x -f extra mydata.csv - -:: - - mlr --csv sort -n id mydata.csv - -and so on, you can instead put the following into your ``$HOME/.mlrrc``: - -:: - - --csv - -Then you can just type things like - -:: - - mlr cut -x -f extra mydata.csv - -:: - - mlr sort -n id mydata.csv - -and the ``--csv`` part will automatically be understood. (If you do want to process, say, a JSON file then ``mlr --json ...`` at the command line will override the default from your ``.mlrrc``.) - -What you can put in your .mlrrc ----------------------------------------------------------------- - -* You can include any command-line flags, except the "terminal" ones such as ``--help``. - -* The formatting rule is you need to put one flag beginning with ``--`` per line: for example, ``--csv`` on one line and ``--nr-progress-mod 1000`` on a separate line. - -* Since every line starts with a ``--`` option, you can leave off the initial ``--`` if you want. For example, ``ojson`` is the same as ``--ojson``, and ``nr-progress-mod 1000`` is the same as ``--nr-progress-mod 1000``. - -* Comments are from a ``#`` to the end of the line. - -* Empty lines are ignored -- including lines which are empty after comments are removed. - -Here is an example ``.mlrrc file``: - -:: - - # These are my preferred default settings for Miller - - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - - # If a data line has fewer fields than the header line, instead of erroring - # (which is the default), just insert empty values for the missing ones: - allow-ragged-csv-input - - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - # Use "@", rather than "#", for comments within data files: - skip-comments-with @ - -Where to put your .mlrrc ----------------------------------------------------------------- - -* If the environment variable ``MLRRC`` is set: - - * If its value is ``__none__`` then no ``.mlrrc`` files are processed. (This is nice for things like regression testing.) - - * Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort ``mlr`` with a usage message (as if you had mistyped something on the command line). If the file can't be loaded at all, though, it is silently skipped. - - * Any ``.mlrrc`` in your home directory or current directory is ignored whenever ``MLRRC`` is set in the environment. - - * Example line in your shell's rc file: ``export MLRRC=/path/to/my/mlrrc`` - -* Otherwise: - - * If ``$HOME/.mlrrc`` exists, it's processed as above. - - * If ``./.mlrrc`` exists, it's then also processed as above. - - * The idea is you can have all your settings in your ``$HOME/.mlrrc``, then override maybe one or two for your current directory if you like. diff --git a/docs6/_build/html/_sources/data-examples.rst.txt b/docs6/_build/html/_sources/data-examples.rst.txt deleted file mode 100644 index 2fca5f772..000000000 --- a/docs6/_build/html/_sources/data-examples.rst.txt +++ /dev/null @@ -1,194 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Data-diving examples -================================================================ - -flins data ----------------------------------------------------------------- - -The `flins.csv `_ file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data. - -Vertical-tabular format is good for a quick look at CSV data layout -- seeing what columns you have to work with: - -:: - - $ head -n 2 data/flins.csv | mlr --icsv --oxtab cat - county Seminole - tiv_2011 22890.55 - tiv_2012 20848.71 - line Residential - -A few simple queries: - -:: - - $ mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head - county count - Seminole 1 - Miami Dade 2 - Palm Beach 1 - Highlands 2 - Duval 1 - St. Johns 1 - - $ mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line - -Categorization of total insured value: - -:: - - $ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 - tiv_2012_min tiv_2012_mean tiv_2012_max - 19757.910000 1061531.463750 2785551.630000 - - $ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line - - $ mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible - hu_site_deductible_p0 - hu_site_deductible_p10 - hu_site_deductible_p50 - hu_site_deductible_p90 - hu_site_deductible_p95 - hu_site_deductible_p99 - hu_site_deductible_p100 - - $ mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head - county hu_site_deductible_p95 hu_site_deductible_p99 hu_site_deductible_p100 - Duval - - - - Highlands - - - - Miami Dade - - - - Palm Beach - - - - Seminole - - - - St. Johns - - - - - $ mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 - tiv_2011_tiv_2012_corr 0.935363 - tiv_2011_tiv_2012_ols_m 1.089091 - tiv_2011_tiv_2012_ols_b 103095.523356 - tiv_2011_tiv_2012_ols_n 8 - tiv_2011_tiv_2012_r2 0.874904 - - $ mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county - county tiv_2011_tiv_2012_corr tiv_2011_tiv_2012_ols_m tiv_2011_tiv_2012_ols_b tiv_2011_tiv_2012_ols_n tiv_2011_tiv_2012_r2 - Seminole - - - 1 - - Miami Dade 1.000000 0.930643 -2311.154328 2 1.000000 - Palm Beach - - - 1 - - Highlands 1.000000 1.055693 -4529.793939 2 1.000000 - Duval - - - 1 - - St. Johns - - - 1 - - -Color/shape data ----------------------------------------------------------------- - -The `colored-shapes.dkvp `_ file is some sample data produced by the `mkdat2 `_ script. The idea is: - -* Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically. -* Each record is labeled with one of a few colors and one of a few shapes. -* The ``flag`` field is 0 or 1, with probability dependent on color -* The ``u`` field is plain uniform on the unit interval. -* The ``v`` field is the same, except tightly correlated with ``u`` for red circles. -* The ``w`` field is autocorrelated for each color/shape pair. -* The ``x`` field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape. - -Peek at the data: - -:: - - $ wc -l data/colored-shapes.dkvp - 10078 data/colored-shapes.dkvp - - $ head -n 6 data/colored-shapes.dkvp | mlr --opprint cat - color shape flag i u v w x - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - red square 1 15 0.21966833570651523 0.001257332190235938 0.7927778364718627 2.944117399716207 - red circle 1 16 0.20901671281497636 0.29005231936593445 0.13810280912907674 5.065034003400998 - red square 0 48 0.9562743938458542 0.7467203085342884 0.7755423050923582 7.117831369597269 - purple triangle 0 51 0.4355354501763202 0.8591292672156728 0.8122903963006748 5.753094629505863 - red square 0 64 0.2015510269821953 0.9531098083420033 0.7719912015786777 5.612050466474166 - -Look at uncategorized stats (using `creach `_ for spacing). - -Here it looks reasonable that ``u`` is unit-uniform; something's up with ``v`` but we can't yet see what: - -:: - - $ mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3 - flag_min 0 - flag_mean 0.398889 - flag_max 1 - - u_min 0.000044 - u_mean 0.498326 - u_max 0.999969 - - v_min -0.092709 - v_mean 0.497787 - v_max 1.072500 - -The histogram shows the different distribution of 0/1 flags: - -:: - - $ mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp - bin_lo bin_hi flag_count u_count v_count - -0.100000 0.000000 6058 0 36 - 0.000000 0.100000 0 1062 988 - 0.100000 0.200000 0 985 1003 - 0.200000 0.300000 0 1024 1014 - 0.300000 0.400000 0 1002 991 - 0.400000 0.500000 0 989 1041 - 0.500000 0.600000 0 1001 1016 - 0.600000 0.700000 0 972 962 - 0.700000 0.800000 0 1035 1070 - 0.800000 0.900000 0 995 993 - 0.900000 1.000000 4020 1013 939 - 1.000000 1.100000 0 0 25 - -Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script: - -:: - - $ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp - color flag_min flag_mean flag_max u_min u_mean u_max v_min v_mean v_max - blue 0 0.584354 1 0.000044 0.517717 0.999969 0.001489 0.491056 0.999576 - green 0 0.209197 1 0.000488 0.504861 0.999936 0.000501 0.499085 0.999676 - orange 0 0.521452 1 0.001235 0.490532 0.998885 0.002449 0.487764 0.998475 - purple 0 0.090193 1 0.000266 0.494005 0.999647 0.000364 0.497051 0.999975 - red 0 0.303167 1 0.000671 0.492560 0.999882 -0.092709 0.496535 1.072500 - yellow 0 0.892427 1 0.001300 0.497129 0.999923 0.000711 0.510627 0.999919 - - $ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp - shape flag_min flag_mean flag_max u_min u_mean u_max v_min v_mean v_max - circle 0 0.399846 1 0.000044 0.498555 0.999923 -0.092709 0.495524 1.072500 - square 0 0.396112 1 0.000188 0.499385 0.999969 0.000089 0.496538 0.999975 - triangle 0 0.401542 1 0.000881 0.496859 0.999661 0.000717 0.501050 0.999995 - -Look at bivariate stats by color and shape. In particular, ``u,v`` pairwise correlation for red circles pops out: - -:: - - $ mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp - u_v_corr w_x_corr - 0.133418 -0.011320 - - $ mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp - color shape u_v_corr w_x_corr - red circle 0.980798 -0.018565 - orange square 0.176858 -0.071044 - green circle 0.057644 0.011795 - red square 0.055745 -0.000680 - yellow triangle 0.044573 0.024605 - yellow square 0.043792 -0.044623 - purple circle 0.035874 0.134112 - blue square 0.032412 -0.053508 - blue triangle 0.015356 -0.000608 - orange circle 0.010519 -0.162795 - red triangle 0.008098 0.012486 - purple triangle 0.005155 -0.045058 - purple square -0.025680 0.057694 - green square -0.025776 -0.003265 - orange triangle -0.030457 -0.131870 - yellow circle -0.064773 0.073695 - blue circle -0.102348 -0.030529 - green triangle -0.109018 -0.048488 diff --git a/docs6/_build/html/_sources/data-sharing.rst.txt b/docs6/_build/html/_sources/data-sharing.rst.txt deleted file mode 100644 index 7bcfd32ae..000000000 --- a/docs6/_build/html/_sources/data-sharing.rst.txt +++ /dev/null @@ -1,319 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Mixing with other languages -================================================================ - -As discussed in the section on :doc:`file-formats`, Miller supports several different file formats. Different tools are good at different things, so it's important to be able to move data into and out of other languages. **CSV** and **JSON** are well-known, of course; here are some examples using **DKVP** format, with **Ruby** and **Python**. Last, we show how to use arbitrary **shell commands** to extend functionality beyond Miller's domain-specific language. - -DKVP I/O in Python ----------------------------------------------------------------- - -Here are the I/O routines: - -:: - - #!/usr/bin/env python - - # ================================================================ - # Example of DKVP I/O using Python. - # - # Key point: Use Miller for what it's good at; pass data into/out of tools in - # other languages to do what they're good at. - # - # bash$ python -i dkvp_io.py - # - # # READ - # >>> map = dkvpline2map('x=1,y=2', '=', ',') - # >>> map - # OrderedDict([('x', '1'), ('y', '2')]) - # - # # MODIFY - # >>> map['z'] = map['x'] + map['y'] - # >>> map - # OrderedDict([('x', '1'), ('y', '2'), ('z', 3)]) - # - # # WRITE - # >>> line = map2dkvpline(map, '=', ',') - # >>> line - # 'x=1,y=2,z=3' - # - # ================================================================ - - import re - import collections - - # ---------------------------------------------------------------- - # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. - def dkvpline2map(line, ips, ifs): - pairs = re.split(ifs, line) - map = collections.OrderedDict() - for pair in pairs: - key, value = re.split(ips, pair, 1) - - # Type inference: - try: - value = int(value) - except: - try: - value = float(value) - except: - pass - - map[key] = value - return map - - # ---------------------------------------------------------------- - # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. - def map2dkvpline(map , ops, ofs): - line = '' - pairs = [] - for key in map: - pairs.append(str(key) + ops + str(map[key])) - return str.join(ofs, pairs) - -And here is an example using them: - -:: - - $ cat polyglot-dkvp-io/example.py - #!/usr/bin/env python - - import sys - import re - import copy - import dkvp_io - - while True: - # Read the original record: - line = sys.stdin.readline().strip() - if line == '': - break - map = dkvp_io.dkvpline2map(line, '=', ',') - - # Drop a field: - map.pop('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over - keys = omap.keys() - for key in keys: - # Convert "" to just "int", etc.: - type_string = str(map[key].__class__) - type_string = re.sub("", "", type_string) - map['t'+key] = type_string - - # Write the modified record: - print(dkvp_io.map2dkvpline(map, '=', ',')) - -Run as-is: - -:: - - $ python polyglot-dkvp-io/example.py < data/small - a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - -Run as-is, then pipe to Miller for pretty-printing: - -:: - - $ python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat - a b i y ab iy ta tb ti ty tab tiy - pan pan 1 0.7268028627434533 panpan 1.7268028627434533 str str int float str float - eks pan 2 0.5221511083334797 ekspan 2.5221511083334796 str str int float str float - wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 str str int float str float - eks wye 4 0.13418874328430463 ekswye 4.134188743284304 str str int float str float - wye pan 5 0.8636244699032729 wyepan 5.863624469903273 str str int float str float - -DKVP I/O in Ruby ----------------------------------------------------------------- - -Here are the I/O routines: - -:: - - #!/usr/bin/env ruby - - # ================================================================ - # Example of DKVP I/O using Ruby. - # - # Key point: Use Miller for what it's good at; pass data into/out of tools in - # other languages to do what they're good at. - # - # bash$ irb -I. -r dkvp_io.rb - # - # # READ - # irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',') - # => {"x"=>"1", "y"=>"2"} - # - # # MODIFY - # irb(main):001:0> map['z'] = map['x'] + map['y'] - # => 3 - # - # # WRITE - # irb(main):002:0> line = map2dkvpline(map, '=', ',') - # => "x=1,y=2,z=3" - # - # ================================================================ - - # ---------------------------------------------------------------- - # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. - def dkvpline2map(line, ips, ifs) - map = {} - line.split(ifs).each do |pair| - (k, v) = pair.split(ips, 2) - - # Type inference: - begin - v = Integer(v) - rescue ArgumentError - begin - v = Float(v) - rescue ArgumentError - # Leave as string - end - end - - map[k] = v - end - map - end - - # ---------------------------------------------------------------- - # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. - def map2dkvpline(map, ops, ofs) - map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs) - end - -And here is an example using them: - -:: - - $ cat polyglot-dkvp-io/example.rb - #!/usr/bin/env ruby - - require 'dkvp_io' - - ARGF.each do |line| - # Read the original record: - map = dkvpline2map(line.chomp, '=', ',') - - # Drop a field: - map.delete('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - keys = map.keys - keys.each do |key| - map['t'+key] = map[key].class - end - - # Write the modified record: - puts map2dkvpline(map, '=', ',') - end - -Run as-is: - -:: - - $ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small - a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - -Run as-is, then pipe to Miller for pretty-printing: - -:: - - $ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat - a b i y ab iy ta tb ti ty tab tiy - pan pan 1 0.7268028627434533 panpan 1.7268028627434533 String String Integer Float String Float - eks pan 2 0.5221511083334797 ekspan 2.5221511083334796 String String Integer Float String Float - wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 String String Integer Float String Float - eks wye 4 0.13418874328430463 ekswye 4.134188743284304 String String Integer Float String Float - wye pan 5 0.8636244699032729 wyepan 5.863624469903273 String String Integer Float String Float - -SQL-output examples ----------------------------------------------------------------- - -Please see :ref:`sql-output-examples`. - -SQL-input examples ----------------------------------------------------------------- - -Please see :ref:`sql-input-examples`. - -Running shell commands ----------------------------------------------------------------- - -The :ref:`reference-dsl-system` DSL function allows you to run a specific shell command and put its output -- minus the final newline -- into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you. - -:: - - $ mlr --opprint put '$o = system("echo hello world")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 hello world - eks pan 2 0.7586799647899636 0.5221511083334797 hello world - wye wye 3 0.20460330576630303 0.33831852551664776 hello world - eks wye 4 0.38139939387114097 0.13418874328430463 hello world - wye pan 5 0.5732889198020006 0.8636244699032729 hello world - -:: - - $ mlr --opprint put '$o = system("echo {" . NR . "}")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 {1} - eks pan 2 0.7586799647899636 0.5221511083334797 {2} - wye wye 3 0.20460330576630303 0.33831852551664776 {3} - eks wye 4 0.38139939387114097 0.13418874328430463 {4} - wye pan 5 0.5732889198020006 0.8636244699032729 {5} - -:: - - $ mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 f29c748220331c273ef16d5115f6ecd799947f13 - - eks pan 2 0.7586799647899636 0.5221511083334797 456d988ecb3bf1b75f057fc6e9fe70db464e9388 - - wye wye 3 0.20460330576630303 0.33831852551664776 eab0de043d67f441c7fd1e335f0ca38708e6ebf7 - - eks wye 4 0.38139939387114097 0.13418874328430463 456d988ecb3bf1b75f057fc6e9fe70db464e9388 - - wye pan 5 0.5732889198020006 0.8636244699032729 eab0de043d67f441c7fd1e335f0ca38708e6ebf7 - - -Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system ``date`` command for the current time in nanoseconds versus computing it in process: - -.. - hard-coded, not live-code, since %N doesn't exist on all platforms - -:: - - $ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.513903817 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.514722876 0.000819 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.517518828 0.000971 - -:: - - $ mlr --opprint put '$t=systime()' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.518699 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.518717 0.000018 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.518730 0.000003 diff --git a/docs6/_build/html/_sources/etymology.rst.txt b/docs6/_build/html/_sources/etymology.rst.txt deleted file mode 100644 index 5fe69f2f5..000000000 --- a/docs6/_build/html/_sources/etymology.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Why call it Miller? -================================================================ - -The Unix toolkit was created in the **1970s** and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the `classic toolkit style `_: if this were music, Miller would be a **tribute album**. Likewise, since commands are subcommands of the ``mlr`` executable, the result is a **band**, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the `Steve Miller Band `_. - -(Additionally, and far more prosaically ... just as a miller is someone who grinds and mixes grain into flour to extend its usefulness, Miller grinds and mixes data for you.) diff --git a/docs6/_build/html/_sources/faq.rst.txt b/docs6/_build/html/_sources/faq.rst.txt deleted file mode 100644 index 12e1c34fb..000000000 --- a/docs6/_build/html/_sources/faq.rst.txt +++ /dev/null @@ -1,658 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -FAQ -========= - -No output at all ----------------------------------------------------------------- - -Try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -If you're using Miller version less than 5.0.0 (try ``mlr --version`` on your system to find out), when the line-ending-autodetect feature was introduced, please see http://johnkerl.org/miller-releases/miller-4.5.0/doc/index.html. - -Fields not selected ----------------------------------------------------------------- - -Check the field-separators of the data, e.g. with the command-line ``head`` program. Example: for CSV, Miller's default record separator is comma; if your data is tab-delimited, e.g. ``aTABbTABc``, then Miller won't find three fields named ``a``, ``b``, and ``c`` but rather just one named ``aTABbTABc``. Solution in this case: ``mlr --fs tab {remaining arguments ...}``. - -Also try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -Diagnosing delimiter specifications ----------------------------------------------------------------- - -:: - - # Use the `file` command to see if there are CR/LF terminators (in this case, - # there are not): - $ file data/colours.csv - data/colours.csv: UTF-8 Unicode text - - # Look at the file to find names of fields - $ cat data/colours.csv - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR - masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz - masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - - # Extract a few fields: - $ mlr --csv cut -f KEY,PL,RO data/colours.csv - (only blank lines appear) - - # Use XTAB output format to get a sharper picture of where records/fields - # are being split: - $ mlr --icsv --oxtab cat data/colours.csv - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz - - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - - # Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being - # treated as a single field name in the CSV header, and likewise each - # subsequent line is being treated as a single field value. This is because - # the default field separator is a comma but we have semicolons here. - # Use XTAB again with different field separator (--fs semicolon): - mlr --icsv --ifs semicolon --oxtab cat data/colours.csv - KEY masterdata_colourcode_1 - DE Weiß - EN White - ES Blanco - FI Valkoinen - FR Blanc - IT Bianco - NL Wit - PL Biały - RO Alb - TR Beyaz - - KEY masterdata_colourcode_2 - DE Schwarz - EN Black - ES Negro - FI Musta - FR Noir - IT Nero - NL Zwart - PL Czarny - RO Negru - TR Siyah - - # Using the new field-separator, retry the cut: - mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv - KEY;PL;RO - masterdata_colourcode_1;Biały;Alb - masterdata_colourcode_2;Czarny;Negru - -How do I suppress numeric conversion? ----------------------------------------------------------------- - -**TL;DR use put -S**. - -Within ``mlr put`` and ``mlr filter``, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string: - -:: - - $ cat data/scan-example-1.tbl - value - 1 - 2.0 - 3x - hello - -:: - - $ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl - value copy type - 1 1 int - 2.0 2.000000 float - 3x 3x string - hello hello string - -The numeric-conversion rule is simple: - -* Try to scan as integer (``"1"`` should be int); -* If that doesn't succeed, try to scan as float (``"1.0"`` should be float); -* If that doesn't succeed, leave the value as a string (``"1x"`` is string). - -This is a sensible default: you should be able to put ``'$z = $x + $y'`` without having to write ``'$z = int($x) + float($y)'``. Also note that default output format for floating-point numbers created by ``put`` (and other verbs such as ``stats1``) is six decimal places; you can override this using ``mlr --ofmt``. Also note that Miller uses your system's C library functions whenever possible: e.g. ``sscanf`` for converting strings to integer or floating-point. - -But now suppose you have data like these: - -:: - - $ cat data/scan-example-2.tbl - value - 0001 - 0002 - 0005 - 0005WA - 0006 - 0007 - 0007WA - 0008 - 0009 - 0010 - -:: - - $ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl - value copy type - 0001 1 int - 0002 2 int - 0005 5 int - 0005WA 0005WA string - 0006 6 int - 0007 7 int - 0007WA 0007WA string - 0008 8.000000 float - 0009 9.000000 float - 0010 8 int - -The same conversion rules as above are being used. Namely: - -* By default field values are inferred to int, else float, else string; - -* leading zeroes indicate octal for integers (``sscanf`` semantics); - -* since ``0008`` doesn't scan as integer (leading 0 requests octal but 8 isn't a valid octal digit), the float scan is tried next and it succeeds; - -* default floating-point output format is 6 decimal places (override with ``mlr --ofmt``). - -Taken individually the rules make sense; taken collectively they produce a mishmash of types here. - -The solution is to **use the -S flag** for ``mlr put`` and/or ``mlr filter``. Then all field values are left as string. You can type-coerce on demand using syntax like ``'$z = int($x) + float($y)'``. (See also :doc:`reference-dsl`; see also https://github.com/johnkerl/miller/issues/150.) - -:: - - $ mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl - value copy type - 0001 0001 string - 0002 0002 string - 0005 0005 string - 0005WA 0005WA string - 0006 0006 string - 0007 0007 string - 0007WA 0007WA string - 0008 0008 string - 0009 0009 string - 0010 0010 string - -How do I examine then-chaining? ----------------------------------------------------------------- - -Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step. - -First, look at the input data: - -:: - - $ cat data/then-example.csv - Status,Payment_Type,Amount - paid,cash,10.00 - pending,debit,20.00 - paid,cash,50.00 - pending,credit,40.00 - paid,debit,30.00 - -Next, run the first step of your command, omitting anything from the first ``then`` onward: - -:: - - $ mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -After that, run it with the next ``then`` step included: - -:: - - $ mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -Now if you use ``then`` to include another verb after that, the columns ``Status``, ``Payment_Type``, and ``count`` will be the input to that verb. - -Note, by the way, that you'll get the same results using pipes: - -:: - - $ mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -I assigned $9 and it's not 9th ----------------------------------------------------------------- - -Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with ``--implicit-csv-header``, Miller will sequentially assign keys of the form ``1``, ``2``, etc. But these are not integer array indices: they're just field names taken from the initial field ordering in the input data. - -:: - - $ echo x,y,z | mlr --dkvp cat - 1=x,2=y,3=z - -:: - - $ echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"' - 1=x,2=y,3=z,6=a,4=b,55=cde - -:: - - $ echo x,y,z | mlr --nidx cat - x,y,z - -:: - - $ echo x,y,z | mlr --csv --implicit-csv-header cat - 1,2,3 - x,y,z - -:: - - $ echo x,y,z | mlr --dkvp rename 2,999 - 1=x,999=y,3=z - -:: - - $ echo x,y,z | mlr --dkvp rename 2,newname - 1=x,newname=y,3=z - -:: - - $ echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2 - 3,1,2 - z,x,y - -How can I filter by date? ----------------------------------------------------------------- - -Given input like - -:: - - $ cat dates.csv - date,event - 2018-02-03,initialization - 2018-03-07,discovery - 2018-02-03,allocation - -we can use ``strptime`` to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset's date-formatting to the :ref:`reference-dsl-strptime` format-string. For example: - -:: - - $ mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv - date,event - 2018-03-07,discovery - -Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 -- thanks @aborruso! - -How can I handle commas-as-data in various formats? ----------------------------------------------------------------- - -:doc:`CSV ` handles this well and by design: - -:: - - $ cat commas.csv - Name,Role - "Xiao, Lin",administrator - "Khavari, Darius",tester - -Likewise :ref:`file-formats-json`: - -:: - - $ mlr --icsv --ojson cat commas.csv - { "Name": "Xiao, Lin", "Role": "administrator" } - { "Name": "Khavari, Darius", "Role": "tester" } - -For Miller's :ref:`vertical-tabular format ` there is no escaping for carriage returns, but commas work fine: - -:: - - $ mlr --icsv --oxtab cat commas.csv - Name Xiao, Lin - Role administrator - - Name Khavari, Darius - Role tester - -But for :ref:`Key-value_pairs ` and :ref:`index-numbered `, commas are the default field separator. And -- as of Miller 5.4.0 anyway -- there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters: - -:: - - $ mlr --icsv --odkvp cat commas.csv - Name=Xiao, Lin,Role=administrator - Name=Khavari, Darius,Role=tester - -One solution is to use a different delimiter, such as a pipe character: - -:: - - $ mlr --icsv --odkvp --ofs pipe cat commas.csv - Name=Xiao, Lin|Role=administrator - Name=Khavari, Darius|Role=tester - -To be extra-sure to avoid data/delimiter clashes, you can also use control -characters as delimiters -- here, control-A: - -:: - - $ mlr --icsv --odkvp --ofs '\001' cat commas.csv | cat -v - Name=Xiao, Lin^ARole=administrator - Name=Khavari, Darius^ARole=tester - -How can I handle field names with special symbols in them? ----------------------------------------------------------------- - -Simply surround the field names with curly braces: - -:: - - $ echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}' - x.a=3,y:b=4,z/c=5,product.all=60 - -How to escape '?' in regexes? ----------------------------------------------------------------- - -One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression. - -:: - - $ cat data/question.dat - a=is it?,b=it is! - $ mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat - a is it? - b it is! - c is it ... - $ mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat - a is it? - b it is! - c is it ... - -The ``ssub`` function exists precisely for this reason: so you don't have to escape anything. - -How can I put single-quotes into strings? ----------------------------------------------------------------- - -This is a little tricky due to the shell's handling of quotes. For simplicity, let's first put an update script into a file: - -:: - - $a = "It's OK, I said, then 'for now'." - -:: - - $ echo a=bcd | mlr put -f data/single-quote-example.mlr - a=It's OK, I said, then 'for now'. - -So, it's simple: Miller's DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem. - -Without putting the update expression in a file, it's messier: - -:: - - $ echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."' - a=It's OK, I said, 'for now'. - -The idea is that the outermost single-quotes are to protect the ``put`` expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it *outside* the single-quoting for the shell. The pieces are the following, all concatenated together: - -* ``$a="It`` -* ``\'`` -* ``s OK, I said,`` -* ``\'`` -* ``for now`` -* ``\'`` -* ``.`` - -Why doesn't mlr cut put fields in the order I want? ----------------------------------------------------------------- - -Example: columns ``x,i,a`` were requested but they appear here in the order ``a,i,x``: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr cut -f x,i,a data/small - a=pan,i=1,x=0.3467901443380824 - a=eks,i=2,x=0.7586799647899636 - a=wye,i=3,x=0.20460330576630303 - a=eks,i=4,x=0.38139939387114097 - a=wye,i=5,x=0.5732889198020006 - -The issue is that Miller's ``cut``, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the Unix/Linux system ``cut`` command, which has the same semantics. - -The solution is to use the ``-o`` option: - -:: - - $ mlr cut -o -f x,i,a data/small - x=0.3467901443380824,i=1,a=pan - x=0.7586799647899636,i=2,a=eks - x=0.20460330576630303,i=3,a=wye - x=0.38139939387114097,i=4,a=eks - x=0.5732889198020006,i=5,a=wye - -NR is not consecutive after then-chaining ----------------------------------------------------------------- - -Given this input data: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -why don't I see ``NR=1`` and ``NR=2`` here?? - -:: - - $ mlr filter '$x > 0.5' then put '$NR = NR' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NR=2 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NR=5 - -The reason is that ``NR`` is computed for the original input records and isn't dynamically updated. By contrast, ``NF`` is dynamically updated: it's the number of fields in the current record, and if you add/remove a field, the value of ``NF`` will change: - -:: - - $ echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF' - nf1=3,u=4,nf2=5,nf3=3 - -``NR``, by contrast (and ``FNR`` as well), retains the value from the original input stream, and records may be dropped by a ``filter`` within a ``then``-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows: - -:: - - $ mlr --opprint --from data/small put ' - begin{ @nr1 = 0 } - @nr1 += 1; - $nr1 = @nr1 - ' \ - then filter '$x>0.5' \ - then put ' - begin{ @nr2 = 0 } - @nr2 += 1; - $nr2 = @nr2 - ' - a b i x y nr1 nr2 - eks pan 2 0.7586799647899636 0.5221511083334797 2 1 - wye pan 5 0.5732889198020006 0.8636244699032729 5 2 - -Or, simply use ``mlr cat -n``: - -:: - - $ mlr filter '$x > 0.5' then cat -n data/small - n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Why am I not seeing all possible joins occur? ----------------------------------------------------------------- - -**This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.** - -For example, the right file here has nine records, and the left file should add in the ``hostname`` column -- so the join output should also have 9 records: - -:: - - $ mlr --icsvlite --opprint cat data/join-u-left.csv - hostname ipaddr - nadir.east.our.org 10.3.1.18 - zenith.west.our.org 10.3.1.27 - apoapsis.east.our.org 10.4.5.94 - -:: - - $ mlr --icsvlite --opprint cat data/join-u-right.csv - ipaddr timestamp bytes - 10.3.1.27 1448762579 4568 - 10.3.1.18 1448762578 8729 - 10.4.5.94 1448762579 17445 - 10.3.1.27 1448762589 12 - 10.3.1.18 1448762588 44558 - 10.4.5.94 1448762589 8899 - 10.3.1.27 1448762599 0 - 10.3.1.18 1448762598 73425 - 10.4.5.94 1448762599 12200 - -:: - - $ mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv - ipaddr hostname timestamp bytes - 10.3.1.27 zenith.west.our.org 1448762579 4568 - 10.4.5.94 apoapsis.east.our.org 1448762579 17445 - 10.4.5.94 apoapsis.east.our.org 1448762589 8899 - 10.4.5.94 apoapsis.east.our.org 1448762599 12200 - -The issue is that Miller's ``join``, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the Unix/Linux system ``join`` command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input. - -The solution (besides pre-sorting the input files on the join keys) is to simply use **mlr join -u** (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input: - -:: - - $ mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv - ipaddr hostname timestamp bytes - 10.3.1.27 zenith.west.our.org 1448762579 4568 - 10.3.1.18 nadir.east.our.org 1448762578 8729 - 10.4.5.94 apoapsis.east.our.org 1448762579 17445 - 10.3.1.27 zenith.west.our.org 1448762589 12 - 10.3.1.18 nadir.east.our.org 1448762588 44558 - 10.4.5.94 apoapsis.east.our.org 1448762589 8899 - 10.3.1.27 zenith.west.our.org 1448762599 0 - 10.3.1.18 nadir.east.our.org 1448762598 73425 - 10.4.5.94 apoapsis.east.our.org 1448762599 12200 - -General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file. - -How to rectangularize after joins with unpaired? ----------------------------------------------------------------- - -Suppose you have the following two data files: - -:: - - id,code - 3,0000ff - 2,00ff00 - 4,ff0000 - -:: - - id,color - 4,red - 2,green - -Joining on color the results are as expected: - -:: - - $ mlr --csv join -j id -f data/color-codes.csv data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - -However, if we ask for left-unpaireds, since there's no ``color`` column, we get a row not having the same column names as the other: - -:: - - $ mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - - id,code - 3,0000ff - -To fix this, we can use **unsparsify**: - -:: - - $ mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - 3,0000ff, - -Thanks to @aborruso for the tip! - -What about XML or JSON file formats? ----------------------------------------------------------------- - -Miller handles **tabular data**, which is a list of records each having fields which are key-value pairs. Miller also doesn't require that each record have the same field names (see also :doc:`record-heterogeneity`). Regardless, tabular data is a **non-recursive data structure**. - -XML, JSON, etc. are, by contrast, all **recursive** or **nested** data structures. For example, in JSON you can represent a hash map whose values are lists of lists. - -Now, you can put tabular data into these formats -- since list-of-key-value-pairs is one of the things representable in XML or JSON. Example: - -:: - - # DKVP - x=1,y=2 - z=3 - -:: - - # XML - - - - x 1 - - - y 2 - - - - - z 3 - - -
- -:: - - # JSON - [{"x":1,"y":2},{"z":3}] - -However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics -- only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form -- this is a general text-processing problem. - -Miller does support tabular data represented in JSON: please see :doc:`file-formats`. See also `jq `_ for a truly powerful, JSON-specific tool. - -For XML, my suggestion is to use a tool like `ff-extractor `_ to do format conversion. diff --git a/docs6/_build/html/_sources/feature-comparison.rst.txt b/docs6/_build/html/_sources/feature-comparison.rst.txt deleted file mode 100644 index 9d2d72eef..000000000 --- a/docs6/_build/html/_sources/feature-comparison.rst.txt +++ /dev/null @@ -1,67 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Unix-toolkit context -================================================================ - -How does Miller fit within the Unix toolkit (`grep`, `sed`, `awk`, etc.)? - -File-format awareness ----------------------------------------------------------------- - -Miller respects CSV headers. If you do ``mlr --csv cat *.csv`` then the header line is written once: - -:: - - $ cat data/a.csv - a,b,c - 1,2,3 - 4,5,6 - -:: - - $ cat data/b.csv - a,b,c - 7,8,9 - -:: - - $ mlr --csv cat data/a.csv data/b.csv - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - -:: - - $ mlr --csv sort -nr b data/a.csv data/b.csv - a,b,c - 7,8,9 - 4,5,6 - 1,2,3 - -Likewise with ``mlr sort``, ``mlr tac``, and so on. - -awk-like features: mlr filter and mlr put ----------------------------------------------------------------- - -* ``mlr filter`` includes/excludes records based on a filter expression, e.g. ``mlr filter '$count > 10'``. - -* ``mlr put`` adds a new field as a function of others, e.g. ``mlr put '$xy = $x * $y'`` or ``mlr put '$counter = NR'``. - -* The ``$name`` syntax is straight from ``awk``'s ``$1 $2 $3`` (adapted to name-based indexing), as are the variables ``FS``, ``OFS``, ``RS``, ``ORS``, ``NF``, ``NR``, and ``FILENAME``. The ``ENV[...]`` syntax is from Ruby. - -* While ``awk`` functions are record-based, Miller subcommands (or *verbs*) are stream-based: each of them maps a stream of records into another stream of records. - -* Like ``awk``, Miller (as of v5.0.0) allows you to define new functions within its ``put`` and ``filter`` expression language. Further programmability comes from chaining with ``then``. - -* As with ``awk``, ``$``-variables are stream variables and all verbs (such as ``cut``, ``stats1``, ``put``, etc.) as well as ``put``/``filter`` statements operate on streams. This means that you define actions to be done on each record and then stream your data through those actions. The built-in variables ``NF``, ``NR``, etc. change from one line to another, ``$x`` is a label for field ``x`` in the current record, and the input to ``sqrt($x)`` changes from one record to the next. The expression language for the ``put`` and ``filter`` verbs additionally allows you to define ``begin {...}`` and ``end {...}`` blocks for actions to be taken before and after records are processed, respectively. - -* As with ``awk``, Miller's ``put``/``filter`` language lets you set ``@sum=0`` before records are read, then update that sum on each record, then print its value at the end. Unlike ``awk``, Miller makes syntactically explicit the difference between variables with extent across all records (names starting with ``@``, such as ``@sum``) and variables which are local to the current expression (names starting without ``@``, such as ``sum``). - -* Miller can be faster than ``awk``, ``cut``, and so on, depending on platform; see also :doc:`performance`. In particular, Miller's DSL syntax is parsed into C control structures at startup time, with the bulk data-stream processing all done in C. - -See also ----------------------------------------------------------------- - -See :doc:`reference-verbs` for more on Miller's subcommands ``cat``, ``cut``, ``head``, ``sort``, ``tac``, ``tail``, ``top``, and ``uniq``, as well as :doc:`reference-dsl` for more on the awk-like ``mlr filter`` and ``mlr put``. diff --git a/docs6/_build/html/_sources/features.rst.txt b/docs6/_build/html/_sources/features.rst.txt deleted file mode 100644 index 1e6aee55d..000000000 --- a/docs6/_build/html/_sources/features.rst.txt +++ /dev/null @@ -1,43 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Features -================================================================ - -Miller is like awk, sed, cut, join, and sort for **name-indexed data such as -CSV, TSV, and tabular JSON**. You get to work with your data using named -fields, without needing to count positional column indices. - -This is something the Unix toolkit always could have done, and arguably -always should have done. It operates on key-value-pair data while the familiar -Unix tools operate on integer-indexed fields: if the natural data structure for -the latter is the array, then Miller's natural data structure is the -insertion-ordered hash map. This encompasses a **variety of data formats**, -including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle -**positionally-indexed data** as a special case.) - -* Miller is **multi-purpose**: it's useful for **data cleaning**, **data reduction**, **statistical reporting**, **devops**, **system administration**, **log-file processing**, **format conversion**, and **database-query post-processing**. - -* You can use Miller to snarf and munge **log-file data**, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. - -* Miller complements **data-analysis tools** such as **R**, **pandas**, etc.: you can use Miller to **clean** and **prepare** your data. While you can do **basic statistics** entirely in Miller, its streaming-data feature and single-pass algorithms enable you to **reduce very large data sets**. - -* Miller complements SQL **databases**: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples :ref:`here ` and :ref:`here `.) You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. - -* Miller also goes beyond the classic Unix tools by stepping fully into our modern, **no-SQL** world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. - -* Miller is **streaming**: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (``sort``, ``tac``, ``stats1``), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system's available RAM, and you can use Miller in **tail -f** contexts. - -* Miller is **pipe-friendly** and interoperates with the Unix toolkit - -* Miller's I/O formats include **tabular pretty-printing**, **positionally indexed** (Unix-toolkit style), CSV, JSON, and others - -* Miller does **conversion** between formats - -* Miller's **processing is format-aware**: e.g. CSV ``sort`` and ``tac`` keep header lines first - -* Miller has high-throughput **performance** on par with the Unix toolkit - -* Not unlike `jq `_ (for JSON), Miller is written in portable, modern C, with **zero runtime dependencies**. You can download or compile a single binary, ``scp`` it to a faraway machine, and expect it to work. - -Releases and release notes: https://github.com/johnkerl/miller/releases. diff --git a/docs6/_build/html/_sources/file-formats.rst.txt b/docs6/_build/html/_sources/file-formats.rst.txt deleted file mode 100644 index d01c7b62d..000000000 --- a/docs6/_build/html/_sources/file-formats.rst.txt +++ /dev/null @@ -1,589 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -File formats -================================================================ - -Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON -- and other formats you're likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data. - -Examples ----------------------------------------------------------------- - -:: - - $ mlr --usage-data-format-examples - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - -.. _file-formats-csv: - -CSV/TSV/ASV/USV/etc. ----------------------------------------------------------------- - -When ``mlr`` is invoked with the ``--csv`` or ``--csvlite`` option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -Miller has record separator ``RS`` and field separator ``FS``, just as ``awk`` does. For TSV, use ``--fs tab``; to convert TSV to CSV, use ``--ifs tab --ofs comma``, etc. (See also :ref:`reference-separators`.) - -**TSV (tab-separated values):** the following are synonymous pairs: - -* ``--tsv`` and ``--csv --fs tab`` -* ``--itsv`` and ``--icsv --ifs tab`` -* ``--otsv`` and ``--ocsv --ofs tab`` -* ``--tsvlite`` and ``--csvlite --fs tab`` -* ``--itsvlite`` and ``--icsvlite --ifs tab`` -* ``--otsvlite`` and ``--ocsvlite --ofs tab`` - -**ASV (ASCII-separated values):** the flags ``--asv``, ``--iasv``, ``--oasv``, ``--asvlite``, ``--iasvlite``, and ``--oasvlite`` are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively. - -**USV (Unicode-separated values):** likewise, the flags ``--usv``, ``--iusv``, ``--ousv``, ``--usvlite``, ``--iusvlite``, and ``--ousvlite`` use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively. - -Miller's ``--csv`` flag supports `RFC-4180 CSV `_. This includes CRLF line-terminators by default, regardless of platform. - -Here are the differences between CSV and CSV-lite: - -* CSV supports `RFC-4180 `_-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not. - -* CSV does not allow heterogeneous data; CSV-lite does (see also :doc:`record-heterogeneity`). - -* The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader. - -Here are things they have in common: - -* The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on. - -* The ``--implicit-csv-header`` flag for input and the ``--headerless-csv-output`` flag for output. - -.. _file-formats-dkvp: - -DKVP: Key-value pairs ----------------------------------------------------------------- - -Miller's default file format is DKVP, for **delimited key-value pairs**. Example:: - - $ mlr cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Such data are easy to generate, e.g. in Ruby with - -:: - - puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}" - -:: - - puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',') - -or ``print`` statements in various languages, e.g. - -:: - - echo "type=3,user=$USER,date=$date\n"; - -:: - - logger.log("type=3,user=$USER,date=$date\n"); - -Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, ``dish=7,egg=8,flint`` is parsed as ``"dish" => "7", "egg" => "8", "3" => "flint"`` and ``dish,egg,flint`` is parsed as ``"1" => "dish", "2" => "egg", "3" => "flint"``. - -As discussed in :doc:`record-heterogeneity`, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as - -:: - - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100, resource=/path/to/file - resource=/some/other/path,loadsec=0.97,ok=false - -etc. and I just log them as needed. Then later, I can use ``grep``, ``mlr --opprint group-like``, etc. -to analyze my logs. - -See :doc:`reference` regarding how to specify separators other than the default equals-sign and comma. - -.. _file-formats-nidx: - -NIDX: Index-numbered (toolkit style) ----------------------------------------------------------------- - -With ``--inidx --ifs ' ' --repifs``, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior. - -Example with index-numbered output: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - - $ mlr --onidx --ofs ' ' cat data/small - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Example with index-numbered input: - -:: - - $ cat data/mydata.txt - oh say can you see - by the dawn's - early light - - $ mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt - 1=oh,2=say,3=can,4=you,5=see - 1=by,2=the,3=dawn's - 1=early,2=light - -Example with index-numbered input and output: - -:: - - $ cat data/mydata.txt - oh say can you see - by the dawn's - early light - - $ mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt - say can - the dawn's - light - -.. _file-formats-json: - -Tabular JSON ----------------------------------------------------------------- - -JSON is a format which supports arbitrarily deep nesting of "objects" (hashmaps) and "arrays" (lists), while Miller is a tool for handling **tabular data** only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out `jq `_.) - -But if you have tabular data represented in JSON then Miller can handle that for you. - -Single-level JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -An **array of single-level objects** is, quite simply, **a table**: - -:: - - $ mlr --json head -n 2 then cut -f color,shape data/json-example-1.json - { "color": "yellow", "shape": "triangle" } - { "color": "red", "shape": "square" } - - $ mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json - { - "color": "yellow", - "u": 0.6321695890307647, - "v": 0.9887207810889004 - } - { - "color": "red", - "u": 0.21966833570651523, - "v": 0.001257332190235938 - } - - $ mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json - shape u_mean u_stddev u_count - triangle 0.583995 0.131184 3 - square 0.409355 0.365428 4 - circle 0.366013 0.209094 3 - -Nested JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Additionally, Miller can **tabularize nested objects by concatentating keys**: - -:: - - $ mlr --json --jvstack head -n 2 data/json-example-2.json - { - "flag": 1, - "i": 11, - "attributes": { - "color": "yellow", - "shape": "triangle" - }, - "values": { - "u": 0.632170, - "v": 0.988721, - "w": 0.436498, - "x": 5.798188 - } - } - { - "flag": 1, - "i": 15, - "attributes": { - "color": "red", - "shape": "square" - }, - "values": { - "u": 0.219668, - "v": 0.001257, - "w": 0.792778, - "x": 2.944117 - } - } - - $ mlr --ijson --opprint head -n 4 data/json-example-2.json - flag i attributes:color attributes:shape values:u values:v values:w values:x - 1 11 yellow triangle 0.632170 0.988721 0.436498 5.798188 - 1 15 red square 0.219668 0.001257 0.792778 2.944117 - 1 16 red circle 0.209017 0.290052 0.138103 5.065034 - 0 48 red square 0.956274 0.746720 0.775542 7.117831 - -Note in particular that as far as Miller's ``put`` and ``filter``, as well as other I/O formats, are concerned, these are simply field names with colons in them:: - - $ mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json - { - "flag": 1, - "i": 11, - "attributes": { - "color": "yellow", - "shape": "triangle" - }, - "values": { - "u": 0.632170, - "v": 0.988721, - "w": 0.436498, - "x": 5.798188, - "uv": 0.625040 - } - } - -Arrays -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Arrays aren't supported in Miller's ``put``/``filter`` DSL. By default, JSON arrays are read in as integer-keyed maps. - -Suppose we have arrays like this in our input data:: - - $ cat data/json-example-3.json - { - "label": "orange", - "values": [12.2, 13.8, 17.2] - } - { - "label": "purple", - "values": [27.0, 32.4] - } - -Then integer indices (starting from 0 and counting up) are used as map keys:: - - $ mlr --ijson --oxtab cat data/json-example-3.json - label orange - values:0 12.2 - values:1 13.8 - values:2 17.2 - - label purple - values:0 27.0 - values:1 32.4 - -When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output:: - - $ mlr --json --jvstack cat data/json-example-3.json - { - "label": "orange", - "values": { - "0": 12.2, - "1": 13.8, - "2": 17.2 - } - } - { - "label": "purple", - "values": { - "0": 27.0, - "1": 32.4 - } - } - -This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all. - -You might also use ``mlr --json-skip-arrays-on-input`` or ``mlr --json-fatal-arrays-on-input``. - -To truly handle JSON, please use a JSON-processing tool such as `jq `_. - -Formatting JSON options -^^^^^^^^^^^^^^^^^^^^^^^^^ - -JSON isn't a parameterized format, so ``RS``, ``FS``, ``PS`` aren't specifiable. Nonetheless, you can do the following: - -* Use ``--jvstack`` to pretty-print JSON objects with multi-line (vertically stacked) spacing. By default, each Miller record (JSON object) is one per line. - -* Keystroke-savers: ``--jsonx`` simply means ``--json --jvstack``, and ``--ojsonx`` simply means ``--ojson --jvstack``. - -* Use ``--jlistwrap`` to print the sequence of JSON objects wrapped in an outermost ``[`` and ``]``. By default, these aren't printed. - -* Use ``--jquoteall`` to double-quote all object values. By default, integers, floating-point numbers, and booleans ``true`` and ``false`` are not double-quoted when they appear as JSON-object keys. - -* Use ``--jflatsep yourstringhere`` to specify the string used for key concatenation: this defaults to a single colon. - -* Use ``--jofmt`` to force Miller to apply the global ``--ofmt`` to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in ``%lf``, ``%le``, or ``%lg``. Miller floats are double-precision so behavior using ``%f``, ``%d``, etc. is undefined. Second note: ``0.123`` is valid JSON; ``.123`` is not. Thus this feature allows you to emit JSON which may be unparseable by other tools. - -Again, please see `jq `_ for a truly powerful, JSON-specific tool. - -JSON non-streaming -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in ``tail -f`` contexts. - -.. _file-formats-pprint: - -PPRINT: Pretty-printed tabular ----------------------------------------------------------------- - -Miller's pretty-print format is like CSV, but column-aligned. For example, compare - -:: - - $ mlr --ocsv cat data/small - a,b,i,x,y - pan,pan,1,0.3467901443380824,0.7268028627434533 - eks,pan,2,0.7586799647899636,0.5221511083334797 - wye,wye,3,0.20460330576630303,0.33831852551664776 - eks,wye,4,0.38139939387114097,0.13418874328430463 - wye,pan,5,0.5732889198020006,0.8636244699032729 - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won't work on ``tail -f`` contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory. - -See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -For output only (this isn't supported in the input-scanner as of 5.0.0) you can use ``--barred`` with pprint output format:: - - $ mlr --opprint --barred cat data/small - +-----+-----+---+---------------------+---------------------+ - | a | b | i | x | y | - +-----+-----+---+---------------------+---------------------+ - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - +-----+-----+---+---------------------+---------------------+ - -.. _file-formats-xtab: - -XTAB: Vertical tabular ----------------------------------------------------------------- - -This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also -`ngrid `_ for an entirely different, very powerful option). Namely:: - - $ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat - 1 2 3 4 5 6 7 - nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false - root * 0 0 System Administrator /var/root /bin/sh - daemon * 1 1 System Services /var/root /usr/bin/false - _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico - _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false - _networkd * 24 24 Network Services /var/networkd /usr/bin/false - - $ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat - 1 nobody - 2 * - 3 -2 - 4 -2 - 5 Unprivileged User - 6 /var/empty - 7 /usr/bin/false - - 1 root - 2 * - 3 0 - 4 0 - 5 System Administrator - 6 /var/root - 7 /bin/sh - - $ grep -v '^#' /etc/passwd | head -n 2 | \ - mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell - [ - { - "name": "nobody", - "password": "*", - "uid": -2, - "gid": -2, - "gecos": "Unprivileged User", - "home_dir": "/var/empty", - "shell": "/usr/bin/false" - } - ,{ - "name": "root", - "password": "*", - "uid": 0, - "gid": 0, - "gecos": "System Administrator", - "home_dir": "/var/root", - "shell": "/bin/sh" - } - ] - -Markdown tabular ----------------------------------------------------------------- - -Markdown format looks like this:: - - $ mlr --omd cat data/small - | a | b | i | x | y | - | --- | --- | --- | --- | --- | - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - -which renders like this when dropped into various web tools (e.g. github comments): - -.. image:: pix/omd.png - -As of Miller 4.3.0, markdown format is supported only for output, not input. - -Data-conversion keystroke-savers ----------------------------------------------------------------- - -While you can do format conversion using ``mlr --icsv --ojson cat myfile.csv``, there are also keystroke-savers for this purpose, such as ``mlr --c2j cat myfile.csv``. For a complete list:: - - $ mlr --usage-format-conversion-keystroke-saver-options - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - -Autodetect of line endings ----------------------------------------------------------------- - -Default line endings (``--irs`` and ``--ors``) are ``'auto'`` which means **autodetect from the input file format**, as long as the input file(s) have lines ending in either LF (also known as linefeed, ``'\n'``, ``0x0a``, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, ``'\r\n'``, ``0x0d 0x0a``, Windows style). - -**If both IRS and ORS are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you're running on.** - -The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF. - -If you use ``--ors {something else}`` with (default or explicitly specified) ``--irs auto`` then line endings are autodetected on input and set to what you specify on output. - -If you use ``--irs {something else}`` with (default or explicitly specified) ``--ors auto`` then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - -See also :ref:`reference-separators` for more information about record/field/pair separators. - -Comments in data ----------------------------------------------------------------- - -You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered:: - - $ mlr --usage-comments-in-data - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - -Examples:: - - $ cat data/budget.csv - # Asana -- here are the budget figures you asked for! - type,quantity - purple,456.78 - green,678.12 - orange,123.45 - - $ mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv - type quantity - green 678.12 - purple 456.78 - orange 123.45 - - $ mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv - # Asana -- here are the budget figures you asked for! - type quantity - green 678.12 - purple 456.78 - orange 123.45 diff --git a/docs6/_build/html/_sources/index.rst.txt b/docs6/_build/html/_sources/index.rst.txt deleted file mode 100644 index b8995ac97..000000000 --- a/docs6/_build/html/_sources/index.rst.txt +++ /dev/null @@ -1,64 +0,0 @@ -Miller Docs v2 -================================================================ - -Overview ----------------------------------------------------------------- - -.. toctree:: - :maxdepth: 1 - - quick-examples - features - 10min - feature-comparison - file-formats - record-heterogeneity - customization - install - internationalization - contact - -Details ----------------------------------------------------------------- - -.. toctree:: - :maxdepth: 1 - - faq - sql-examples - log-processing-examples - data-examples - cookbook - cookbook2 - cookbook3 - data-sharing - -Reference ----------------------------------------------------------------- - -.. toctree:: - :maxdepth: 1 - - reference - reference-verbs - reference-dsl - manpage - release-docs - build - -Background ----------------------------------------------------------------- - -.. toctree:: - :maxdepth: 1 - - why - etymology - originality - performance - -Index ----------------------------------------------------------------- - -* :ref:`genindex` -* :ref:`search` diff --git a/docs6/_build/html/_sources/install.rst.txt b/docs6/_build/html/_sources/install.rst.txt deleted file mode 100644 index b45fab5f8..000000000 --- a/docs6/_build/html/_sources/install.rst.txt +++ /dev/null @@ -1,54 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Installation -================================================================ - -Prebuilt executables via package managers ----------------------------------------------------------------- - -`Homebrew `_ installation support for OSX is available via - -:: - - brew update && brew install miller - -...and also via `MacPorts `_: - -:: - - sudo port selfupdate && sudo port install miller - -You may already have the ``mlr`` executable available in your platform's package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following: - -:: - - sudo apt-get install miller - -:: - - sudo apt install miller - -:: - - sudo yum install miller - -On Windows, Miller is available via `Chocolatey `_: - -:: - - choco install miller - -Prebuilt executables via GitHub per release ----------------------------------------------------------------- - -Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts). - -Miller is autobuilt for **Linux** using **Travis** on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of `SikhNerd `_ on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for **Windows** using the **Appveyor** continuous-build system: https://ci.appveyor.com/project/johnkerl/miller. - -Miller releases from `5.1.0 `_ onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select *Latest Build* and then *Artifacts* to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release. - -Building from source ----------------------------------------------------------------- - -Please see :doc:`build`. diff --git a/docs6/_build/html/_sources/internationalization.rst.txt b/docs6/_build/html/_sources/internationalization.rst.txt deleted file mode 100644 index 74c917e3c..000000000 --- a/docs6/_build/html/_sources/internationalization.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Internationalization -================================================================ - -Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.) - -By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes: - -* Tabular output formats such pprint and xtab (see :doc:`file-formats`) are aligned correctly. -* The :ref:`reference-dsl-strlen` function correctly counts UTF-8 codepoints rather than bytes. -* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions within the capabilities of https://github.com/sheredom/utf8.h. - -Meanwhile, regular expressions and the DSL functions :ref:`reference-dsl-sub` and :ref:`reference-dsl-gsub` function correctly, albeit without explicit intentional support. - -Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). diff --git a/docs6/_build/html/_sources/log-processing-examples.rst.txt b/docs6/_build/html/_sources/log-processing-examples.rst.txt deleted file mode 100644 index 77c7436b9..000000000 --- a/docs6/_build/html/_sources/log-processing-examples.rst.txt +++ /dev/null @@ -1,185 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Log-processing examples ----------------------------------------------------------------- - -Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here's where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can ``grep`` or what have you. Also it means not every line needs to have the same list of field names ("schema"). - -Again, all the examples in the CSV section apply here -- just change the input-format flags. But there's more you can do when not all the records have the same shape. - -Writing a program -- in any language whatsoever -- you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it. - -Suppose your program has printed something like this:: - - $ cat log.txt - op=enter,time=1472819681 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - time=1472819690,batch_size=100,num_filtered=237 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A1,hit=1 - time=1472819705,batch_size=100,num_filtered=348 - op=cache,type=A4,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - time=1472819713,batch_size=100,num_filtered=493 - op=cache,type=A9,hit=1 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=1 - time=1472819720,batch_size=100,num_filtered=554 - op=cache,type=A1,hit=0 - op=cache,type=A4,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=0 - op=cache,type=A4,hit=0 - op=cache,type=A9,hit=0 - time=1472819736,batch_size=100,num_filtered=612 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - time=1472819742,batch_size=100,num_filtered=728 - -Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system ``grep`` command, or Miller's ``having-fields``, or ``is_present``, we can pick out the parts we want and analyze them:: - - $ grep op=cache log.txt \ - | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type - type hit_mean - A1 0.857143 - A4 0.714286 - A9 0.090909 - -:: - - $ mlr --from log.txt --opprint \ - filter 'is_present($batch_size)' \ - then step -a delta -f time,num_filtered \ - then sec2gmt time - time batch_size num_filtered time_delta num_filtered_delta - 2016-09-02T12:34:50Z 100 237 0 0 - 2016-09-02T12:35:05Z 100 348 15 111 - 2016-09-02T12:35:13Z 100 493 8 145 - 2016-09-02T12:35:20Z 100 554 7 61 - 2016-09-02T12:35:36Z 100 612 16 58 - 2016-09-02T12:35:42Z 100 728 6 116 - -Alternatively, we can simply group the similar data for a better look:: - - $ mlr --opprint group-like log.txt - op time - enter 1472819681 - - op type hit - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A1 1 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A9 1 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 1 - cache A1 0 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 0 - cache A4 0 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A9 0 - - time batch_size num_filtered - 1472819690 100 237 - 1472819705 100 348 - 1472819713 100 493 - 1472819720 100 554 - 1472819736 100 612 - 1472819742 100 728 - -:: - - $ mlr --opprint group-like then sec2gmt time log.txt - op time - enter 2016-09-02T12:34:41Z - - op type hit - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A1 1 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A9 1 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 1 - cache A1 0 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 0 - cache A4 0 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A9 0 - - time batch_size num_filtered - 2016-09-02T12:34:50Z 100 237 - 2016-09-02T12:35:05Z 100 348 - 2016-09-02T12:35:13Z 100 493 - 2016-09-02T12:35:20Z 100 554 - 2016-09-02T12:35:36Z 100 612 - 2016-09-02T12:35:42Z 100 728 diff --git a/docs6/_build/html/_sources/manpage.rst.txt b/docs6/_build/html/_sources/manpage.rst.txt deleted file mode 100644 index 8ce57207e..000000000 --- a/docs6/_build/html/_sources/manpage.rst.txt +++ /dev/null @@ -1,2381 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Manpage -================================================================ - -This is simply a copy of what you should see on running **man mlr** at a command prompt, once Miller is installed on your system. - -:: - - MILLER(1) MILLER(1) - - - - NAME - miller - like awk, sed, cut, join, and sort for name-indexed data such - as CSV and tabular JSON. - - SYNOPSIS - Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or - more file names} - - - DESCRIPTION - Miller operates on key-value-pair data while the familiar Unix tools - operate on integer-indexed fields: if the natural data structure for - the latter is the array, then Miller's natural data structure is the - insertion-ordered hash map. This encompasses a variety of data - formats, including but not limited to the familiar CSV, TSV, and JSON. - (Miller can handle positionally-indexed data as a special case.) This - manpage documents Miller v5.10.1. - - EXAMPLES - COMMAND-LINE SYNTAX - mlr --csv cut -f hostname,uptime mydata.csv - mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv - mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - mlr stats2 -a linreg-pca -f u,v -g shape data/* - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' - mlr --from infile.dat put -f analyze.mlr - mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - DATA FORMATS - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - - OPTIONS - In the following option flags, the version with "i" designates the - input stream, "o" the output stream, and the version without prefix - sets the option for both input and output stream. For example: --irs - sets the input record separator, --ors the output record separator, and - --rs sets both the input and output separator to the given value. - - HELP OPTIONS - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. - - VERB LIST - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down filter format-values fraction grep - group-by group-like having-fields head histogram join label least-frequent - merge-fields most-frequent nest nothing put regularize remove-empty-columns - rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle - skip-trivial-records sort sort-within-records stats1 stats2 step tac tail tee - top uniq unsparsify - - FUNCTION LIST - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ - > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub - substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh - sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms - fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt - sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime - strftime_local strptime strptime_local systime is_absent is_bool is_boolean - is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty - is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv - splitkvx splitnv splitnvx - - Please use "mlr --help-function {function name}" for function-specific help. - - I/O FORMATTING - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. - - COMMENTS IN DATA - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - - FORMAT-CONVERSION KEYSTROKE-SAVERS - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - - COMPRESSED I/O - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. - - SEPARATORS - --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space - - CSV-SPECIFIC OPTIONS - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. - - DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. - - NUMERICAL FORMATTING - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. - - OTHER OPTIONS - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. - - THEN-CHAINING - Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color - - AUXILIARY COMMANDS - Miller has a few otherwise-standalone executables packaged within it. - They do not participate in any other parts of Miller. - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - - MLRRC - You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. - For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file - and that will be the default input/output format unless otherwise specified on the command line. - - The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. - Hash-style comments and blank lines are ignored. - - Sample .mlrrc: - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - How to specify location of .mlrrc: - * If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. - * Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - - See also: - https://johnkerl.org/miller/doc/customization.html - - VERBS - altkv - Usage: mlr altkv [no options] - Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. - - bar - Usage: mlr bar [options] - Replaces a numeric field with a number of asterisks, allowing for cheesy - bar plots. These align best with --opprint or --oxtab output format. - Options: - -f {a,b,c} Field names to convert to bars. - -c {character} Fill character: default '*'. - -x {character} Out-of-bounds character: default '#'. - -b {character} Blank character: default '.'. - --lo {lo} Lower-limit value for min-width bar: default '0.000000'. - --hi {hi} Upper-limit value for max-width bar: default '100.000000'. - -w {n} Bar-field width: default '40'. - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. - - bootstrap - Usage: mlr bootstrap [options] - Emits an n-sample, with replacement, of the input records. - Options: - -n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. - See also mlr sample and mlr shuffle. - - cat - Usage: mlr cat [options] - Passes input records directly to output. Most useful for format conversion. - Options: - -n Prepend field "n" to each record with record-counter starting at 1 - -g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). - -v Write a low-level record-structure dump to stderr. - -N {name} Prepend field {name} to each record with record-counter starting at 1 - - check - Usage: mlr check - Consumes records without printing any output. - Useful for doing a well-formatted check on input data. - - clean-whitespace - Usage: mlr clean-whitespace [options] - For each record, for each field in the record, whitespace-cleans the keys and - values. Whitespace-cleaning entails stripping leading and trailing whitespace, - and replacing multiple whitespace with singles. For finer-grained control, - please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, - and clean_whitespace. - - Options: - -k|--keys-only Do not touch values. - -v|--values-only Do not touch keys. - It is an error to specify -k as well as -v -- to clean keys and values, - leave off -k as well as -v. - - count - Usage: mlr count [options] - Prints number of records, optionally grouped by distinct values for specified field names. - - Options: - -g {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not interesting without -g. - -o {name} Field name for output count. Default "count". - - count-distinct - Usage: mlr count-distinct [options] - Prints number of records having distinct values for specified field names. - Same as uniq -c. - - Options: - -f {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not compatible with -u. - -o {name} Field name for output count. Default "count". - Ignored with -u. - -u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. - - count-similar - Usage: mlr count-similar [options] - Ingests all records, then emits each record augmented by a count of - the number of other records having the same group-by field values. - Options: - -g {d,e,f} Group-by-field names for counts. - -o {name} Field name for output count. Default "count". - - cut - Usage: mlr cut [options] - Passes through input records with specified fields included/excluded. - -f {a,b,c} Field names to include for cut. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. - Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) - - decimate - Usage: mlr decimate [options] - -n {count} Decimation factor; default 10 - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts - Passes through one of every n records, optionally by category. - - fill-down - Usage: mlr fill-down [options] - -f {a,b,c} Field names for fill-down - -a|--only-if-absent Field names for fill-down - If a given record has a missing value for a given field, fill that from - the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - - filter - Usage: mlr filter [options] {expression} - Prints records for which {expression} evaluates to true. - If there are multiple semicolon-delimited expressions, all of them are - evaluated and the last one is used as the filter criterion. - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -x: Prints records for which {expression} evaluates to false. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". Please also see "mlr grep" which is - useful when you don't yet know which field name(s) you're looking for. - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter - - format-values - Usage: mlr format-values [options] - Applies format strings to all field values, depending on autodetected type. - * If a field value is detected to be integer, applies integer format. - * Else, if a field value is detected to be float, applies float format. - * Else, applies string format. - - Note: this is a low-keystroke way to apply formatting to many fields. To get - finer control, please see the fmtnum function within the mlr put DSL. - - Note: this verb lets you apply arbitrary format strings, which can produce - undefined behavior and/or program crashes. See your system's "man printf". - - Options: - -i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. - -f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. - -s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. - -n Coerce field values autodetected as int to float, and then - apply the float format. - - fraction - Usage: mlr fraction [options] - For each record's value in specified fields, computes the ratio of that - value to the sum of values in that field over all input records. - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - - Note: this is internally a two-pass algorithm: on the first pass it retains - input records and accumulates sums; on the second pass it computes quotients - and emits output records. This means it produces no output until all input is read. - - Options: - -f {a,b,c} Field name(s) for fraction calculation - -g {d,e,f} Optional group-by-field name(s) for fraction counts - -p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" - -c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 - - grep - Usage: mlr grep [options] {regular expression} - Passes through records which match {regex}. - Options: - -i Use case-insensitive search. - -v Invert: pass through records which do not match the regex. - Note that "mlr filter" is more powerful, but requires you to know field names. - By contrast, "mlr grep" allows you to regex-match the entire record. It does - this by formatting each record in memory as DKVP, using command-line-specified - ORS/OFS/OPS, and matching the resulting line against the regex specified - here. In particular, the regex is not applied to the input stream: if you - have CSV with header line "x,y,z" and data line "1,2,3" then the regex will - be matched, not against either of these lines, but against the DKVP line - "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, - and this command is intended to be merely a keystroke-saver. To get all the - features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." - - group-by - Usage: mlr group-by {comma-separated field names} - Outputs records in batches having identical values at specified field names. - - group-like - Usage: mlr group-like - Outputs records in batches having identical field names. - - having-fields - Usage: mlr having-fields [options] - Conditionally passes through records depending on each record's field names. - Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} - Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) - - head - Usage: mlr head [options] - -n {count} Head count to print; default 10 - -g {a,b,c} Optional group-by-field names for head counts - Passes through the first n records, optionally by category. - Without -g, ceases consuming more input (i.e. is fast) when n - records have been read. - - histogram - Usage: mlr histogram [options] - -f {a,b,c} Value-field names for histogram counts - --lo {lo} Histogram low value - --hi {hi} Histogram high value - --nbins {n} Number of histogram bins - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. - -o {prefix} Prefix for output field name. Default: no prefix. - Just a histogram. Input values < lo or > hi are not counted. - - join - Usage: mlr join [options] - Joins records from specified left file name with records from all file names - at the end of the Miller argument list. - Functionality is essentially the same as the system "join" command, but for - record streams. - Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - File-format options default to those for the right file names on the Miller - argument list, but may be overridden for the left file as follows. Please see - the main "mlr --help" for more information on syntax for these arguments. - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - Please use "mlr --usage-separator-options" for information on specifying separators. - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information - including examples. - - label - Usage: mlr label {new1,new2,new3,...} - Given n comma-separated names, renames the first n fields of each record to - have the respective name. (Fields past the nth are left with their original - names.) Particularly useful with --inidx or --implicit-csv-header, to give - useful names to otherwise integer-indexed fields. - Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" - - least-frequent - Usage: mlr least-frequent [options] - Shows the least frequently occurring distinct values for specified field names. - The first entry is the statistical anti-mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr most-frequent". - - merge-fields - Usage: mlr merge-fields [options] - Computes univariate statistics for each input record, accumulated across - specified fields. - Options: - -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics. Requires -o. - -r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. - -c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -o {name} Output field basename for -f/-r. - -k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -F Computes integerable things (e.g. count) in floating point. - - String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - - Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". - Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. - Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. - Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". - - most-frequent - Usage: mlr most-frequent [options] - Shows the most frequently occurring distinct values for specified field names. - The first entry is the statistical mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr least-frequent". - - nest - Usage: mlr nest [options] - Explodes specified field values into separate fields/records, or reverses this. - Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} - Please use "mlr --usage-separator-options" for information on specifying separators. - - Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - - Notes: - * With --pairs, --implode doesn't make sense since the original field name has - been lost. - * The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. - * It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. - See also mlr reshape. - - nothing - Usage: mlr nothing - Drops all input records. Useful for testing, or after tee/print/etc. have - produced other output. - - put - Usage: mlr put [options] {expression} - Adds/updates specified field(s). Expressions are semicolon-separated and must - either be assignments, or evaluate to boolean. Booleans with following - statements in curly braces control whether those statements are executed; - booleans without following curly braces do nothing except side effects (e.g. - regex-captures into \1, \2, etc.). - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - - Please see also 'mlr -k' for examples using redirected output. - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put - - regularize - Usage: mlr regularize - For records seen earlier in the data stream with same field names in - a different order, outputs them with field names in the previously - encountered order. - Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 - output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 - - remove-empty-columns - Usage: mlr remove-empty-columns - Omits fields which are empty on every input row. Non-streaming. - - rename - Usage: mlr rename [options] {old1,new1,old2,new2,...} - Renames specified fields. - Options: - -r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\1" through - "\9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. - -g Do global replacement within each field name rather than - first-match replacement. - Examples: - mlr rename old_name,new_name' - mlr rename old_name_1,new_name_1,old_name_2,new_name_2' - mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" - mlr rename -r '"Date_[0-9]+",Date' Same - mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 - mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" - - reorder - Usage: mlr reorder [options] - -f {a,b,c} Field names to reorder. - -e Put specified field names at record end: default is to put - them at record start. - Examples: - mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". - mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". - - repeat - Usage: mlr repeat [options] - Copies input records to output records multiple times. - Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. - Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' - produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 - Example: - echo a=1,b=2,c=3 | mlr repeat -f b - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - Example: - echo a=1,b=2,c=3 | mlr repeat -f c - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 - - reshape - Usage: mlr reshape [options] - Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. - Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - - Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - See also mlr nest. - - sample - Usage: mlr sample [options] - Reservoir sampling (subsampling without replacement), optionally by category. - -k {count} Required: number of records to output, total, or by group if using -g. - -g {a,b,c} Optional: group-by-field names for samples. - See also mlr bootstrap and mlr shuffle. - - sec2gmt - Usage: mlr sec2gmt [options] {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT timestamp; leaves non-numbers as-is. This is nothing - more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 - is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' - Options: - -1 through -9: format the seconds using 1..9 decimal places, respectively. - - sec2gmtdate - Usage: mlr sec2gmtdate {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT year-month-day timestamp; leaves non-numbers as-is. - This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 - is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' - - seqgen - Usage: mlr seqgen [options] - Produces a sequence of counters. Discards the input record stream. Produces - output as specified by the following options: - -f {name} Field name for counters; default "i". - --start {number} Inclusive start value; default "1". - --stop {number} Inclusive stop value; default "100". - --step {number} Step value; default "1". - Start, stop, and/or step may be floating-point. Output is integer if start, - stop, and step are all integers. Step may be negative. It may not be zero - unless start == stop. - - shuffle - Usage: mlr shuffle {no options} - Outputs records randomly permuted. No output records are produced until - all input records are read. - See also mlr bootstrap and mlr sample. - - skip-trivial-records - Usage: mlr skip-trivial-records [options] - Passes through all records except: - * those with zero fields; - * those for which all fields have empty value. - - sort - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z - - sort-within-records - Usage: mlr sort-within-records [no options] - Outputs records sorted lexically ascending by keys. - - stats1 - Usage: mlr stats1 [options] - Computes univariate statistics for one or more given fields, accumulated across - the input record stream. - Options: - -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics - --fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) - --fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - -g {d,e,f} Optional group-by-field names - --gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) - --gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - -F Computes integerable things (e.g. count) in floating point. - Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - Example: mlr stats1 -a count,mode -f size - Example: mlr stats1 -a count,mode -f size -g shape - Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - Notes: - * p50 and median are synonymous. - * min and max output the same results as p0 and p100, respectively, but use - less memory. - * String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - * count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. - * When there are mode ties, the first-encountered datum wins. - - stats2 - Usage: mlr stats2 [options] - Computes bivariate statistics for one or more given field-name pairs, - accumulated across the input record stream. - -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix - -f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. - -g {e,f,g} Optional group-by-field names. - -v Print additional output for linreg-pca. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - --fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. - Only one of -s or --fit may be used. - Example: mlr stats2 -a linreg-pca -f x,y - Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape - Example: mlr stats2 -a corr -f x,y - - step - Usage: mlr step [options] - Computes values dependent on the previous record, optionally grouped - by category. - - Options: - -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - -f {a,b,c} Value-field names on which to compute statistics - -g {d,e,f} Optional group-by-field names - -F Computes integerable things (e.g. counter) in floating point. - -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". - -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - - Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average - for more information on EWMA. - - tac - Usage: mlr tac - Prints records in reverse order from the order in which they were encountered. - - tail - Usage: mlr tail [options] - -n {count} Tail count to print; default 10 - -g {a,b,c} Optional group-by-field names for tail counts - Passes through the last n records, optionally by category. - - tee - Usage: mlr tee [options] {filename} - Passes through input records (like mlr cat) but also writes to specified output - file, using output-format flags from the command line (e.g. --ocsv). See also - the "tee" keyword within mlr put, which allows data-dependent filenames. - Options: - -a: append to existing file, if any, rather than overwriting. - --no-fflush: don't call fflush() after every record. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - - top - Usage: mlr top [options] - -f {a,b,c} Value-field names for top counts. - -g {d,e,f} Optional group-by-field names for top counts. - -n {count} How many records to print per category; default 1. - -a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. - --min Print top smallest values; default is top largest values. - -F Keep top values as floats even if they look like integers. - -o {name} Field name for output indices. Default "top_idx". - Prints the n records with smallest/largest values at specified fields, - optionally by category. - - uniq - Usage: mlr uniq [options] - Prints distinct values for specified field names. With -c, same as - count-distinct. For uniq, -f is a synonym for -g. - - Options: - -g {d,e,f} Group-by-field names for uniq counts. - -c Show repeat counts in addition to unique values. - -n Show only the number of distinct values. - -o {name} Field name for output count. Default "count". - -a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. - - unsparsify - Usage: mlr unsparsify [options] - Prints records with the union of field names over all input records. - For field names absent in a given record but present in others, fills in a - value. Without -f, this verb retains all input before producing any output. - - Options: - --fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. - -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - - Example: if the input is two records, one being 'a=1,b=2' and the other - being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and - 'a=,b=3,c=4'. - - FUNCTIONS FOR FILTER/PUT - + - (class=arithmetic #args=2): Addition. - - + (class=arithmetic #args=1): Unary plus. - - - - (class=arithmetic #args=2): Subtraction. - - - (class=arithmetic #args=1): Unary minus. - - * - (class=arithmetic #args=2): Multiplication. - - / - (class=arithmetic #args=2): Division. - - // - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). - - .+ - (class=arithmetic #args=2): Addition, with integer-to-integer overflow - - .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. - - .- - (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - - .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. - - .* - (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. - - ./ - (class=arithmetic #args=2): Division, with integer-to-integer overflow. - - .// - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. - - % - (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). - - ** - (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix - operator. - - | - (class=arithmetic #args=2): Bitwise OR. - - ^ - (class=arithmetic #args=2): Bitwise XOR. - - & - (class=arithmetic #args=2): Bitwise AND. - - ~ - (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the - regex-match operator: try '$y = ~$x'. - - << - (class=arithmetic #args=2): Bitwise left-shift. - - >> - (class=arithmetic #args=2): Bitwise right-shift. - - bitcount - (class=arithmetic #args=1): Count of 1-bits - - == - (class=boolean #args=2): String/numeric equality. Mixing number and string - results in string compare. - - != - (class=boolean #args=2): String/numeric inequality. Mixing number and string - results in string compare. - - =~ - (class=boolean #args=2): String (left-hand side) matches regex (right-hand - side), e.g. '$name =~ "^a.*b$"'. - - !=~ - (class=boolean #args=2): String (left-hand side) does not match regex - (right-hand side), e.g. '$name !=~ "^a.*b$"'. - - > - (class=boolean #args=2): String/numeric greater-than. Mixing number and string - results in string compare. - - >= - (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number - and string results in string compare. - - < - (class=boolean #args=2): String/numeric less-than. Mixing number and string - results in string compare. - - <= - (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number - and string results in string compare. - - && - (class=boolean #args=2): Logical AND. - - || - (class=boolean #args=2): Logical OR. - - ^^ - (class=boolean #args=2): Logical XOR. - - ! - (class=boolean #args=1): Logical negation. - - ? : - (class=boolean #args=3): Ternary operator. - - . - (class=string #args=2): String concatenation. - - gsub - (class=string #args=3): Example: '$name=gsub($name, "old", "new")' - (replace all). - - regextract - (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' - . - - regextract_or_else - (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' - . - - strlen - (class=string #args=1): String length. - - sub - (class=string #args=3): Example: '$name=sub($name, "old", "new")' - (replace once). - - ssub - (class=string #args=3): Like sub but does no regexing. No characters are special. - - substr - (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n - inclusive. Negative indices -len .. -1 alias to 0 .. len-1. - - tolower - (class=string #args=1): Convert string to lowercase. - - toupper - (class=string #args=1): Convert string to uppercase. - - truncate - (class=string #args=2): Truncates string first argument to max length of int second argument. - - capitalize - (class=string #args=1): Convert string's first character to uppercase. - - lstrip - (class=string #args=1): Strip leading whitespace from string. - - rstrip - (class=string #args=1): Strip trailing whitespace from string. - - strip - (class=string #args=1): Strip leading and trailing whitespace from string. - - collapse_whitespace - (class=string #args=1): Strip repeated whitespace from string. - - clean_whitespace - (class=string #args=1): Same as collapse_whitespace and strip. - - system - (class=string #args=1): Run command string, yielding its stdout minus final carriage return. - - abs - (class=math #args=1): Absolute value. - - acos - (class=math #args=1): Inverse trigonometric cosine. - - acosh - (class=math #args=1): Inverse hyperbolic cosine. - - asin - (class=math #args=1): Inverse trigonometric sine. - - asinh - (class=math #args=1): Inverse hyperbolic sine. - - atan - (class=math #args=1): One-argument arctangent. - - atan2 - (class=math #args=2): Two-argument arctangent. - - atanh - (class=math #args=1): Inverse hyperbolic tangent. - - cbrt - (class=math #args=1): Cube root. - - ceil - (class=math #args=1): Ceiling: nearest integer at or above. - - cos - (class=math #args=1): Trigonometric cosine. - - cosh - (class=math #args=1): Hyperbolic cosine. - - erf - (class=math #args=1): Error function. - - erfc - (class=math #args=1): Complementary error function. - - exp - (class=math #args=1): Exponential function e**x. - - expm1 - (class=math #args=1): e**x - 1. - - floor - (class=math #args=1): Floor: nearest integer at or below. - - invqnorm - (class=math #args=1): Inverse of normal cumulative distribution - function. Note that invqorm(urand()) is normally distributed. - - log - (class=math #args=1): Natural (base-e) logarithm. - - log10 - (class=math #args=1): Base-10 logarithm. - - log1p - (class=math #args=1): log(1-x). - - logifit - (class=math #args=3): Given m and b from logistic regression, compute - fit: $yhat=logifit($x,$m,$b). - - madd - (class=math #args=3): a + b mod m (integers) - - max - (class=math variadic): max of n numbers; null loses - - mexp - (class=math #args=3): a ** b mod m (integers) - - min - (class=math variadic): Min of n numbers; null loses - - mmul - (class=math #args=3): a * b mod m (integers) - - msub - (class=math #args=3): a - b mod m (integers) - - pow - (class=math #args=2): Exponentiation; same as **. - - qnorm - (class=math #args=1): Normal cumulative distribution function. - - round - (class=math #args=1): Round to nearest integer. - - roundm - (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is - the same as round($x/$m)*$m - - sgn - (class=math #args=1): +1 for positive input, 0 for zero input, -1 for - negative input. - - sin - (class=math #args=1): Trigonometric sine. - - sinh - (class=math #args=1): Hyperbolic sine. - - sqrt - (class=math #args=1): Square root. - - tan - (class=math #args=1): Trigonometric tangent. - - tanh - (class=math #args=1): Hyperbolic tangent. - - urand - (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. - Int-valued example: '$n=floor(20+urand()*11)'. - - urandrange - (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). - - urand32 - (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 - inclusive. - - urandint - (class=math #args=2): Integer uniformly distributed between inclusive - integer endpoints. - - dhms2fsec - (class=time #args=1): Recovers floating-point seconds as in - dhms2fsec("5d18h53m20.250000s") = 500000.250000 - - dhms2sec - (class=time #args=1): Recovers integer seconds as in - dhms2sec("5d18h53m20s") = 500000 - - fsec2dhms - (class=time #args=1): Formats floating-point seconds as in - fsec2dhms(500000.25) = "5d18h53m20.250000s" - - fsec2hms - (class=time #args=1): Formats floating-point seconds as in - fsec2hms(5000.25) = "01:23:20.250000" - - gmt2sec - (class=time #args=1): Parses GMT timestamp as integer seconds since - the epoch. - - localtime2sec - (class=time #args=1): Parses local timestamp as integer seconds since - the epoch. Consults $TZ environment variable. - - hms2fsec - (class=time #args=1): Recovers floating-point seconds as in - hms2fsec("01:23:20.250000") = 5000.250000 - - hms2sec - (class=time #args=1): Recovers integer seconds as in - hms2sec("01:23:20") = 5000 - - sec2dhms - (class=time #args=1): Formats integer seconds as in sec2dhms(500000) - = "5d18h53m20s" - - sec2gmt - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". - Leaves non-numbers as-is. - - sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n - decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Leaves non-numbers as-is. - - sec2gmtdate - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". - Leaves non-numbers as-is. - - sec2localtime - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n - decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localdate - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2hms - (class=time #args=1): Formats integer seconds as in - sec2hms(5000) = "01:23:20" - - strftime - (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". - Format strings are as in the C library (please see "man strftime" on your system), - with the Miller-specific addition of "%1S" through "%9S" which format the seconds - with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) - See also strftime_local. - - strftime_local - (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. - - strptime - (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, - e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, - and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. - See also strptime_local. - - strptime_local - (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. - - systime - (class=time #args=0): Floating-point seconds since the epoch, - e.g. 1440768801.748936. - - is_absent - (class=typing #args=1): False if field is present in input, true otherwise - - is_bool - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. - - is_boolean - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. - - is_empty - (class=typing #args=1): True if field is present in input with empty string value, false otherwise. - - is_empty_map - (class=typing #args=1): True if argument is a map which is empty. - - is_float - (class=typing #args=1): True if field is present with value inferred to be float - - is_int - (class=typing #args=1): True if field is present with value inferred to be int - - is_map - (class=typing #args=1): True if argument is a map. - - is_nonempty_map - (class=typing #args=1): True if argument is a map which is non-empty. - - is_not_empty - (class=typing #args=1): False if field is present in input with empty value, true otherwise - - is_not_map - (class=typing #args=1): True if argument is not a map. - - is_not_null - (class=typing #args=1): False if argument is null (empty or absent), true otherwise. - - is_null - (class=typing #args=1): True if argument is null (empty or absent), false otherwise. - - is_numeric - (class=typing #args=1): True if field is present with value inferred to be int or float - - is_present - (class=typing #args=1): True if field is present in input, false otherwise. - - is_string - (class=typing #args=1): True if field is present with string (including empty-string) value - - asserting_absent - (class=typing #args=1): Returns argument if it is absent in the input data, else - throws an error. - - asserting_bool - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_boolean - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_empty - (class=typing #args=1): Returns argument if it is present in input with empty value, - else throws an error. - - asserting_empty_map - (class=typing #args=1): Returns argument if it is a map with empty value, else - throws an error. - - asserting_float - (class=typing #args=1): Returns argument if it is present with float value, else - throws an error. - - asserting_int - (class=typing #args=1): Returns argument if it is present with int value, else - throws an error. - - asserting_map - (class=typing #args=1): Returns argument if it is a map, else throws an error. - - asserting_nonempty_map - (class=typing #args=1): Returns argument if it is a non-empty map, else throws - an error. - - asserting_not_empty - (class=typing #args=1): Returns argument if it is present in input with non-empty - value, else throws an error. - - asserting_not_map - (class=typing #args=1): Returns argument if it is not a map, else throws an error. - - asserting_not_null - (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), - else throws an error. - - asserting_null - (class=typing #args=1): Returns argument if it is null (empty or absent), else throws - an error. - - asserting_numeric - (class=typing #args=1): Returns argument if it is present with int or float value, - else throws an error. - - asserting_present - (class=typing #args=1): Returns argument if it is present in input, else throws - an error. - - asserting_string - (class=typing #args=1): Returns argument if it is present with string (including - empty-string) value, else throws an error. - - boolean - (class=conversion #args=1): Convert int/float/bool/string to boolean. - - float - (class=conversion #args=1): Convert int/float/bool/string to float. - - fmtnum - (class=conversion #args=2): Convert int/float/bool to string using - printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers - are all long long or double. If you use formats like %d or %f, behavior is undefined. - - hexfmt - (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". - - int - (class=conversion #args=1): Convert int/float/bool/string to int. - - string - (class=conversion #args=1): Convert int/float/bool/string to string. - - typeof - (class=conversion #args=1): Convert argument to type of argument (e.g. - MT_STRING). For debug. - - depth - (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. - - haskey - (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or - 'haskey(mymap, mykey)'. Error if 1st argument is not a map. - - joink - (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. - - joinkv - (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' - - joinv - (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. - - leafcount - (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, - same as length. - - length - (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. - - mapdiff - (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. - With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. - - mapexcept - (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. - E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. - - mapselect - (class=maps variadic): Returns a map with only keys from remaining arguments set. - E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. - - mapsum - (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with - key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. - - splitkv - (class=maps #args=3): Splits string by separators into map with type inference. - E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. - - splitkvx - (class=maps #args=3): Splits string by separators into map without type inference (keys and - values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives - '{"a" : "1", "b" : "2", "c" : "3"}'. - - splitnv - (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. - E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. - - splitnvx - (class=maps #args=2): Splits string by separator into integer-indexed map without type - inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. - - KEYWORDS FOR PUT AND FILTER - all - all: used in "emit", "emitp", and "unset" as a synonym for @* - - begin - begin: defines a block of statements to be executed before input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'begin { @count = 0 }' - - bool - bool: declares a boolean local variable in the current curly-braced scope. - Type-checking happens at assignment: 'bool b = 1' is an error. - - break - break: causes execution to continue after the body of the current - for/while/do-while loop. - - call - call: used for invoking a user-defined subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - continue - continue: causes execution to skip the remaining statements in the body of - the current for/while/do-while loop. For-loop increments are still applied. - - do - do: with "while", introduces a do-while loop. The body statements must be wrapped - in curly braces. - - dump - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - - edump - edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' - - elif - elif: the way Miller spells "else if". The body statements must be wrapped - in curly braces. - - else - else: terminates an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - emit - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - emitf - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - - emitp - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - end - end: defines a block of statements to be executed after input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' - - eprint - eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' - - eprintn - eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' - - false - false: the boolean literal value. - - filter - filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' - - float - float: declares a floating-point local variable in the current curly-braced scope. - Type-checking happens at assignment: 'float x = 0' is an error. - - for - for: defines a for-loop using one of three styles. The body statements must - be wrapped in curly braces. - For-loop over stream record: - Example: 'for (k, v in $*) { ... }' - For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' - - func - func: used for defining a user-defined function. - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' - - if - if: starts an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - in - in: used in for-loops over stream records or out-of-stream variables. - - int - int: declares an integer local variable in the current curly-braced scope. - Type-checking happens at assignment: 'int x = 0.0' is an error. - - map - map: declares an map-valued local variable in the current curly-braced scope. - Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is - always OK. map b = a is OK or not depending on whether a is a map. - - num - num: declares an int/float local variable in the current curly-braced scope. - Type-checking happens at assignment: 'num b = true' is an error. - - print - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - printn - printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' - - return - return: specifies the return value from a user-defined function. - Omitted return statements (including via if-branches) result in an absent-null - return value, which in turns results in a skipped assignment to an LHS. - - stderr - stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. - - stdout - stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. - - str - str: declares a string local variable in the current curly-braced scope. - Type-checking happens at assignment. - - subr - subr: used for defining a subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - tee - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - - true - true: the boolean literal value. - - unset - unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' - - var - var: declares an untyped local variable in the current curly-braced scope. - Examples: 'var a=1', 'var xyz=""' - - while - while: introduces a while loop, or with "do", introduces a do-while loop. - The body statements must be wrapped in curly braces. - - ENV - ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' - - FILENAME - FILENAME: evaluates to the name of the current file being processed. - - FILENUM - FILENUM: evaluates to the number of the current file being processed, - starting with 1. - - FNR - FNR: evaluates to the number of the current record within the current file - being processed, starting with 1. Resets at the start of each file. - - IFS - IFS: evaluates to the input field separator from the command line. - - IPS - IPS: evaluates to the input pair separator from the command line. - - IRS - IRS: evaluates to the input record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - M_E - M_E: the mathematical constant e. - - M_PI - M_PI: the mathematical constant pi. - - NF - NF: evaluates to the number of fields in the current record. - - NR - NR: evaluates to the number of the current record over all files - being processed, starting with 1. Does not reset at the start of each file. - - OFS - OFS: evaluates to the output field separator from the command line. - - OPS - OPS: evaluates to the output pair separator from the command line. - - ORS - ORS: evaluates to the output record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - AUTHOR - Miller is written by John Kerl . - - This manual page has been composed from Miller's help output by Eric - MSP Veith . - - SEE ALSO - awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and - MIME Type for Comma-Separated Values (CSV) Files, the miller website - http://johnkerl.org/miller/doc - - - - 2021-03-22 MILLER(1) diff --git a/docs6/_build/html/_sources/originality.rst.txt b/docs6/_build/html/_sources/originality.rst.txt deleted file mode 100644 index d43603a4a..000000000 --- a/docs6/_build/html/_sources/originality.rst.txt +++ /dev/null @@ -1,43 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -How original is Miller? -================================================================ - -It isn't. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include ``awk``, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools: - -**The Unix toolkit**: Intentional similarities as described in :doc:`feature-comparison`. - -Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites: - -* http://en.wikibooks.org/wiki/Ad_Hoc_Data_Analysis_From_The_Unix_Command_Line -* http://www.gregreda.com/2013/07/15/unix-commands-for-data-science -* https://github.com/dbohdan/structured-text-tools - -**RecordStream**: Miller owes particular inspiration to `RecordStream `_. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the ``sort``, ``stats1`` (analog of RecordStream's ``collate``), and ``delta`` operations, as well as ``filter`` and ``put``, and pretty-print formatting. - -**stats_m**: A third source of lineage is my Python `stats_m `_ module. This includes simple single-pass algorithms which form Miller's ``stats1`` and ``stats2`` subcommands. - -**SQL**: Fourthly, Miller's ``group-by`` command name is from SQL, as is the term ``aggregate``. - -**Added value**: Miller's added values include: - -* Name-indexing, compared to the Unix toolkit's positional indexing. -* Raw speed, compared to ``awk``, RecordStream, ``stats_m``, or various other kinds of Python/Ruby/etc. scripts one can easily create. -* Compact keystroking for many common tasks, with a decent amount of flexibility. -* Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases. -* Various file formats, and on-the-fly format conversion. - -**jq**: Miller does for name-indexed text what `jq `_ does for JSON. If you're not already familiar with ``jq``, please check it out!. - -**What about similar tools?** - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. Last I knew it doesn't mention `rows `_ so here's a plug for that as well. As it turns out, I learned about most of these after writing Miller. - -**What about DOTADIW?** One of the key points of the `Unix philosophy `_ is that a tool should do one thing and do it well. Hence ``sort`` and ``cut`` do just one thing. Why does Miller put ``awk``-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also :doc:`reference`)? This is a fair question. First note that many standard tools, such as ``awk`` and ``perl``, do quite a few things -- as does ``jq``. But I could have pushed for putting format awareness and name-indexing options into ``cut``, ``awk``, and so on (so you could do ``cut -f hostname,uptime`` or ``awk '{sum += $x*$y}END{print sum}'``). Patching ``cut``, ``sort``, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features. - -**Why not use Perl/Python/Ruby etc.?** Maybe you should. With those tools you'll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you'll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking. - -When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I'd need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I'd get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I'd get the language's ``eval`` for free and I wouldn't need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I'd gotten good enough performance from the latter I'd have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL. - -**No, really, why one more command-line data-manipulation tool?** I wrote Miller because I was frustrated with tools like ``grep``, ``sed``, and so on being *line-aware* without being *format-aware*. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of `RecordStream `_ combined with the raw speed of the Unix toolkit. Miller does precisely that. diff --git a/docs6/_build/html/_sources/performance.rst.txt b/docs6/_build/html/_sources/performance.rst.txt deleted file mode 100644 index 444e35fed..000000000 --- a/docs6/_build/html/_sources/performance.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Performance -================================================================ - -Disclaimer ----------------------------------------------------------------- - -In a previous version of this page (see `here `_) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples: - -* Miller's principal strength is that it handles **key-value data in various formats** while the system tools **do not**. So if you time ``mlr sort`` on a CSV file against system ``sort``, it's not relevant to say which is faster by how many percent -- Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, ``awk`` doesn't respect header lines, although you can code up some CSV-handling using ``if (NR==1) { ... } else { ... }``. And that's just CSV: I don't know any simple way to get ``sort``, ``awk``, etc. to handle DKVP, JSON, etc. -- which is the main rreason I wrote Miller. - -* **Implementations differ by platform**: one ``awk`` may be fundamentally faster than another, and ``mawk`` has a very efficient bytecode implementation -- which handles positionally indexed data far faster than Miller does. - -* The system ``sort`` command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants. - -* Etc. - -Summary ----------------------------------------------------------------- - -Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in ``grep``, ``sed``, etc. diff --git a/docs6/_build/html/_sources/quick-examples.rst.txt b/docs6/_build/html/_sources/quick-examples.rst.txt deleted file mode 100644 index 1976123cc..000000000 --- a/docs6/_build/html/_sources/quick-examples.rst.txt +++ /dev/null @@ -1,74 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Quick examples -================================================================ - -.. image:: coverart/cover-combined.png - -Column select:: - - % mlr --csv cut -f hostname,uptime mydata.csv - -Add new columns as function of other columns:: - - % mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - -Row filter:: - - % mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv - -Apply column labels and pretty-print:: - - % grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - -Join multiple data sources on key columns:: - - % mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - -Multiple formats including JSON:: - - % mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - -Aggregate per-column statistics:: - - % mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - -Linear regression:: - - % mlr stats2 -a linreg-pca -f u,v -g shape data/* - -Aggregate custom per-column statistics:: - - % mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - -Iterate over data using DSL expressions:: - - % mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset - ' - -Run DSL expressions from a script file:: - - % mlr --from infile.dat put -f analyze.mlr - -Split/reduce output to multiple filenames:: - - % mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - -Compressed I/O:: - - % mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - -Interoperate with other data-processing tools using standard pipes:: - - % mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - -Tap/trace:: - - % mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' diff --git a/docs6/_build/html/_sources/record-heterogeneity.rst.txt b/docs6/_build/html/_sources/record-heterogeneity.rst.txt deleted file mode 100644 index aa5a69c32..000000000 --- a/docs6/_build/html/_sources/record-heterogeneity.rst.txt +++ /dev/null @@ -1,206 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Record-heterogeneity -================================================================ - -We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error. - -But heterogeneous data abound (today's no-SQL databases for example). Miller handles this. - -For I/O ----------------------------------------------------------------- - -CSV and pretty-print -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example: - -:: - - $ cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr --ocsvlite cat data/het.dkvp - resource,loadsec,ok - /path/to/file,0.45,true - - record_count,resource - 100,/path/to/file - - resource,loadsec,ok - /path/to/second/file,0.32,true - - record_count,resource - 150,/path/to/second/file - - resource,loadsec,ok - /some/other/path,0.97,false - -:: - - $ mlr --opprint cat data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - - record_count resource - 100 /path/to/file - - resource loadsec ok - /path/to/second/file 0.32 true - - record_count resource - 150 /path/to/second/file - - resource loadsec ok - /some/other/path 0.97 false - -Miller handles explicit header changes as just shown. If your CSV input contains ragged data -- if there are implicit header changes -- you can use ``--allow-ragged-csv-input`` (or keystroke-saver ``--ragged``). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows: - -:: - - $ cat data/ragged.csv - a,b,c - 1,2,3 - 4,5 - 6,7,8,9 - -:: - - $ mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv - a 1 - b 2 - c 3 - - a 4 - b 5 - c - - a 6 - b 7 - c 8 - 4 9 - -You may also find Miller's ``group-like`` feature handy (see also :doc:`reference`): - -:: - - $ mlr --ocsvlite group-like data/het.dkvp - resource,loadsec,ok - /path/to/file,0.45,true - /path/to/second/file,0.32,true - /some/other/path,0.97,false - - record_count,resource - 100,/path/to/file - 150,/path/to/second/file - -:: - - $ mlr --opprint group-like data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - /path/to/second/file 0.32 true - /some/other/path 0.97 false - - record_count resource - 100 /path/to/file - 150 /path/to/second/file - -Key-value-pair, vertical-tabular, and index-numbered formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For these formats, record-heterogeneity comes naturally: - -:: - - $ cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr --onidx --ofs ' ' cat data/het.dkvp - /path/to/file 0.45 true - 100 /path/to/file - /path/to/second/file 0.32 true - 150 /path/to/second/file - /some/other/path 0.97 false - -:: - - $ mlr --oxtab cat data/het.dkvp - resource /path/to/file - loadsec 0.45 - ok true - - record_count 100 - resource /path/to/file - - resource /path/to/second/file - loadsec 0.32 - ok true - - record_count 150 - resource /path/to/second/file - - resource /some/other/path - loadsec 0.97 - ok false - -:: - - $ mlr --oxtab group-like data/het.dkvp - resource /path/to/file - loadsec 0.45 - ok true - - resource /path/to/second/file - loadsec 0.32 - ok true - - resource /some/other/path - loadsec 0.97 - ok false - - record_count 100 - resource /path/to/file - - record_count 150 - resource /path/to/second/file - -For processing ----------------------------------------------------------------- - -Miller operates on specified fields and takes the rest along: for example, if you are sorting on the ``count`` field then all records in the input stream must have a ``count`` field but the other fields can vary, and moreover the sorted-on field name(s) don't need to be in the same position on each line: - -:: - - $ cat data/sort-het.dkvp - count=500,color=green - count=600 - status=ok,count=250,hours=0.22 - status=ok,count=200,hours=3.4 - count=300,color=blue - count=100,color=green - count=450 - -:: - - $ mlr sort -n count data/sort-het.dkvp - count=100,color=green - status=ok,count=200,hours=3.4 - status=ok,count=250,hours=0.22 - count=300,color=blue - count=450 - count=500,color=green - count=600 diff --git a/docs6/_build/html/_sources/reference-dsl.rst.txt b/docs6/_build/html/_sources/reference-dsl.rst.txt deleted file mode 100644 index 8aa317df0..000000000 --- a/docs6/_build/html/_sources/reference-dsl.rst.txt +++ /dev/null @@ -1,4932 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -DSL reference -================================================================ - -Overview ----------------------------------------------------------------- - -Here's comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -:: - - $ mlr stats1 -a sum -f x -g a data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -:: - - $ mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -Please see :doc:`reference-verbs` for information on verbs other than ``put`` and ``filter``. - -The essential usages of ``mlr filter`` and ``mlr put`` are for record-selection and record-updating expressions, respectively. For example, given the following input data: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -you might retain only the records whose ``a`` field has value ``eks``: - -:: - - $ mlr filter '$a == "eks"' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -or you might add a new field which is a function of existing fields: - -:: - - $ mlr put '$ab = $a . "_" . $b ' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ab=pan_pan - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ab=eks_pan - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ab=wye_wye - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ab=eks_wye - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ab=wye_pan - -The two verbs ``mlr filter`` and ``mlr put`` are essentially the same. The only differences are: - -* Expressions sent to ``mlr filter`` must end with a boolean expression, which is the filtering criterion; - -* ``mlr filter`` expressions may not reference the ``filter`` keyword within them; and - -* ``mlr filter`` expressions may not use ``tee``, ``emit``, ``emitp``, or ``emitf``. - -All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement. - -There are more details and more choices, of course, as detailed in the following sections. - -Syntax ----------------------------------------------------------------- - -Expression formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Multiple expressions may be given, separated by semicolons, and each may refer to the ones before: - -:: - - $ ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j' - i j k - 0 1 1 - 1 2 3 - 2 3 5 - 3 4 7 - 4 5 9 - 5 6 11 - 6 7 13 - 7 8 15 - 8 9 17 - 9 10 19 - -Newlines within the expression are ignored, which can help increase legibility of complex expressions: - -:: - - $ mlr --opprint put ' - $nf = NF; - $nr = NR; - $fnr = FNR; - $filenum = FILENUM; - $filename = FILENAME - ' data/small data/small2 - a b i x y nf nr fnr filenum filename - pan pan 1 0.3467901443380824 0.7268028627434533 5 1 1 1 data/small - eks pan 2 0.7586799647899636 0.5221511083334797 5 2 2 1 data/small - wye wye 3 0.20460330576630303 0.33831852551664776 5 3 3 1 data/small - eks wye 4 0.38139939387114097 0.13418874328430463 5 4 4 1 data/small - wye pan 5 0.5732889198020006 0.8636244699032729 5 5 5 1 data/small - pan eks 9999 0.267481232652199086 0.557077185510228001 5 6 1 2 data/small2 - wye eks 10000 0.734806020620654365 0.884788571337605134 5 7 2 2 data/small2 - pan wye 10001 0.870530722602517626 0.009854780514656930 5 8 3 2 data/small2 - hat wye 10002 0.321507044286237609 0.568893318795083758 5 9 4 2 data/small2 - pan zee 10003 0.272054845593895200 0.425789896597056627 5 10 5 2 data/small2 - -:: - - $ mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium - x_y_corr - -0.747994 - -.. _reference-dsl-expressions-from-files: - -Expressions from files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The simplest way to enter expressions for ``put`` and ``filter`` is between single quotes on the command line, e.g. - -:: - - $ mlr --from data/small put '$xy = sqrt($x**2 + $y**2)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -:: - - $ mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -You may, though, find it convenient to put expressions into files for reuse, and read them -**using the -f option**. For example: - -:: - - $ cat data/fe-example-3.mlr - func f(a, b) { - return sqrt(a**2 + b**2) - } - $xy = f($x, $y) - -:: - - $ mlr --from data/small put -f data/fe-example-3.mlr - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -If you have some of the logic in a file and you want to write the rest on the command line, you can **use the -f and -e options together**: - -:: - - $ cat data/fe-example-4.mlr - func f(a, b) { - return sqrt(a**2 + b**2) - } - -:: - - $ mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -A suggested use-case here is defining functions in files, and calling them from command-line expressions. - -Another suggested use-case is putting default parameter values in files, e.g. using ``begin{@count=is_present(@count)?@count:10}`` in the file, where you can precede that using ``begin{@count=40}`` using ``-e``. - -Moreover, you can have one or more ``-f`` expressions (maybe one function per file, for example) and one or more ``-e`` expressions on the command line. If you mix ``-f`` and ``-e`` then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don't forget intervening semicolons: e.g. not ``mlr put -e '$x=1' -e '$y=2 ...'`` but rather ``mlr put -e '$x=1;' -e '$y=2' ...``.) - -Semicolons, commas, newlines, and curly braces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller uses **semicolons as statement separators**, not statement terminators. This means you can write: - -:: - - mlr put 'x=1' - mlr put 'x=1;$y=2' - mlr put 'x=1;$y=2;' - mlr put 'x=1;;;;$y=2;' - -Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below). - -:: - - $ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""} $foo = "bar"' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -:: - - $ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -Semicolons are required between statements even if those statements are on separate lines. **Newlines** are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines: - -:: - - mlr put ' - $x = 1 - $y = 2 # Syntax error - ' - - mlr put ' - $x = 1; - $y = 2 # This is OK - ' - -**Trailing commas** are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case: - -:: - - $ mlr --csvlite --from data/a.csv put ' - func f( - num a, - num b, - ): num { - return a**2 + b**2; - } - $* = { - "s": $a + $b, - "t": $a - $b, - "u": f( - $a, - $b, - ), - "v": NR, - } - ' - s,t,u,v - 3,-1,5.000000,1 - 9,-1,41.000000,2 - -Bodies for all compound statements must be enclosed in **curly braces**, even if the body is a single statement: - -:: - - mlr put 'if ($x == 1) $y = 2' # Syntax error - -:: - - mlr put 'if ($x == 1) { $y = 2 }' # This is OK - -Bodies for compound statements may be empty: - -:: - - mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable - -Variables ----------------------------------------------------------------- - -Miller has the following kinds of variables: - -**Built-in variables** such as ``NF``, ``NF``, ``FILENAME``, ``M_PI``, and ``M_E``. These are all capital letters and are read-only (although some of them change value from one record to another). - -**Fields of stream records**, accessed using the ``$`` prefix. These refer to fields of the current data-stream record. For example, in ``echo x=1,y=2 | mlr put '$z = $x + $y'``, ``$x`` and ``$y`` refer to input fields, and ``$z`` refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as ``$*``. - -**Out-of-stream variables** accessed using the ``@`` prefix. These refer to data which persist from one record to the next, including in ``begin`` and ``end`` blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as ``@*``. - -**Local variables** are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables. - -**Keywords** are not variables, but since their names are reserved, you cannot use these names for local variables. - -Built-in variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are written all in capital letters, such as ``NR``, ``NF``, ``FILENAME``, and only a small, specific set of them is defined by Miller. - -Namely, Miller supports the following five built-in variables for :doc:`filter and put `, all ``awk``-inspired: ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME``, as well as the mathematical constants ``M_PI`` and ``M_E``. Lastly, the ``ENV`` hashmap allows read access to environment variables, e.g. ``ENV["HOME"]`` or ``ENV["foo_".$hostname]``. - -:: - - $ mlr filter 'FNR == 2' data/small* - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 - a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134 - -:: - - $ mlr put '$fnr = FNR' data/small* - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,fnr=1 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,fnr=2 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,fnr=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,fnr=4 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,fnr=5 - 1=a,2=b,3=i,4=x,5=y,fnr=1 - 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533,fnr=2 - 1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797,fnr=3 - 1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776,fnr=4 - 1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463,fnr=5 - 1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729,fnr=6 - a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001,fnr=1 - a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134,fnr=2 - a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930,fnr=3 - a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758,fnr=4 - a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627,fnr=5 - -Their values of ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME`` change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ``ENV`` is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution. - -Their **scope is global**: you can refer to them in any ``filter`` or ``put`` statement. Their values are assigned by the input-record reader: - -:: - - $ mlr --csv put '$nr = NR' data/a.csv - a,b,c,nr - 1,2,3,1 - 4,5,6,2 - -:: - - $ mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv - a,b,c,nr - 1,2,3,1 - 1,2,3,1 - 1,2,3,1 - 4,5,6,2 - 4,5,6,2 - 4,5,6,2 - -The **extent** is for the duration of the put/filter: in a ``begin`` statement (which executes before the first input record is consumed) you will find ``NR=1`` and in an ``end`` statement (which is executed after the last input record is consumed) you will find ``NR`` to be the total number of records ingested. - -These are all **read-only** for the ``mlr put`` and ``mlr filter`` DSLs: they may be assigned from, e.g. ``$nr=NR``, but they may not be assigned to: ``NR=100`` is a syntax error. - -Field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Names of fields within stream records must be specified using a ``$`` in :doc:`filter and put expressions `, even though the dollar signs don't appear in the data stream itself. For integer-indexed data, this looks like ``awk``'s ``$1,$2,$3``, except that Miller allows non-numeric names such as ``$quantity`` or ``$hostname``. Likewise, enclose string literals in double quotes in ``filter`` expressions even though they don't appear in file data. In particular, ``mlr filter '$x=="abc"'`` passes through the record ``x=abc``. - -If field names have **special characters** such as ``.`` then you can use braces, e.g. ``'${field.name}'``. - -You may also use a **computed field name** in square brackets, e.g. - -:: - - $ echo a=3,b=4 | mlr filter '$["x"] < 0.5' - -:: - - $ echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b' - s=green,t=blue,a=3,b=4,green_blue=12 - -Notes: - -The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream. - -Their **extent** is limited to the current record; their **scope** is the ``filter`` or ``put`` command in which they appear. - -These are **read-write**: you can do ``$y=2*$x``, ``$x=$x+1``, etc. - -Records are Miller's output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with ``cut``, or records are excluded with ``filter`` or ``put -q``, etc. Simply assign a value to a field and it will be output. - -Positional field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1). - -Use ``$[[3]]`` to access the name of field 3. More generally, any expression evaluating to an integer can go between ``$[[`` and ``]]``. - -Then using a computed field name, ``$[ $[[3]] ]`` is the value in the third field. This has the shorter equivalent notation ``$[[[3]]]``. - -:: - - $ mlr cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$[[3]] = "NEW"' data/small - a=pan,b=pan,NEW=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,NEW=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,NEW=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,NEW=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,NEW=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$[[[3]]] = "NEW"' data/small - a=pan,b=pan,i=NEW,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=NEW,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=NEW,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=NEW,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$NEW = $[[NR]]' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=a - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=b - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=i - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=x - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=y - -:: - - $ mlr put '$NEW = $[[[NR]]]' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=pan - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=pan - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=0.381399 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=0.863624 - -:: - - $ mlr put '$[[[NR]]] = "NEW"' data/small - a=NEW,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=NEW,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=NEW,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=NEW - -Right-hand side accesses to non-existent fields -- i.e. with index less than 1 or greater than ``NF`` -- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op. - -:: - - $ mlr put '$[[6]] = "NEW"' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$[[[6]]] = "NEW"' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are prefixed with an at-sign, e.g. ``@sum``. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do ``@sum += $quanity``, or ``@sum[$color] += $quanity``, or ``@sum[$color][$shape] += $quanity``. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. ``@sum[NR] = $a + $b``, ``@sum[$a."-".$b] = $x``, etc. - -Their names and their values are entirely under your control; they change only when you assign to them. - -Just as for field names in stream records, if you want to define out-of-stream variables with **special characters** such as ``.`` then you can use braces, e.g. ``'@{variable.name}["index"]'``. - -You may use a **computed key** in square brackets, e.g. - -:: - - $ echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all' - green_blue=12 - -Out-of-stream variables are **scoped** to the ``put`` command in which they appear. In particular, if you have two or more ``put`` commands separated by ``then``, each put will have its own set of out-of-stream variables: - -:: - - $ cat data/a.dkvp - a=1,b=2,c=3 - a=4,b=5,c=6 - -:: - - $ mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp - a=10,b=2,c=3 - a=40,b=5,c=6 - sum=5 - sum=50 - -Out-of-stream variables' **extent** is from the start to the end of the record stream, i.e. every time the ``put`` or ``filter`` statement referring to them is executed. - -Out-of-stream variables are **read-write**: you can do ``$sum=@sum``, ``@sum=$sum``, etc. - -Indexed out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Using an index on the ``@count`` and ``@sum`` variables, we get the benefit of the ``-g`` (group-by) option which ``mlr stats1`` and various other Miller commands have: - -:: - - $ mlr put -q ' - @x_count[$a] += 1; - @x_sum[$a] += $x; - end { - emit @x_count, "a"; - emit @x_sum, "a"; - } - ' ../data/small - a=pan,x_count=2 - a=eks,x_count=3 - a=wye,x_count=2 - a=zee,x_count=2 - a=hat,x_count=1 - a=pan,x_sum=0.849416 - a=eks,x_sum=1.751863 - a=wye,x_sum=0.777892 - a=zee,x_sum=1.125680 - a=hat,x_sum=0.031442 - -:: - - $ mlr stats1 -a count,sum -f x -g a ../data/small - a=pan,x_count=2,x_sum=0.849416 - a=eks,x_count=3,x_sum=1.751863 - a=wye,x_count=2,x_sum=0.777892 - a=zee,x_count=2,x_sum=1.125680 - a=hat,x_count=1,x_sum=0.031442 - -Indices can be arbitrarily deep -- here there are two or more of them: - -:: - - $ mlr --from data/medium put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - emit (@x_count, @x_sum), "a", "b"; - } - ' - a=pan,b=pan,x_count=427,x_sum=219.185129 - a=pan,b=wye,x_count=395,x_sum=198.432931 - a=pan,b=eks,x_count=429,x_sum=216.075228 - a=pan,b=hat,x_count=417,x_sum=205.222776 - a=pan,b=zee,x_count=413,x_sum=205.097518 - a=eks,b=pan,x_count=371,x_sum=179.963030 - a=eks,b=wye,x_count=407,x_sum=196.945286 - a=eks,b=zee,x_count=357,x_sum=176.880365 - a=eks,b=eks,x_count=413,x_sum=215.916097 - a=eks,b=hat,x_count=417,x_sum=208.783171 - a=wye,b=wye,x_count=377,x_sum=185.295850 - a=wye,b=pan,x_count=392,x_sum=195.847900 - a=wye,b=hat,x_count=426,x_sum=212.033183 - a=wye,b=zee,x_count=385,x_sum=194.774048 - a=wye,b=eks,x_count=386,x_sum=204.812961 - a=zee,b=pan,x_count=389,x_sum=202.213804 - a=zee,b=wye,x_count=455,x_sum=233.991394 - a=zee,b=eks,x_count=391,x_sum=190.961778 - a=zee,b=zee,x_count=403,x_sum=206.640635 - a=zee,b=hat,x_count=409,x_sum=191.300006 - a=hat,b=wye,x_count=423,x_sum=208.883010 - a=hat,b=zee,x_count=385,x_sum=196.349450 - a=hat,b=eks,x_count=389,x_sum=189.006793 - a=hat,b=hat,x_count=381,x_sum=182.853532 - a=hat,b=pan,x_count=363,x_sum=168.553807 - -The idea is that ``stats1``, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do. - -Begin/end blocks can be mixed with pattern/action blocks. For example: - -:: - - $ mlr put ' - begin { - @num_total = 0; - @num_positive = 0; - }; - @num_total += 1; - $x > 0.0 { - @num_positive += 1; - $y = log10($x); $z = sqrt($y) - }; - end { - emitf @num_total, @num_positive - } - ' data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - num_total=5,num_positive=3 - -.. _reference-dsl-local-variables: - -Local variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can't be computed using square brackets). There are three kinds of local variables: **arguments** to functions/subroutines, **variables bound within for-loops**, and **locals** defined within control blocks. They may be untyped using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, ``bool``, and ``map``. - -For example: - -:: - - $ # Here I'm using a specified random-number seed so this example always - # produces the same output for this web document: in everyday practice we - # would leave off the --seed 12345 part. - mlr --seed 12345 seqgen --start 1 --stop 10 then put ' - func f(a, b) { # function arguments a and b - r = 0.0; # local r scoped to the function - for (int i = 0; i < 6; i += 1) { # local i scoped to the for-loop - num u = urand(); # local u scoped to the for-loop - r += u; # updates r from the enclosing scope - } - r /= 6; - return a + (b - a) * r; - } - num o = f(10, 20); # local to the top-level scope - $o = o; - ' - i=1,o=14.662901 - i=2,o=17.881983 - i=3,o=14.586560 - i=4,o=16.402409 - i=5,o=16.336598 - i=6,o=14.622701 - i=7,o=15.983753 - i=8,o=13.852177 - i=9,o=15.472899 - i=10,o=15.643912 - -Things which are completely unsurprising, resembling many other languages: - -* Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named ``a`` then you can reassign the value of ``a`` to be something else within the function if you like. - -* However, you cannot redeclare the *type* of an argument or a local: ``var a=1; var a=2`` is an error but ``var a=1; a=2`` is OK. - -* All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference) - -* You can define locals (using ``var``, ``num``, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope. - -* If you assign to a local variable for the first time in a scope without declaring it as ``var``, ``num``, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as if ``var`` had been used. (See also :ref:`reference-dsl-type-checking` for an example.) I recommend always declaring variables explicitly to make the intended scoping clear. - -* Functions and subroutines never have access to locals from their callee (unless passed by value as arguments). - -Things which are perhaps surprising compared to other languages: - -* Type declarations using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, and ``bool`` are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are *implicitly* declared using ``var``. (Some examples are shown below.) - -* Type-checking is done at assignment time. For example, ``float f = 0`` is an error (since ``0`` is an integer), as is ``float f = 0.0; f = 1``. For this reason I prefer to use ``num`` over ``float`` in most contexts since ``num`` encompasses integer and floating-point values. More information about type-checking is at :ref:`reference-dsl-type-checking`. - -* Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in ``for (k, v in $*) { ... }`` ``for ((k1, k2), v in @*) { ... }`` if there are ``k``, ``v``, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop. - -* For C-style triple-for loops, if a for-loop variable is defined using ``var``, ``int``, etc. then it is scoped to that for-loop. E.g. ``for (i = 0; i < 10; i += 1) { ... }`` and ``for (int i = 0; i < 10; i += 1) { ... }``. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only. - -The following example demonstrates the scope rules: - -:: - - $ cat data/scope-example.mlr - func f(a) { # argument is local to the function - var b = 100; # local to the function - c = 100; # local to the function; does not overwrite outer c - return a + 1; - } - var a = 10; # local at top level - var b = 20; # local at top level - c = 30; # local at top level; there is no more-outer-scope c - if (NR == 3) { - var a = 40; # scoped to the if-statement; doesn't overwrite outer a - b = 50; # not scoped to the if-statement; overwrites outer b - c = 60; # not scoped to the if-statement; overwrites outer c - d = 70; # there is no outer d so a local d is created here - - $inner_a = a; - $inner_b = b; - $inner_c = c; - $inner_d = d; - } - $outer_a = a; - $outer_b = b; - $outer_c = c; - $outer_d = d; # there is no outer d defined so no assignment happens - -:: - - $ cat data/scope-example.dat - n=1,x=123 - n=2,x=456 - n=3,x=789 - -:: - - $ mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr - n 1 - x 123 - outer_a 10 - outer_b 20 - outer_c 30 - - n 2 - x 456 - outer_a 10 - outer_b 20 - outer_c 30 - - n 3 - x 789 - inner_a 40 - inner_b 50 - inner_c 60 - inner_d 70 - outer_a 10 - outer_b 50 - outer_c 60 - -And this example demonstrates the type-declaration rules: - -:: - - $ cat data/type-decl-example.mlr - subr s(a, str b, int c) { # a is implicitly var (untyped). - # b is explicitly str. - # c is explicitly int. - # The type-checking is done at the callsite - # when arguments are bound to parameters. - # - var b = 100; # error # Re-declaration in the same scope is disallowed. - int n = 10; # Declaration of variable local to the subroutine. - n = 20; # Assignment is OK. - int n = 30; # error # Re-declaration in the same scope is disallowed. - str n = "abc"; # error # Re-declaration in the same scope is disallowed. - # - float f1 = 1; # error # 1 is an int, not a float. - float f2 = 2.0; # 2.0 is a float. - num f3 = 3; # 3 is a num. - num f4 = 4.0; # 4.0 is a num. - } # - # - call s(1, 2, 3); # Type-assertion '3 is int' is done here at the callsite. - # - k = "def"; # Top-level variable k. - # - for (str k, v in $*) { # k and v are bound here, masking outer k. - print k . ":" . v; # k is explicitly str; v is implicitly var. - } # - # - print "k is".k; # k at this scope level is still "def". - print "v is".v; # v is undefined in this scope. - # - i = -1; # - for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless - # declared local: i is outer, j is local to the loop. - print "inner i =" . i; # - print "inner j =" . j; # - } # - print "outer i =" . i; # i has been modified by the loop. - print "outer j =" . j; # j is undefined in this scope. - -Map literals -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSL has four kinds of hashmaps. **Stream records** are (single-level) maps from name to value. **Out-of-stream variables** and **local variables** can also be maps, although they can be multi-level hashmaps (e.g. ``@sum[$x][$y]``). The fourth kind is **map literals**. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. ``"3"`` rather than ``3``). - -For example, the following swaps the input stream's ``a`` and ``i`` fields, modifies ``y``, and drops the rest: - -:: - - $ mlr --opprint put ' - $* = { - "a": $i, - "i": $a, - "y": $y * 10, - } - ' data/small - a i y - 1 pan 7.268029 - 2 eks 5.221511 - 3 wye 3.383185 - 4 eks 1.341887 - 5 wye 8.636245 - -Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on: - -:: - - $ mlr --from data/small put ' - func f(map m): map { - m["x"] *= 200; - return m; - } - $* = f({"a": $a, "x": $x}); - ' - a=pan,x=69.358029 - a=eks,x=151.735993 - a=wye,x=40.920661 - a=eks,x=76.279879 - a=wye,x=114.657784 - -Like out-of-stream and local variables, map literals can be multi-level: - -:: - - $ mlr --from data/small put -q ' - begin { - @o = { - "nrec": 0, - "nkey": {"numeric":0, "non-numeric":0}, - }; - } - @o["nrec"] += 1; - for (k, v in $*) { - if (is_numeric(v)) { - @o["nkey"]["numeric"] += 1; - } else { - @o["nkey"]["non-numeric"] += 1; - } - } - end { - dump @o; - } - ' - { - "nrec": 5, - "nkey": { - "numeric": 15, - "non-numeric": 10 - } - } - -By default, map-valued expressions are dumped using JSON formatting. If you use ``dump`` to print a hashmap with integer keys and you don't want them double-quoted (JSON-style) then you can use ``mlr put --jknquoteint``. See also ``mlr put --help``. - -.. _reference-dsl-type-checking: - -Type-checking -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSLs support two optional kinds of type-checking. One is inline **type-tests** and **type-assertions** within expressions. The other is **type declarations** for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections. - -Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data. - -.. _reference-dsl-type-tests-and-assertions: - -Type-test and type-assertion expressions -................................................................ - -The following ``is...`` functions take a value and return a boolean indicating whether the argument is of the indicated type. The ``assert_...`` functions return their argument if it is of the specified type, and cause a fatal error otherwise: - -:: - - $ mlr -F | grep ^is - is_absent - is_bool - is_boolean - is_empty - is_empty_map - is_float - is_int - is_map - is_nonempty_map - is_not_empty - is_not_map - is_not_null - is_null - is_numeric - is_present - is_string - -:: - - $ mlr -F | grep ^assert - asserting_absent - asserting_bool - asserting_boolean - asserting_empty - asserting_empty_map - asserting_float - asserting_int - asserting_map - asserting_nonempty_map - asserting_not_empty - asserting_not_map - asserting_not_null - asserting_null - asserting_numeric - asserting_present - asserting_string - -Please see :ref:`cookbook-data-cleaning-examples` for examples of how to use these. - -Type-declarations for local variables, function parameter, and function return values -............................................................................................... - -Local variables can be defined either untyped as in ``x = 1``, or typed as in ``int x = 1``. Types include **var** (explicitly untyped), **int**, **float**, **num** (int or float), **str**, **bool**, and **map**. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in ``int x = 1`` or in any subsequent assignments to the same variable farther down in the scope. - -The reason for ``num`` is that ``int`` and ``float`` typedecls are very precise: - -:: - - float a = 0; # Runtime error since 0 is int not float - int b = 1.0; # Runtime error since 1.0 is float not int - num c = 0; # OK - num d = 1.0; # OK - -A suggestion is to use ``num`` for general use when you want numeric content, and use ``int`` when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints). - -The ``var`` type declaration indicates no type restrictions, e.g. ``var x = 1`` has the same type restrictions on ``x`` as ``x = 1``. The difference is in intentional shadowing: if you have ``x = 1`` in outer scope and ``x = 2`` in inner scope (e.g. within a for-loop or an if-statement) then outer-scope ``x`` has value 2 after the second assignment. But if you have ``var x = 2`` in the inner scope, then you are declaring a variable scoped to the inner block.) For example: - -:: - - x = 1; - if (NR == 4) { - x = 2; # Refers to outer-scope x: value changes from 1 to 2. - } - print x; # Value of x is now two - -:: - - x = 1; - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Likewise function arguments can optionally be typed, with type enforced when the function is called: - -:: - - func f(map m, int i) { - ... - } - $a = f({1:2, 3:4}, 5); # OK - $b = f({1:2, 3:4}, "abc"); # Runtime error - $c = f({1:2, 3:4}, $x); # Runtime error for records with non-integer field named x - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Thirdly, function return values can be type-checked at the point of ``return`` using ``:`` and a typedecl after the parameter list: - -:: - - func f(map m, int i): bool { - ... - ... - if (...) { - return "false"; # Runtime error if this branch is taken - } - ... - ... - if (...) { - return retval; # Runtime error if this function doesn't have an in-scope - # boolean-valued variable named retval - } - ... - ... - # In Miller if your functions don't explicitly return a value, they return absent-null. - # So it would also be a runtime error on reaching the end of this function without - # an explicit return statement. - } - -Null data: empty and absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :ref:`reference-null-data`. - -Aggregate variable assignments -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the ``$*`` syntax: - -* Recursive copy of out-of-stream variables -* Out-of-stream variable assigned to full stream record -* Full stream record assigned to an out-of-stream variable - -Example recursive copy of out-of-stream variables: - -:: - - $ mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small - { - "v": { - "sum": 2.264762, - "count": 5 - } - } - { - "v": { - "sum": 2.264762, - "count": 5 - }, - "w": { - "sum": 2.264762, - "count": 5 - } - } - -Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that: - -:: - - $ mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Example of full stream record assigned to an out-of-stream variable, finding the record for which the ``x`` field has the largest value in the input stream: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - -Keywords for filter and put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - $ mlr --help-all-keywords - all: used in "emit", "emitp", and "unset" as a synonym for @* - - begin: defines a block of statements to be executed before input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'begin { @count = 0 }' - - bool: declares a boolean local variable in the current curly-braced scope. - Type-checking happens at assignment: 'bool b = 1' is an error. - - break: causes execution to continue after the body of the current - for/while/do-while loop. - - call: used for invoking a user-defined subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - continue: causes execution to skip the remaining statements in the body of - the current for/while/do-while loop. For-loop increments are still applied. - - do: with "while", introduces a do-while loop. The body statements must be wrapped - in curly braces. - - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - - edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' - - elif: the way Miller spells "else if". The body statements must be wrapped - in curly braces. - - else: terminates an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - end: defines a block of statements to be executed after input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' - - eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' - - eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' - - false: the boolean literal value. - - filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' - - float: declares a floating-point local variable in the current curly-braced scope. - Type-checking happens at assignment: 'float x = 0' is an error. - - for: defines a for-loop using one of three styles. The body statements must - be wrapped in curly braces. - For-loop over stream record: - Example: 'for (k, v in $*) { ... }' - For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' - - func: used for defining a user-defined function. - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' - - if: starts an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - in: used in for-loops over stream records or out-of-stream variables. - - int: declares an integer local variable in the current curly-braced scope. - Type-checking happens at assignment: 'int x = 0.0' is an error. - - map: declares an map-valued local variable in the current curly-braced scope. - Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is - always OK. map b = a is OK or not depending on whether a is a map. - - num: declares an int/float local variable in the current curly-braced scope. - Type-checking happens at assignment: 'num b = true' is an error. - - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' - - return: specifies the return value from a user-defined function. - Omitted return statements (including via if-branches) result in an absent-null - return value, which in turns results in a skipped assignment to an LHS. - - stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. - - stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. - - str: declares a string local variable in the current curly-braced scope. - Type-checking happens at assignment. - - subr: used for defining a subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - - true: the boolean literal value. - - unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' - - var: declares an untyped local variable in the current curly-braced scope. - Examples: 'var a=1', 'var xyz=""' - - while: introduces a while loop, or with "do", introduces a do-while loop. - The body statements must be wrapped in curly braces. - - ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' - - FILENAME: evaluates to the name of the current file being processed. - - FILENUM: evaluates to the number of the current file being processed, - starting with 1. - - FNR: evaluates to the number of the current record within the current file - being processed, starting with 1. Resets at the start of each file. - - IFS: evaluates to the input field separator from the command line. - - IPS: evaluates to the input pair separator from the command line. - - IRS: evaluates to the input record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - M_E: the mathematical constant e. - - M_PI: the mathematical constant pi. - - NF: evaluates to the number of fields in the current record. - - NR: evaluates to the number of the current record over all files - being processed, starting with 1. Does not reset at the start of each file. - - OFS: evaluates to the output field separator from the command line. - - OPS: evaluates to the output pair separator from the command line. - - ORS: evaluates to the output record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - -Operator precedence ----------------------------------------------------------------- - -Operators are listed in order of decreasing precedence, highest first. - -:: - - Operators Associativity - --------- ------------- - () left to right - ** right to left - ! ~ unary+ unary- & right to left - binary* / // % left to right - binary+ binary- . left to right - << >> left to right - & left to right - ^ left to right - | left to right - < <= > >= left to right - == != =~ !=~ left to right - && left to right - ^^ left to right - || left to right - ? : right to left - = N/A for Miller (there is no $a=$b=$c) - -Operator and function semantics ----------------------------------------------------------------- - -* Functions are in general pass-throughs straight to the system-standard C library. - -* The ``min`` and ``max`` functions are different from other multi-argument functions which return null if any of their inputs are null: for ``min`` and ``max``, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string. - -* Symmetrically with respect to the bitwise OR, XOR, and AND operators ``|``, ``^``, ``&``, Miller has logical operators ``||``, ``^^``, ``&&``: the logical XOR not existing in C. - -* The exponentiation operator ``**`` is familiar from many languages. - -* The regex-match and regex-not-match operators ``=~`` and ``!=~`` are similar to those in Ruby and Perl. - -Control structures ----------------------------------------------------------------- - -Pattern-action blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are reminiscent of ``awk`` syntax. They can be used to allow assignments to be done only when appropriate -- e.g. for math-function domain restrictions, regex-matching, and so on: - -:: - - $ mlr cat data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1 - x=2 - x=3 - -:: - - $ mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - -:: - - $ mlr cat data/put-gating-example-2.dkvp - a=abc_123 - a=some other name - a=xyz_789 - -:: - - $ mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp - a=abc_123,b=left_abc,c=right_123 - a=some other name - a=xyz_789,b=left_xyz,c=right_789 - -This produces heteregenous output which Miller, of course, has no problems with (see :doc:`record-heterogeneity`). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes ``put`` to evaluate the boolean expression (along with any side effects, namely, regex-captures ``\1``, ``\2``, etc.) but doesn't use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally: - -:: - - $ mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp - x=-1,y=nan,z=nan - x=0,y=-inf,z=nan - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - -:: - - $ mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp - a=abc_123,b=left_abc,c=right_123 - a=some other name,b=left_,c=right_ - a=xyz_789,b=left_xyz,c=right_789 - -If-statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are again reminiscent of ``awk``. Pattern-action blocks are a special case of ``if`` with no ``elif`` or ``else`` blocks, no ``if`` keyword, and parentheses optional around the boolean expression: - -:: - - mlr put 'NR == 4 {$foo = "bar"}' - -:: - - mlr put 'if (NR == 4) {$foo = "bar"}' - -Compound statements use ``elif`` (rather than ``elsif`` or ``else if``): - -:: - - mlr put ' - if (NR == 2) { - ... - } elif (NR ==4) { - ... - } elif (NR ==6) { - ... - } else { - ... - } - ' - -While and do-while loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``while`` and ``do-while`` are unsurprising in comparison to various languages, as are ``break`` and ``continue``: - -:: - - $ echo x=1,y=2 | mlr put ' - while (NF < 10) { - $[NF+1] = "" - } - $foo = "bar" - ' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -:: - - $ echo x=1,y=2 | mlr put ' - do { - $[NF+1] = ""; - if (NF == 5) { - break - } - } while (NF < 10); - $foo = "bar" - ' - x=1,y=2,3=,4=,5=,foo=bar - -A ``break`` or ``continue`` within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. -The existence of ``while``, ``do-while``, and ``for`` loops in Miller's DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in ``begin`` or ``end`` blocks, and once *per record* otherwise. For example, **while (NR < 10) will never terminate as NR is only incremented between records**. - -For-loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -While Miller's ``while`` and ``do-while`` statements are much as in many other languages, ``for`` loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of ``foreach``, as in (for example) PHP. There are **for-loops over map keys** and **for-loops over key-value tuples**. Additionally, Miller has a **C-style triple-for loop** with initialize, test, and update statements. - -As with ``while`` and ``do-while``, a ``break`` or ``continue`` within nested control structures will propagate to the innermost loop enclosing them, if any, and a ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. - -Key-only for-loops -................................................................ - -The ``key`` variable is always bound to the *key* of key-value pairs: - -:: - - $ mlr --from data/small put ' - print "NR = ".NR; - for (key in $*) { - value = $[key]; - print " key:" . key . " value:".value; - } - - ' - NR = 1 - key:a value:pan - key:b value:pan - key:i value:1 - key:x value:0.346790 - key:y value:0.726803 - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - NR = 2 - key:a value:eks - key:b value:pan - key:i value:2 - key:x value:0.758680 - key:y value:0.522151 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - NR = 3 - key:a value:wye - key:b value:wye - key:i value:3 - key:x value:0.204603 - key:y value:0.338319 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - NR = 4 - key:a value:eks - key:b value:wye - key:i value:4 - key:x value:0.381399 - key:y value:0.134189 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - NR = 5 - key:a value:wye - key:b value:pan - key:i value:5 - key:x value:0.573289 - key:y value:0.863624 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr -n put ' - end { - o = {1:2, 3:{4:5}}; - for (key in o) { - print " key:" . key . " valuetype:" . typeof(o[key]); - } - } - ' - key:1 valuetype:int - key:3 valuetype:map - -Note that the value corresponding to a given key may be gotten as through a **computed field name** using square brackets as in ``$[key]`` for stream records, or by indexing the looped-over variable using square brackets. - -Key-value for-loops -................................................................ - -Single-level keys may be gotten at using either ``for(k,v)`` or ``for((k),v)``; multi-level keys may be gotten at using ``for((k1,k2,k3),v)`` and so on. The ``v`` variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn't deep enough then the loop body won't be executed. - -:: - - $ cat data/for-srec-example.tbl - label1 label2 f1 f2 f3 - blue green 100 240 350 - red green 120 11 195 - yellow blue 140 0 240 - -:: - - $ mlr --pprint --from data/for-srec-example.tbl put ' - $sum1 = $f1 + $f2 + $f3; - $sum2 = 0; - $sum3 = 0; - for (key, value in $*) { - if (key =~ "^f[0-9]+") { - $sum2 += value; - $sum3 += $[key]; - } - } - ' - label1 label2 f1 f2 f3 sum1 sum2 sum3 - blue green 100 240 350 690 690 690 - red green 120 11 195 326 326 326 - yellow blue 140 0 240 380 380 380 - -:: - - $ mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }' - a b i x y a_type b_type i_type x_type y_type - pan pan 1 0.3467901443380824 0.7268028627434533 string string int float float - eks pan 2 0.7586799647899636 0.5221511083334797 string string int float float - wye wye 3 0.20460330576630303 0.33831852551664776 string string int float float - eks wye 4 0.38139939387114097 0.13418874328430463 string string int float float - wye pan 5 0.5732889198020006 0.8636244699032729 string string int float float - -Note that the value of the current field in the for-loop can be gotten either using the bound variable ``value``, or through a **computed field name** using square brackets as in ``$[key]``. - -Important note: to avoid inconsistent looping behavior in case you're setting new fields (and/or unsetting existing ones) while looping over the record, **Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself**: - -:: - - $ mlr --from data/small --opprint put ' - $sum1 = 0; - $sum2 = 0; - for (k,v in $*) { - if (is_numeric(v)) { - $sum1 +=v; - $sum2 += $[k]; - } - } - ' - a b i x y sum1 sum2 - pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 8.294372 - eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 13.123324 - wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 14.171687 - eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 18.062353 - wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 25.747654 - -It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop: - -:: - - $ mlr --from data/small --opprint put ' - sum = 0; - for (k,v in $*) { - if (is_numeric(v)) { - sum += $[k]; - } - } - $sum = sum - ' - a b i x y sum - pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 - eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 - wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 - eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 - wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 - -You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after ``in``, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows: - -:: - - # Parentheses are optional for single key: - for (k1, v in @a["b"]["c"]) { ... } - for ((k1), v in @a["b"]["c"]) { ... } - # Parentheses are required for multiple keys: - for ((k1, k2), v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable - for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto - for ((k1, k2, k3), v in @a { ... } # Loop over variable starting from basename - for ((k1, k2, k3), v in @* { ... } # Loop over all variables (k1 is bound to basename) - -That's confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable ``@myvar`` is populated as follows: - -:: - - $ mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { dump } - ' - { - "myvar": { - 1: 2, - 3: { - 4: 5 - }, - 6: { - 7: { - 8: 9 - } - } - } - } - -Then we can get at various values as follows: - -:: - - $ mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for (k, v in @myvar) { - print - "key=" . k . - ",valuetype=" . typeof(v); - } - } - ' - key=1,valuetype=int - key=3,valuetype=map - key=6,valuetype=map - -:: - - $ mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } - ' - key1=3,key2=4,valuetype=int - key1=6,key2=7,valuetype=map - -:: - - $ mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar[6]) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } - ' - key1=7,key2=8,valuetype=int - -C-style triple-for loops -................................................................ - -These are supported as follows: - -:: - - $ mlr --from data/small --opprint put ' - num suma = 0; - for (a = 1; a <= NR; a += 1) { - suma += a; - } - $suma = suma; - ' - a b i x y suma - pan pan 1 0.3467901443380824 0.7268028627434533 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3 - wye wye 3 0.20460330576630303 0.33831852551664776 6 - eks wye 4 0.38139939387114097 0.13418874328430463 10 - wye pan 5 0.5732889198020006 0.8636244699032729 15 - -:: - - $ mlr --from data/small --opprint put ' - num suma = 0; - num sumb = 0; - for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) { - suma += a; - sumb += b; - } - $suma = suma; - $sumb = sumb; - ' - a b i x y suma sumb - pan pan 1 0.3467901443380824 0.7268028627434533 1 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3 3 - wye wye 3 0.20460330576630303 0.33831852551664776 6 7 - eks wye 4 0.38139939387114097 0.13418874328430463 10 15 - wye pan 5 0.5732889198020006 0.8636244699032729 15 31 - -Notes: - -* In ``for (start; continuation; update) { body }``, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. ``for(i=1;;i+=1)``) it defaults to true. - -* In particular, you may use ``$``-variables and/or ``@``-variables in the start, continuation, and/or update steps (as well as the body, of course). - -* The typedecls such as ``int`` or ``num`` are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified. - -* Miller has no ``++`` or ``--`` operators. - -* As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty. - -Begin/end blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller supports an ``awk``-like ``begin/end`` syntax. The statements in the ``begin`` block are executed before any input records are read; the statements in the ``end`` block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with ``begin``, you might use a pattern/action block of the form ``FNR == 1 { ... }``.) All statements outside of ``begin`` or ``end`` are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example: - -:: - - $ mlr put ' - begin { @sum = 0 }; - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - x_sum=4.536294 - -Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (not quite as in ``awk``, where they'd default to 0 either way), the above can be written more succinctly as - -:: - - $ mlr put ' - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - x_sum=4.536294 - -The **put -q** option is a shorthand which suppresses printing of each output record, with only ``emit`` statements being output. So to get only summary outputs, one could write - -:: - - $ mlr put -q ' - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - x_sum=4.536294 - -We can do similarly with multiple out-of-stream variables: - -:: - - $ mlr put -q ' - @x_count += 1; - @x_sum += $x; - end { - emit @x_count; - emit @x_sum; - } - ' ../data/small - x_count=10 - x_sum=4.536294 - -This is of course not much different than - -:: - - $ mlr stats1 -a count,sum -f x ../data/small - x_count=10,x_sum=4.536294 - -Note that it's a syntax error for begin/end blocks to refer to field names (beginning with ``$``), since these execute outside the context of input records. - -Output statements ----------------------------------------------------------------- - -You can **output** variable-values or expressions in **five ways**: - -* **Assign** them to stream-record fields. For example, ``$cumulative_sum = @sum``. For another example, ``$nr = NR`` adds a field named ``nr`` to each output record, containing the value of the built-in variable ``NR`` as of when that record was ingested. - -* Use the **print** or **eprint** keywords which immediately print an expression *directly to standard output or standard error*, respectively. Note that ``dump``, ``edump``, ``print``, and ``eprint`` don't output records which participate in ``then``-chaining; rather, they're just immediate prints to stdout/stderr. The ``printn`` and ``eprintn`` keywords are the same except that they don't print final newlines. Additionally, you can print to a specified file instead of stdout/stderr. - -* Use the **dump** or **edump** keywords, which *immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error* (respectively). - -* Use **tee** which formats the current stream record (not just an arbitrary string as with **print**) to a specific file. - -* Use **emit**/**emitp**/**emitf** to send out-of-stream variables' current values to the output record stream, e.g. ``@sum += $x; emit @sum`` which produces an extra output record such as ``sum=3.1648382``. - -For the first two options you are populating the output-records stream which feeds into the next verb in a ``then``-chain (if any), or which otherwise is formatted for output using ``--o...`` flags. - -For the last three options you are sending output directly to standard output, standard error, or a file. - -.. _reference-dsl-print-statements: - -Print statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``print`` statement is perhaps self-explanatory, but with a few light caveats: - -* There are four variants: ``print`` goes to stdout with final newline, ``printn`` goes to stdout without final newline (you can include one using "\n" in your output string), ``eprint`` goes to stderr with final newline, and ``eprintn`` goes to stderr without final newline. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* Print statements are for strings (``print "hello"``), or things which can be made into strings: numbers (``print 3``, ``print $a + $b``, or concatenations thereof (``print "a + b = " . ($a + $b)``). Maps (in ``$*``, map-valued out-of-stream or local variables, and map literals) aren't convertible into strings. If you print a map, you get ``{is-a-map}`` as output. Please use ``dump`` to print maps. - -* You can redirect print output to a file: ``mlr --from myfile.dat put 'print > "tap.txt", $x'`` ``mlr --from myfile.dat put 'o=$*; print > $a.".txt", $x'``. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-dump-statements: - -Dump statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``dump`` statement is for printing expressions, including maps, directly to stdout/stderr, respectively: - -* There are two variants: ``dump`` prints to stdout; ``edump`` prints to stderr. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* You can use ``dump`` to output single strings, numbers, or expressions including map-valued data. Map-valued data are printed as JSON. Miller allows string and integer keys in its map literals while JSON allows only string keys, so use ``mlr put --jknquoteint`` if you want integer-valued map keys not double-quoted. - -* If you use ``dump`` (or ``edump``) with no arguments, you get a JSON structure representing the current values of all out-of-stream variables. - -* As with ``print``, you can redirect output to files. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -Tee statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Records produced by a ``mlr put`` go downstream to the next verb in your ``then``-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using ``tee``. - -The syntax is, by example, ``mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index``. First is ``tee >``, then the filename expression (which can be an expression such as ``"tap.".$a.".dat"``), then a comma, then ``$*``. (Nothing else but ``$*`` is teeable.) - -See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-redirected-output-statements: - -Redirected-output statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The **print**, **dump** **tee**, **emitf**, **emit**, and **emitp** keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on. - -Details: - -* The ``print`` and ``dump`` keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present. - -:: - - $ mlr --help-keyword print - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - -:: - - $ mlr --help-keyword dump - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - -* ``mlr put`` sends the current record (possibly modified by the ``put`` expression) to the output record stream. Records are then input to the following verb in a ``then``-chain (if any), else printed to standard output (unless ``put -q``). The **tee** keyword *additionally* writes the output record to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -:: - - $ mlr --help-keyword tee - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - -* ``mlr put``'s ``emitf``, ``emitp``, and ``emit`` send out-of-stream variables to the output record stream. These are then input to the following verb in a ``then``-chain (if any), else printed to standard output. When redirected with ``>``, ``>>``, or ``|``, they *instead* write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -:: - - $ mlr --help-keyword emitf - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - -:: - - $ mlr --help-keyword emitp - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - -:: - - $ mlr --help-keyword emit - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - -.. _reference-dsl-emit-statements: - -Emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three variants: ``emitf``, ``emit``, and ``emitp``. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using ``dump``), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including ``$*``, map-valued out-of-stream variables, the entire out-of-stream-variable collection ``@*``, map-valued local variables, map literals, or map-valued function return values. - -Use **emitf** to output several out-of-stream variables side-by-side in the same output record. For ``emitf`` these mustn't have indexing using ``@name[...]``. Example: - -:: - - $ mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small - count=5,x_sum=2.264762,y_sum=2.585086 - -Use **emit** to output an out-of-stream variable. If it's non-indexed you'll get a simple key-value pair: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put -q '@sum += $x; end { dump }' data/small - { - "sum": 2.264762 - } - -:: - - $ mlr put -q '@sum += $x; end { emit @sum }' data/small - sum=2.264762 - -If it's indexed then use as many names after ``emit`` as there are indices: - -:: - - $ mlr put -q '@sum[$a] += $x; end { dump }' data/small - { - "sum": { - "pan": 0.346790, - "eks": 1.140079, - "wye": 0.777892 - } - } - -:: - - $ mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small - a=pan,sum=0.346790 - a=eks,sum=1.140079 - a=wye,sum=0.777892 - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small - a=pan,b=pan,sum=0.346790 - a=eks,b=pan,sum=0.758680 - a=eks,b=wye,sum=0.381399 - a=wye,b=wye,sum=0.204603 - a=wye,b=pan,sum=0.573289 - -:: - - $ mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": { - "1": 0.346790 - } - }, - "eks": { - "pan": { - "2": 0.758680 - }, - "wye": { - "4": 0.381399 - } - }, - "wye": { - "wye": { - "3": 0.204603 - }, - "pan": { - "5": 0.573289 - } - } - } - } - -:: - - $ mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small - a=pan,b=pan,i=1,sum=0.346790 - a=eks,b=pan,i=2,sum=0.758680 - a=eks,b=wye,i=4,sum=0.381399 - a=wye,b=wye,i=3,sum=0.204603 - a=wye,b=pan,i=5,sum=0.573289 - -Now for **emitp**: if you have as many names following ``emit`` as there are levels in the out-of-stream variable's hashmap, then ``emit`` and ``emitp`` do the same thing. Where they differ is when you don't specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: ``emitp`` includes full prefixing (hence the ``p`` in ``emitp``) while ``emit`` takes the deepest hashmap key as the output-record key: - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small - a=pan,pan=0.346790 - a=eks,pan=0.758680,wye=0.381399 - a=wye,wye=0.204603,pan=0.573289 - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small - pan=0.346790 - pan=0.758680,wye=0.381399 - wye=0.204603,pan=0.573289 - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small - a=pan,sum:pan=0.346790 - a=eks,sum:pan=0.758680,sum:wye=0.381399 - a=wye,sum:wye=0.204603,sum:pan=0.573289 - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum:pan:pan=0.346790,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:wye:wye=0.204603,sum:wye:pan=0.573289 - -:: - - $ mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum:pan:pan 0.346790 - sum:eks:pan 0.758680 - sum:eks:wye 0.381399 - sum:wye:wye 0.204603 - sum:wye:pan 0.573289 - -Use **--oflatsep** to specify the character which joins multilevel -keys for ``emitp`` (it defaults to a colon): - -:: - - $ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small - a=pan,sum/pan=0.346790 - a=eks,sum/pan=0.758680,sum/wye=0.381399 - a=wye,sum/wye=0.204603,sum/pan=0.573289 - -:: - - $ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum/pan/pan=0.346790,sum/eks/pan=0.758680,sum/eks/wye=0.381399,sum/wye/wye=0.204603,sum/wye/pan=0.573289 - -:: - - $ mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum/pan/pan 0.346790 - sum/eks/pan 0.758680 - sum/eks/wye 0.381399 - sum/wye/wye 0.204603 - sum/wye/pan 0.573289 - -Multi-emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can emit **multiple map-valued expressions side-by-side** by -including their names in parentheses: - -:: - - $ mlr --from data/medium --opprint put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - for ((a, b), _ in @x_count) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b] - } - emit (@x_sum, @x_count, @x_mean), "a", "b" - } - ' - a b x_sum x_count x_mean - pan pan 219.185129 427 0.513314 - pan wye 198.432931 395 0.502362 - pan eks 216.075228 429 0.503672 - pan hat 205.222776 417 0.492141 - pan zee 205.097518 413 0.496604 - eks pan 179.963030 371 0.485076 - eks wye 196.945286 407 0.483895 - eks zee 176.880365 357 0.495463 - eks eks 215.916097 413 0.522799 - eks hat 208.783171 417 0.500679 - wye wye 185.295850 377 0.491501 - wye pan 195.847900 392 0.499612 - wye hat 212.033183 426 0.497730 - wye zee 194.774048 385 0.505907 - wye eks 204.812961 386 0.530604 - zee pan 202.213804 389 0.519830 - zee wye 233.991394 455 0.514267 - zee eks 190.961778 391 0.488393 - zee zee 206.640635 403 0.512756 - zee hat 191.300006 409 0.467726 - hat wye 208.883010 423 0.493813 - hat zee 196.349450 385 0.509999 - hat eks 189.006793 389 0.485879 - hat hat 182.853532 381 0.479931 - hat pan 168.553807 363 0.464336 - -What this does is walk through the first out-of-stream variable (``@x_sum`` in this example) as usual, then for each keylist found (e.g. ``pan,wye``), include the values for the remaining out-of-stream variables (here, ``@x_count`` and ``@x_mean``). You should use this when all out-of-stream variables in the emit statement have **the same shape and the same keylists**. - -Emit-all statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use **emit all** (or ``emit @*`` which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of ``mlr stats1``): - -:: - - $ mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}' - a b sum count - pan pan 0.346790 1 - eks pan 0.758680 1 - eks wye 0.381399 1 - wye wye 0.204603 1 - wye pan 0.573289 1 - -:: - - $ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}' - a b sum - pan pan 0.346790 - eks pan 0.758680 - eks wye 0.381399 - wye wye 0.204603 - wye pan 0.573289 - - a b count - pan pan 1 - eks pan 1 - eks wye 1 - wye wye 1 - wye pan 1 - -:: - - $ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}' - a b sum count - pan pan 0.346790 1 - eks pan 0.758680 1 - eks wye 0.381399 1 - wye wye 0.204603 1 - wye pan 0.573289 1 - -Unset statements ----------------------------------------------------------------- - -You can clear a map key by assigning the empty string as its value: ``$x=""`` or ``@x=""``. Using ``unset`` you can remove the key entirely. Examples: - -:: - - $ cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put 'unset $x, $a' data/small - b=pan,i=1,y=0.7268028627434533 - b=pan,i=2,y=0.5221511083334797 - b=wye,i=3,y=0.33831852551664776 - b=wye,i=4,y=0.13418874328430463 - b=pan,i=5,y=0.8636244699032729 - -This can also be done, of course, using ``mlr cut -x``. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel: - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - { - } - -:: - - $ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -If you use ``unset all`` (or ``unset @*`` which is synonymous), that will unset all out-of-stream variables which have been defined up to that point. - -Filter statements ----------------------------------------------------------------- - -You can use ``filter`` within ``put``. In fact, the following two are synonymous: - -:: - - $ mlr filter 'NR==2 || NR==3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -:: - - $ mlr put 'filter NR==2 || NR==3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter: - -:: - - $ mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -:: - - $ mlr put '$z = $x * $y; filter $z > 0.3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.396146 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.495106 - -Built-in functions for filter and put, summary ----------------------------------------------------------------- - -+----------------------------+------------+----------+ -| ``Name`` | Class | #Args | -+============================+============+==========+ -| ``+`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``+`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``-`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``-`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``*`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``/`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``//`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.+`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.+`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``.-`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.-`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``.*`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``./`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.//`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``%`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``**`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``|`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``^`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``&`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``~`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``<<`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``>>`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``bitcount`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``==`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``=~`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!=~`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``>`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``>=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``<`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``<=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``&&`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``||`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``^^`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!`` | boolean | 1 | -+----------------------------+------------+----------+ -| ``? :`` | boolean | 3 | -+----------------------------+------------+----------+ -| ``.`` | string | 2 | -+----------------------------+------------+----------+ -| ``gsub`` | string | 3 | -+----------------------------+------------+----------+ -| ``regextract`` | string | 2 | -+----------------------------+------------+----------+ -| ``regextract_or_else`` | string | 3 | -+----------------------------+------------+----------+ -| ``strlen`` | string | 1 | -+----------------------------+------------+----------+ -| ``sub`` | string | 3 | -+----------------------------+------------+----------+ -| ``ssub`` | string | 3 | -+----------------------------+------------+----------+ -| ``substr`` | string | 3 | -+----------------------------+------------+----------+ -| ``tolower`` | string | 1 | -+----------------------------+------------+----------+ -| ``toupper`` | string | 1 | -+----------------------------+------------+----------+ -| ``truncate`` | string | 2 | -+----------------------------+------------+----------+ -| ``capitalize`` | string | 1 | -+----------------------------+------------+----------+ -| ``lstrip`` | string | 1 | -+----------------------------+------------+----------+ -| ``rstrip`` | string | 1 | -+----------------------------+------------+----------+ -| ``strip`` | string | 1 | -+----------------------------+------------+----------+ -| ``collapse_whitespace`` | string | 1 | -+----------------------------+------------+----------+ -| ``clean_whitespace`` | string | 1 | -+----------------------------+------------+----------+ -| ``system`` | string | 1 | -+----------------------------+------------+----------+ -| ``abs`` | math | 1 | -+----------------------------+------------+----------+ -| ``acos`` | math | 1 | -+----------------------------+------------+----------+ -| ``acosh`` | math | 1 | -+----------------------------+------------+----------+ -| ``asin`` | math | 1 | -+----------------------------+------------+----------+ -| ``asinh`` | math | 1 | -+----------------------------+------------+----------+ -| ``atan`` | math | 1 | -+----------------------------+------------+----------+ -| ``atan2`` | math | 2 | -+----------------------------+------------+----------+ -| ``atanh`` | math | 1 | -+----------------------------+------------+----------+ -| ``cbrt`` | math | 1 | -+----------------------------+------------+----------+ -| ``ceil`` | math | 1 | -+----------------------------+------------+----------+ -| ``cos`` | math | 1 | -+----------------------------+------------+----------+ -| ``cosh`` | math | 1 | -+----------------------------+------------+----------+ -| ``erf`` | math | 1 | -+----------------------------+------------+----------+ -| ``erfc`` | math | 1 | -+----------------------------+------------+----------+ -| ``exp`` | math | 1 | -+----------------------------+------------+----------+ -| ``expm1`` | math | 1 | -+----------------------------+------------+----------+ -| ``floor`` | math | 1 | -+----------------------------+------------+----------+ -| ``invqnorm`` | math | 1 | -+----------------------------+------------+----------+ -| ``log`` | math | 1 | -+----------------------------+------------+----------+ -| ``log10`` | math | 1 | -+----------------------------+------------+----------+ -| ``log1p`` | math | 1 | -+----------------------------+------------+----------+ -| ``logifit`` | math | 3 | -+----------------------------+------------+----------+ -| ``madd`` | math | 3 | -+----------------------------+------------+----------+ -| ``max`` | math | variadic | -+----------------------------+------------+----------+ -| ``mexp`` | math | 3 | -+----------------------------+------------+----------+ -| ``min`` | math | variadic | -+----------------------------+------------+----------+ -| ``mmul`` | math | 3 | -+----------------------------+------------+----------+ -| ``msub`` | math | 3 | -+----------------------------+------------+----------+ -| ``pow`` | math | 2 | -+----------------------------+------------+----------+ -| ``qnorm`` | math | 1 | -+----------------------------+------------+----------+ -| ``round`` | math | 1 | -+----------------------------+------------+----------+ -| ``roundm`` | math | 2 | -+----------------------------+------------+----------+ -| ``sgn`` | math | 1 | -+----------------------------+------------+----------+ -| ``sin`` | math | 1 | -+----------------------------+------------+----------+ -| ``sinh`` | math | 1 | -+----------------------------+------------+----------+ -| ``sqrt`` | math | 1 | -+----------------------------+------------+----------+ -| ``tan`` | math | 1 | -+----------------------------+------------+----------+ -| ``tanh`` | math | 1 | -+----------------------------+------------+----------+ -| ``urand`` | math | 0 | -+----------------------------+------------+----------+ -| ``urandrange`` | math | 2 | -+----------------------------+------------+----------+ -| ``urand32`` | math | 0 | -+----------------------------+------------+----------+ -| ``urandint`` | math | 2 | -+----------------------------+------------+----------+ -| ``dhms2fsec`` | time | 1 | -+----------------------------+------------+----------+ -| ``dhms2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``fsec2dhms`` | time | 1 | -+----------------------------+------------+----------+ -| ``fsec2hms`` | time | 1 | -+----------------------------+------------+----------+ -| ``gmt2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``localtime2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``hms2fsec`` | time | 1 | -+----------------------------+------------+----------+ -| ``hms2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2dhms`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2gmt`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2gmt`` | time | 2 | -+----------------------------+------------+----------+ -| ``sec2gmtdate`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2localtime`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2localtime`` | time | 2 | -+----------------------------+------------+----------+ -| ``sec2localdate`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2hms`` | time | 1 | -+----------------------------+------------+----------+ -| ``strftime`` | time | 2 | -+----------------------------+------------+----------+ -| ``strftime_local`` | time | 2 | -+----------------------------+------------+----------+ -| ``strptime`` | time | 2 | -+----------------------------+------------+----------+ -| ``strptime_local`` | time | 2 | -+----------------------------+------------+----------+ -| ``systime`` | time | 0 | -+----------------------------+------------+----------+ -| ``is_absent`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_bool`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_boolean`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_empty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_float`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_int`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_nonempty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_numeric`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_present`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_string`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_absent`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_bool`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_boolean`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_empty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_float`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_int`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_nonempty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_numeric`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_present`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_string`` | typing | 1 | -+----------------------------+------------+----------+ -| ``boolean`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``float`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``fmtnum`` | conversion | 2 | -+----------------------------+------------+----------+ -| ``hexfmt`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``int`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``string`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``typeof`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``depth`` | maps | 1 | -+----------------------------+------------+----------+ -| ``haskey`` | maps | 2 | -+----------------------------+------------+----------+ -| ``joink`` | maps | 2 | -+----------------------------+------------+----------+ -| ``joinkv`` | maps | 3 | -+----------------------------+------------+----------+ -| ``joinv`` | maps | 2 | -+----------------------------+------------+----------+ -| ``leafcount`` | maps | 1 | -+----------------------------+------------+----------+ -| ``length`` | maps | 1 | -+----------------------------+------------+----------+ -| ``mapdiff`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapexcept`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapselect`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapsum`` | maps | variadic | -+----------------------------+------------+----------+ -| ``splitkv`` | maps | 3 | -+----------------------------+------------+----------+ -| ``splitkvx`` | maps | 3 | -+----------------------------+------------+----------+ -| ``splitnv`` | maps | 2 | -+----------------------------+------------+----------+ -| ``splitnvx`` | maps | 2 | -+----------------------------+------------+----------+ - -Built-in functions for filter and put ----------------------------------------------------------------- - -Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as ``min`` and ``max``. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference. - -You can get a list of all functions using **mlr -F**. - - -.. _reference-dsl-plus: - -\+ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - + (class=arithmetic #args=2): Addition. - - + (class=arithmetic #args=1): Unary plus. - - - -.. _reference-dsl-minus: - -\- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - - (class=arithmetic #args=2): Subtraction. - - - (class=arithmetic #args=1): Unary minus. - - - -.. _reference-dsl-times: - -\* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - * (class=arithmetic #args=2): Multiplication. - - - -.. _reference-dsl-/: - -/ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - / (class=arithmetic #args=2): Division. - - - -.. _reference-dsl-//: - -// -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - // (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). - - - -.. _reference-dsl-.+: - -.+ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .+ (class=arithmetic #args=2): Addition, with integer-to-integer overflow - - .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. - - - -.. _reference-dsl-.-: - -.- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .- (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - - .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. - - - -.. _reference-dsl-.*: - -.* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .* (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. - - - -.. _reference-dsl-./: - -./ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ./ (class=arithmetic #args=2): Division, with integer-to-integer overflow. - - - -.. _reference-dsl-.//: - -.// -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. - - - -.. _reference-dsl-%: - -% -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - % (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). - - - -.. _reference-dsl-exponentiation: - -\** -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ** (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix - operator. - - - -.. _reference-dsl-bitwise-or: - -\| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - | (class=arithmetic #args=2): Bitwise OR. - - - -.. _reference-dsl-^: - -^ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ^ (class=arithmetic #args=2): Bitwise XOR. - - - -.. _reference-dsl-&: - -& -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - & (class=arithmetic #args=2): Bitwise AND. - - - -.. _reference-dsl-~: - -~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ~ (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the - regex-match operator: try '$y = ~$x'. - - - -.. _reference-dsl-<<: - -<< -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - << (class=arithmetic #args=2): Bitwise left-shift. - - - -.. _reference-dsl->>: - ->> -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - >> (class=arithmetic #args=2): Bitwise right-shift. - - - -.. _reference-dsl-==: - -== -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - == (class=boolean #args=2): String/numeric equality. Mixing number and string - results in string compare. - - - -.. _reference-dsl-!=: - -!= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - != (class=boolean #args=2): String/numeric inequality. Mixing number and string - results in string compare. - - - -.. _reference-dsl-=~: - -=~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - =~ (class=boolean #args=2): String (left-hand side) matches regex (right-hand - side), e.g. '$name =~ "^a.*b$"'. - - - -.. _reference-dsl-!=~: - -!=~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - !=~ (class=boolean #args=2): String (left-hand side) does not match regex - (right-hand side), e.g. '$name !=~ "^a.*b$"'. - - - -.. _reference-dsl->: - -> -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - > (class=boolean #args=2): String/numeric greater-than. Mixing number and string - results in string compare. - - - -.. _reference-dsl->=: - ->= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - >= (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number - and string results in string compare. - - - -.. _reference-dsl-<: - -< -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - < (class=boolean #args=2): String/numeric less-than. Mixing number and string - results in string compare. - - - -.. _reference-dsl-<=: - -<= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - <= (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number - and string results in string compare. - - - -.. _reference-dsl-&&: - -&& -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - && (class=boolean #args=2): Logical AND. - - - -.. _reference-dsl-||: - -|| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - || (class=boolean #args=2): Logical OR. - - - -.. _reference-dsl-^^: - -^^ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ^^ (class=boolean #args=2): Logical XOR. - - - -.. _reference-dsl-!: - -! -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ! (class=boolean #args=1): Logical negation. - - - -.. _reference-dsl-question-mark-colon: - -\? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ? : (class=boolean #args=3): Ternary operator. - - - -.. _reference-dsl-.: - -. -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - . (class=string #args=2): String concatenation. - - - -.. _reference-dsl-abs: - -abs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - abs (class=math #args=1): Absolute value. - - - -.. _reference-dsl-acos: - -acos -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - acos (class=math #args=1): Inverse trigonometric cosine. - - - -.. _reference-dsl-acosh: - -acosh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - acosh (class=math #args=1): Inverse hyperbolic cosine. - - - -.. _reference-dsl-asin: - -asin -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asin (class=math #args=1): Inverse trigonometric sine. - - - -.. _reference-dsl-asinh: - -asinh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asinh (class=math #args=1): Inverse hyperbolic sine. - - - -.. _reference-dsl-asserting_absent: - -asserting_absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_absent (class=typing #args=1): Returns argument if it is absent in the input data, else - throws an error. - - - -.. _reference-dsl-asserting_bool: - -asserting_bool -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_bool (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - - -.. _reference-dsl-asserting_boolean: - -asserting_boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_boolean (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - - -.. _reference-dsl-asserting_empty: - -asserting_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_empty (class=typing #args=1): Returns argument if it is present in input with empty value, - else throws an error. - - - -.. _reference-dsl-asserting_empty_map: - -asserting_empty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_empty_map (class=typing #args=1): Returns argument if it is a map with empty value, else - throws an error. - - - -.. _reference-dsl-asserting_float: - -asserting_float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_float (class=typing #args=1): Returns argument if it is present with float value, else - throws an error. - - - -.. _reference-dsl-asserting_int: - -asserting_int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_int (class=typing #args=1): Returns argument if it is present with int value, else - throws an error. - - - -.. _reference-dsl-asserting_map: - -asserting_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_map (class=typing #args=1): Returns argument if it is a map, else throws an error. - - - -.. _reference-dsl-asserting_nonempty_map: - -asserting_nonempty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_nonempty_map (class=typing #args=1): Returns argument if it is a non-empty map, else throws - an error. - - - -.. _reference-dsl-asserting_not_empty: - -asserting_not_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_empty (class=typing #args=1): Returns argument if it is present in input with non-empty - value, else throws an error. - - - -.. _reference-dsl-asserting_not_map: - -asserting_not_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_map (class=typing #args=1): Returns argument if it is not a map, else throws an error. - - - -.. _reference-dsl-asserting_not_null: - -asserting_not_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_null (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), - else throws an error. - - - -.. _reference-dsl-asserting_null: - -asserting_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_null (class=typing #args=1): Returns argument if it is null (empty or absent), else throws - an error. - - - -.. _reference-dsl-asserting_numeric: - -asserting_numeric -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_numeric (class=typing #args=1): Returns argument if it is present with int or float value, - else throws an error. - - - -.. _reference-dsl-asserting_present: - -asserting_present -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_present (class=typing #args=1): Returns argument if it is present in input, else throws - an error. - - - -.. _reference-dsl-asserting_string: - -asserting_string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_string (class=typing #args=1): Returns argument if it is present with string (including - empty-string) value, else throws an error. - - - -.. _reference-dsl-atan: - -atan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atan (class=math #args=1): One-argument arctangent. - - - -.. _reference-dsl-atan2: - -atan2 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atan2 (class=math #args=2): Two-argument arctangent. - - - -.. _reference-dsl-atanh: - -atanh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atanh (class=math #args=1): Inverse hyperbolic tangent. - - - -.. _reference-dsl-bitcount: - -bitcount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - bitcount (class=arithmetic #args=1): Count of 1-bits - - - -.. _reference-dsl-boolean: - -boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - boolean (class=conversion #args=1): Convert int/float/bool/string to boolean. - - - -.. _reference-dsl-capitalize: - -capitalize -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - capitalize (class=string #args=1): Convert string's first character to uppercase. - - - -.. _reference-dsl-cbrt: - -cbrt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cbrt (class=math #args=1): Cube root. - - - -.. _reference-dsl-ceil: - -ceil -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ceil (class=math #args=1): Ceiling: nearest integer at or above. - - - -.. _reference-dsl-clean_whitespace: - -clean_whitespace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - clean_whitespace (class=string #args=1): Same as collapse_whitespace and strip. - - - -.. _reference-dsl-collapse_whitespace: - -collapse_whitespace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - collapse_whitespace (class=string #args=1): Strip repeated whitespace from string. - - - -.. _reference-dsl-cos: - -cos -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cos (class=math #args=1): Trigonometric cosine. - - - -.. _reference-dsl-cosh: - -cosh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cosh (class=math #args=1): Hyperbolic cosine. - - - -.. _reference-dsl-depth: - -depth -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - depth (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. - - - -.. _reference-dsl-dhms2fsec: - -dhms2fsec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - dhms2fsec (class=time #args=1): Recovers floating-point seconds as in - dhms2fsec("5d18h53m20.250000s") = 500000.250000 - - - -.. _reference-dsl-dhms2sec: - -dhms2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - dhms2sec (class=time #args=1): Recovers integer seconds as in - dhms2sec("5d18h53m20s") = 500000 - - - -.. _reference-dsl-erf: - -erf -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - erf (class=math #args=1): Error function. - - - -.. _reference-dsl-erfc: - -erfc -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - erfc (class=math #args=1): Complementary error function. - - - -.. _reference-dsl-exp: - -exp -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - exp (class=math #args=1): Exponential function e**x. - - - -.. _reference-dsl-expm1: - -expm1 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - expm1 (class=math #args=1): e**x - 1. - - - -.. _reference-dsl-float: - -float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - float (class=conversion #args=1): Convert int/float/bool/string to float. - - - -.. _reference-dsl-floor: - -floor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - floor (class=math #args=1): Floor: nearest integer at or below. - - - -.. _reference-dsl-fmtnum: - -fmtnum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fmtnum (class=conversion #args=2): Convert int/float/bool to string using - printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers - are all long long or double. If you use formats like %d or %f, behavior is undefined. - - - -.. _reference-dsl-fsec2dhms: - -fsec2dhms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fsec2dhms (class=time #args=1): Formats floating-point seconds as in - fsec2dhms(500000.25) = "5d18h53m20.250000s" - - - -.. _reference-dsl-fsec2hms: - -fsec2hms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fsec2hms (class=time #args=1): Formats floating-point seconds as in - fsec2hms(5000.25) = "01:23:20.250000" - - - -.. _reference-dsl-gmt2sec: - -gmt2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - gmt2sec (class=time #args=1): Parses GMT timestamp as integer seconds since - the epoch. - - - -.. _reference-dsl-gsub: - -gsub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - gsub (class=string #args=3): Example: '$name=gsub($name, "old", "new")' - (replace all). - - - -.. _reference-dsl-haskey: - -haskey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - haskey (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or - 'haskey(mymap, mykey)'. Error if 1st argument is not a map. - - - -.. _reference-dsl-hexfmt: - -hexfmt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hexfmt (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". - - - -.. _reference-dsl-hms2fsec: - -hms2fsec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hms2fsec (class=time #args=1): Recovers floating-point seconds as in - hms2fsec("01:23:20.250000") = 5000.250000 - - - -.. _reference-dsl-hms2sec: - -hms2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hms2sec (class=time #args=1): Recovers integer seconds as in - hms2sec("01:23:20") = 5000 - - - -.. _reference-dsl-int: - -int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - int (class=conversion #args=1): Convert int/float/bool/string to int. - - - -.. _reference-dsl-invqnorm: - -invqnorm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - invqnorm (class=math #args=1): Inverse of normal cumulative distribution - function. Note that invqorm(urand()) is normally distributed. - - - -.. _reference-dsl-is_absent: - -is_absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_absent (class=typing #args=1): False if field is present in input, true otherwise - - - -.. _reference-dsl-is_bool: - -is_bool -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_bool (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. - - - -.. _reference-dsl-is_boolean: - -is_boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_boolean (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. - - - -.. _reference-dsl-is_empty: - -is_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_empty (class=typing #args=1): True if field is present in input with empty string value, false otherwise. - - - -.. _reference-dsl-is_empty_map: - -is_empty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_empty_map (class=typing #args=1): True if argument is a map which is empty. - - - -.. _reference-dsl-is_float: - -is_float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_float (class=typing #args=1): True if field is present with value inferred to be float - - - -.. _reference-dsl-is_int: - -is_int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_int (class=typing #args=1): True if field is present with value inferred to be int - - - -.. _reference-dsl-is_map: - -is_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_map (class=typing #args=1): True if argument is a map. - - - -.. _reference-dsl-is_nonempty_map: - -is_nonempty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_nonempty_map (class=typing #args=1): True if argument is a map which is non-empty. - - - -.. _reference-dsl-is_not_empty: - -is_not_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_empty (class=typing #args=1): False if field is present in input with empty value, true otherwise - - - -.. _reference-dsl-is_not_map: - -is_not_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_map (class=typing #args=1): True if argument is not a map. - - - -.. _reference-dsl-is_not_null: - -is_not_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_null (class=typing #args=1): False if argument is null (empty or absent), true otherwise. - - - -.. _reference-dsl-is_null: - -is_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_null (class=typing #args=1): True if argument is null (empty or absent), false otherwise. - - - -.. _reference-dsl-is_numeric: - -is_numeric -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_numeric (class=typing #args=1): True if field is present with value inferred to be int or float - - - -.. _reference-dsl-is_present: - -is_present -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_present (class=typing #args=1): True if field is present in input, false otherwise. - - - -.. _reference-dsl-is_string: - -is_string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_string (class=typing #args=1): True if field is present with string (including empty-string) value - - - -.. _reference-dsl-joink: - -joink -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joink (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. - - - -.. _reference-dsl-joinkv: - -joinkv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joinkv (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' - - - -.. _reference-dsl-joinv: - -joinv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joinv (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. - - - -.. _reference-dsl-leafcount: - -leafcount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - leafcount (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, - same as length. - - - -.. _reference-dsl-length: - -length -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - length (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. - - - -.. _reference-dsl-localtime2sec: - -localtime2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - localtime2sec (class=time #args=1): Parses local timestamp as integer seconds since - the epoch. Consults $TZ environment variable. - - - -.. _reference-dsl-log: - -log -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log (class=math #args=1): Natural (base-e) logarithm. - - - -.. _reference-dsl-log10: - -log10 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log10 (class=math #args=1): Base-10 logarithm. - - - -.. _reference-dsl-log1p: - -log1p -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log1p (class=math #args=1): log(1-x). - - - -.. _reference-dsl-logifit: - -logifit -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - logifit (class=math #args=3): Given m and b from logistic regression, compute - fit: $yhat=logifit($x,$m,$b). - - - -.. _reference-dsl-lstrip: - -lstrip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - lstrip (class=string #args=1): Strip leading whitespace from string. - - - -.. _reference-dsl-madd: - -madd -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - madd (class=math #args=3): a + b mod m (integers) - - - -.. _reference-dsl-mapdiff: - -mapdiff -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapdiff (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. - With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. - - - -.. _reference-dsl-mapexcept: - -mapexcept -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapexcept (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. - E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. - - - -.. _reference-dsl-mapselect: - -mapselect -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapselect (class=maps variadic): Returns a map with only keys from remaining arguments set. - E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. - - - -.. _reference-dsl-mapsum: - -mapsum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapsum (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with - key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. - - - -.. _reference-dsl-max: - -max -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - max (class=math variadic): max of n numbers; null loses - - - -.. _reference-dsl-mexp: - -mexp -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mexp (class=math #args=3): a ** b mod m (integers) - - - -.. _reference-dsl-min: - -min -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - min (class=math variadic): Min of n numbers; null loses - - - -.. _reference-dsl-mmul: - -mmul -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mmul (class=math #args=3): a * b mod m (integers) - - - -.. _reference-dsl-msub: - -msub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - msub (class=math #args=3): a - b mod m (integers) - - - -.. _reference-dsl-pow: - -pow -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - pow (class=math #args=2): Exponentiation; same as **. - - - -.. _reference-dsl-qnorm: - -qnorm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - qnorm (class=math #args=1): Normal cumulative distribution function. - - - -.. _reference-dsl-regextract: - -regextract -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - regextract (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' - . - - - -.. _reference-dsl-regextract_or_else: - -regextract_or_else -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - regextract_or_else (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' - . - - - -.. _reference-dsl-round: - -round -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - round (class=math #args=1): Round to nearest integer. - - - -.. _reference-dsl-roundm: - -roundm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - roundm (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is - the same as round($x/$m)*$m - - - -.. _reference-dsl-rstrip: - -rstrip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - rstrip (class=string #args=1): Strip trailing whitespace from string. - - - -.. _reference-dsl-sec2dhms: - -sec2dhms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2dhms (class=time #args=1): Formats integer seconds as in sec2dhms(500000) - = "5d18h53m20s" - - - -.. _reference-dsl-sec2gmt: - -sec2gmt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2gmt (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". - Leaves non-numbers as-is. - - sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n - decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2gmtdate: - -sec2gmtdate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2gmtdate (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". - Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2hms: - -sec2hms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2hms (class=time #args=1): Formats integer seconds as in - sec2hms(5000) = "01:23:20" - - - -.. _reference-dsl-sec2localdate: - -sec2localdate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2localdate (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". - Consults $TZ environment variable. Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2localtime: - -sec2localtime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2localtime (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n - decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - - -.. _reference-dsl-sgn: - -sgn -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sgn (class=math #args=1): +1 for positive input, 0 for zero input, -1 for - negative input. - - - -.. _reference-dsl-sin: - -sin -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sin (class=math #args=1): Trigonometric sine. - - - -.. _reference-dsl-sinh: - -sinh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sinh (class=math #args=1): Hyperbolic sine. - - - -.. _reference-dsl-splitkv: - -splitkv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitkv (class=maps #args=3): Splits string by separators into map with type inference. - E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. - - - -.. _reference-dsl-splitkvx: - -splitkvx -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitkvx (class=maps #args=3): Splits string by separators into map without type inference (keys and - values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives - '{"a" : "1", "b" : "2", "c" : "3"}'. - - - -.. _reference-dsl-splitnv: - -splitnv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitnv (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. - E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. - - - -.. _reference-dsl-splitnvx: - -splitnvx -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitnvx (class=maps #args=2): Splits string by separator into integer-indexed map without type - inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. - - - -.. _reference-dsl-sqrt: - -sqrt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sqrt (class=math #args=1): Square root. - - - -.. _reference-dsl-ssub: - -ssub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ssub (class=string #args=3): Like sub but does no regexing. No characters are special. - - - -.. _reference-dsl-strftime: - -strftime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strftime (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". - Format strings are as in the C library (please see "man strftime" on your system), - with the Miller-specific addition of "%1S" through "%9S" which format the seconds - with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) - See also strftime_local. - - - -.. _reference-dsl-strftime_local: - -strftime_local -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strftime_local (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. - - - -.. _reference-dsl-string: - -string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - string (class=conversion #args=1): Convert int/float/bool/string to string. - - - -.. _reference-dsl-strip: - -strip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strip (class=string #args=1): Strip leading and trailing whitespace from string. - - - -.. _reference-dsl-strlen: - -strlen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strlen (class=string #args=1): String length. - - - -.. _reference-dsl-strptime: - -strptime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strptime (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, - e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, - and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. - See also strptime_local. - - - -.. _reference-dsl-strptime_local: - -strptime_local -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strptime_local (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. - - - -.. _reference-dsl-sub: - -sub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sub (class=string #args=3): Example: '$name=sub($name, "old", "new")' - (replace once). - - - -.. _reference-dsl-substr: - -substr -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - substr (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n - inclusive. Negative indices -len .. -1 alias to 0 .. len-1. - - - -.. _reference-dsl-system: - -system -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - system (class=string #args=1): Run command string, yielding its stdout minus final carriage return. - - - -.. _reference-dsl-systime: - -systime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - systime (class=time #args=0): Floating-point seconds since the epoch, - e.g. 1440768801.748936. - - - -.. _reference-dsl-tan: - -tan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tan (class=math #args=1): Trigonometric tangent. - - - -.. _reference-dsl-tanh: - -tanh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tanh (class=math #args=1): Hyperbolic tangent. - - - -.. _reference-dsl-tolower: - -tolower -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tolower (class=string #args=1): Convert string to lowercase. - - - -.. _reference-dsl-toupper: - -toupper -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - toupper (class=string #args=1): Convert string to uppercase. - - - -.. _reference-dsl-truncate: - -truncate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - truncate (class=string #args=2): Truncates string first argument to max length of int second argument. - - - -.. _reference-dsl-typeof: - -typeof -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - typeof (class=conversion #args=1): Convert argument to type of argument (e.g. - MT_STRING). For debug. - - - -.. _reference-dsl-urand: - -urand -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urand (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. - Int-valued example: '$n=floor(20+urand()*11)'. - - - -.. _reference-dsl-urand32: - -urand32 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urand32 (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 - inclusive. - - - -.. _reference-dsl-urandint: - -urandint -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urandint (class=math #args=2): Integer uniformly distributed between inclusive - integer endpoints. - - - -.. _reference-dsl-urandrange: - -urandrange -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urandrange (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). - - - -User-defined functions and subroutines ----------------------------------------------------------------- - -As of Miller 5.0.0 you can define your own functions, as well as subroutines. - -User-defined functions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Here's the obligatory example of a recursive function to compute the factorial function: - -:: - - $ mlr --opprint --from data/small put ' - func f(n) { - if (is_numeric(n)) { - if (n > 0) { - return n * f(n-1); - } else { - return 1; - } - } - # implicitly return absent-null if non-numeric - } - $ox = f($x + NR); - $oi = f($i); - ' - a b i x y ox oi - pan pan 1 0.3467901443380824 0.7268028627434533 0.467054 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3.680838 2 - wye wye 3 0.20460330576630303 0.33831852551664776 1.741251 6 - eks wye 4 0.38139939387114097 0.13418874328430463 18.588349 24 - wye pan 5 0.5732889198020006 0.8636244699032729 211.387310 120 - -Properties of user-defined functions: - -* Function bodies start with ``func`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested functions.) - -* A function (uniqified by its name) may not be redefined: either by redefining a user-defined function, or by redefining a built-in function. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Functions may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, functions may be either recursive or mutually recursive. Functions may not call subroutines. - -* Functions may be defined and called either within ``mlr put`` or ``mlr put``. - -* Functions have read access to ``$``-variables and ``@``-variables but may not modify them. See also :ref:`cookbook-memoization-with-oosvars` for an example. - -* Argument values may be reassigned: they are not read-only. - -* When a return value is not implicitly returned, this results in a return value of absent-null. (In the example above, if there were records for which the argument to ``f`` is non-numeric, the assignments would be skipped.) See also the section on :ref:`reference-null-data`. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -User-defined subroutines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Example: - -:: - - $ mlr --opprint --from data/small put -q ' - begin { - @call_count = 0; - } - subr s(n) { - @call_count += 1; - if (is_numeric(n)) { - if (n > 1) { - call s(n-1); - } else { - print "numcalls=" . @call_count; - } - } - } - print "NR=" . NR; - call s(NR); - ' - NR=1 - numcalls=1 - NR=2 - numcalls=3 - NR=3 - numcalls=6 - NR=4 - numcalls=10 - NR=5 - numcalls=15 - -Properties of user-defined subroutines: - -* Subroutine bodies start with ``subr`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested subroutines.) - -* A subroutine (uniqified by its name) may not be redefined. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Subroutines may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, subroutines may be either recursive or mutually recursive. Subroutines may call functions. - -* Subroutines may be defined and called either within ``mlr put`` or ``mlr put``. - -* Subroutines have read/write access to ``$``-variables and ``@``-variables. - -* Argument values may be reassigned: they are not read-only. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -.. _reference-dsl-errors-and-transparency: - -Errors and transparency ----------------------------------------------------------------- - -As soon as you have a programming language, you start having the problem *What is my code doing, and why?* This includes getting syntax errors -- which are always annoying -- as well as the even more annoying problem of a program which parses without syntax error but doesn't do what you expect. - -The ``syntax error`` message is cryptic: it says ``syntax error at `` followed by the next symbol it couldn't parse. This is good, but (as of 5.0.0) it doesn't say things like ``syntax error at line 17, character 22``. Here are some common causes of syntax errors: - -* Don't forget ``;`` at end of line, before another statement on the next line. - -* Miller's DSL lacks the ``++`` and ``--`` operators. - -* Curly braces are required for the bodies of ``if``/``while``/``for`` blocks, even when the body is a single statement. - -Now for transparency: - -* As in any language, you can do (see :ref:`reference-dsl-print-statements`) ``print`` (or ``eprint`` to print to stderr). See also :ref:`reference-dsl-dump-statements` and :ref:`reference-dsl-emit-statements`. - -* The ``-v`` option to ``mlr put`` and ``mlr filter`` prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous. - -* The ``-T`` option prints a trace of each statement executed. - -* The ``-t`` and ``-a`` options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience. - -* Please see :ref:`reference-dsl-type-checking` for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller's important use-cases is being able to say simple things like ``mlr put '$y = $x + 1' myfile.dat`` with a minimum of punctuational bric-a-brac -- but for programs over a few lines I generally find that the more type-specification, the better. - -A note on the complexity of Miller's expression language ----------------------------------------------------------------- - -One of Miller's strengths is its brevity: it's much quicker -- and less error-prone -- to type ``mlr stats1 -a sum -f x,y -g a,b`` than having to track summation variables as in ``awk``, or using Miller's out-of-stream variables. And the more language features Miller's put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the *less* powerful it begins to seem: because of the other programming-language features it *doesn't* have (classes, execptions, and so on). - -When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the ``put`` statements be handled by the implementation language's own ``eval``: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular -- by a wide margin. So Miller is C under the hood with a hand-rolled DSL. - -I do want to keep focusing on what Miller is good at -- concise notation, low latency, and high throughput -- and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as ``awk``; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as ``awk`` along with optional type-declaration syntax. While I'm excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller's sweet spot which is speed plus simplicity. - diff --git a/docs6/_build/html/_sources/reference-verbs.rst.txt b/docs6/_build/html/_sources/reference-verbs.rst.txt deleted file mode 100644 index 01410730a..000000000 --- a/docs6/_build/html/_sources/reference-verbs.rst.txt +++ /dev/null @@ -1,3425 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Verbs reference -================================================================ - -Overview ----------------------------------------------------------------- - -When you type ``mlr {something} myfile.dat``, the ``{something}`` part is called a **verb**. It specifies how you want to transform your data. (See also :ref:`reference-command-overview` for a breakdown.) The following is an alphabetical list of verbs with their descriptions. - -The verbs ``put`` and ``filter`` are special in that they have a rich expression language (domain-specific language, or "DSL"). More information about them can be found at :doc:`reference-dsl`. - -Here's a comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -:: - - $ mlr stats1 -a sum -f x -g a data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -:: - - $ mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -.. _reference-verbs-altkv: - -altkv ----------------------------------------------------------------- - -Map list of values to alternating key/value pairs. - -:: - - $ mlr altkv -h - Usage: mlr altkv [no options] - Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. - -:: - - $ echo 'a,b,c,d,e,f' | mlr altkv - a=b,c=d,e=f - -:: - - $ echo 'a,b,c,d,e,f,g' | mlr altkv - a=b,c=d,e=f,4=g - -.. _reference-verbs-bar: - -bar ----------------------------------------------------------------- - -Cheesy bar-charting. - -:: - - $ mlr bar -h - Usage: mlr bar [options] - Replaces a numeric field with a number of asterisks, allowing for cheesy - bar plots. These align best with --opprint or --oxtab output format. - Options: - -f {a,b,c} Field names to convert to bars. - -c {character} Fill character: default '*'. - -x {character} Out-of-bounds character: default '#'. - -b {character} Blank character: default '.'. - --lo {lo} Lower-limit value for min-width bar: default '0.000000'. - --hi {hi} Upper-limit value for max-width bar: default '100.000000'. - -w {n} Bar-field width: default '40'. - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint bar --lo 0 --hi 1 -f x,y data/small - a b i x y - pan pan 1 *************........................... *****************************........... - eks pan 2 ******************************.......... ********************.................... - wye wye 3 ********................................ *************........................... - eks wye 4 ***************......................... *****................................... - wye pan 5 **********************.................. **********************************...... - -:: - - $ mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small - a b i x y - pan pan 1 #....................................... ***************************************# - eks pan 2 ***************************************# ************************................ - wye wye 3 #....................................... #....................................... - eks wye 4 #....................................... #....................................... - wye pan 5 **********************************...... ***************************************# - -:: - - $ mlr --opprint bar --auto -f x,y data/small - a b i x y - pan pan 1 [0.204603]**********..............................[0.75868] [0.134189]********************************........[0.863624] - eks pan 2 [0.204603]***************************************#[0.75868] [0.134189]*********************...................[0.863624] - wye wye 3 [0.204603]#.......................................[0.75868] [0.134189]***********.............................[0.863624] - eks wye 4 [0.204603]************............................[0.75868] [0.134189]#.......................................[0.863624] - wye pan 5 [0.204603]**************************..............[0.75868] [0.134189]***************************************#[0.863624] - -.. _reference-verbs-bootstrap: - -bootstrap ----------------------------------------------------------------- - -:: - - $ mlr bootstrap --help - Usage: mlr bootstrap [options] - Emits an n-sample, with replacement, of the input records. - Options: - -n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. - See also mlr sample and mlr shuffle. - -The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example: - -:: - - $ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.497129 1413 - red 0.492560 4641 - purple 0.494005 1142 - green 0.504861 1109 - blue 0.517717 1470 - orange 0.490532 303 - -:: - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.500651 1380 - purple 0.501556 1111 - green 0.503272 1068 - red 0.493895 4702 - blue 0.512529 1496 - orange 0.521030 321 - -:: - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.498046 1485 - blue 0.513576 1417 - red 0.492870 4595 - orange 0.507697 307 - green 0.496803 1075 - purple 0.486337 1199 - -:: - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - blue 0.522921 1447 - red 0.490717 4617 - yellow 0.496450 1419 - purple 0.496523 1192 - green 0.507569 1111 - orange 0.468014 292 - -.. _reference-verbs-cat: - -cat ----------------------------------------------------------------- - -Most useful for format conversions (see :doc:`file-formats`, and concatenating multiple same-schema CSV files to have the same header: - -:: - - $ mlr cat -h - Usage: mlr cat [options] - Passes input records directly to output. Most useful for format conversion. - Options: - -n Prepend field "n" to each record with record-counter starting at 1 - -g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). - -v Write a low-level record-structure dump to stderr. - -N {name} Prepend field {name} to each record with record-counter starting at 1 - -:: - - $ cat data/a.csv - a,b,c - 1,2,3 - 4,5,6 - -:: - - $ cat data/b.csv - a,b,c - 7,8,9 - -:: - - $ mlr --csv cat data/a.csv data/b.csv - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - -:: - - $ mlr --icsv --oxtab cat data/a.csv data/b.csv - a 1 - b 2 - c 3 - - a 4 - b 5 - c 6 - - a 7 - b 8 - c 9 - -:: - - $ mlr --csv cat -n data/a.csv data/b.csv - n,a,b,c - 1,1,2,3 - 2,4,5,6 - 3,7,8,9 - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint cat -n -g a data/small - n a b i x y - 1 pan pan 1 0.3467901443380824 0.7268028627434533 - 1 eks pan 2 0.7586799647899636 0.5221511083334797 - 1 wye wye 3 0.20460330576630303 0.33831852551664776 - 2 eks wye 4 0.38139939387114097 0.13418874328430463 - 2 wye pan 5 0.5732889198020006 0.8636244699032729 - -.. _reference-verbs-check: - -check ----------------------------------------------------------------- - -:: - - $ mlr check --help - Usage: mlr check - Consumes records without printing any output. - Useful for doing a well-formatted check on input data. - -.. _reference-verbs-clean-whitespace: - -clean-whitespace ----------------------------------------------------------------- - -:: - - $ mlr clean-whitespace --help - Usage: mlr clean-whitespace [options] - For each record, for each field in the record, whitespace-cleans the keys and - values. Whitespace-cleaning entails stripping leading and trailing whitespace, - and replacing multiple whitespace with singles. For finer-grained control, - please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, - and clean_whitespace. - - Options: - -k|--keys-only Do not touch values. - -v|--values-only Do not touch keys. - It is an error to specify -k as well as -v -- to clean keys and values, - leave off -k as well as -v. - -:: - - $ mlr --icsv --ojson cat data/clean-whitespace.csv - { " Name ": " Ann Simons", " Preference ": " blue " } - { " Name ": "Bob Wang ", " Preference ": " red " } - { " Name ": " Carol Vee", " Preference ": " yellow" } - -:: - - $ mlr --icsv --ojson clean-whitespace -k data/clean-whitespace.csv - { "Name": " Ann Simons", "Preference": " blue " } - { "Name": "Bob Wang ", "Preference": " red " } - { "Name": " Carol Vee", "Preference": " yellow" } - -:: - - $ mlr --icsv --ojson clean-whitespace -v data/clean-whitespace.csv - { " Name ": "Ann Simons", " Preference ": "blue" } - { " Name ": "Bob Wang", " Preference ": "red" } - { " Name ": "Carol Vee", " Preference ": "yellow" } - -:: - - $ mlr --icsv --ojson clean-whitespace data/clean-whitespace.csv - { "Name": "Ann Simons", "Preference": "blue" } - { "Name": "Bob Wang", "Preference": "red" } - { "Name": "Carol Vee", "Preference": "yellow" } - -Function links: - -* :ref:`reference-dsl-lstrip` -* :ref:`reference-dsl-rstrip` -* :ref:`reference-dsl-strip` -* :ref:`reference-dsl-collapse_whitespace` -* :ref:`reference-dsl-clean_whitespace` - -.. _reference-verbs-count: - -count ----------------------------------------------------------------- - -:: - - $ mlr count --help - Usage: mlr count [options] - Prints number of records, optionally grouped by distinct values for specified field names. - - Options: - -g {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not interesting without -g. - -o {name} Field name for output count. Default "count". - -:: - - $ mlr count data/medium - count=10000 - -:: - - $ mlr count -g a data/medium - a=pan,count=2081 - a=eks,count=1965 - a=wye,count=1966 - a=zee,count=2047 - a=hat,count=1941 - -:: - - $ mlr count -n -g a data/medium - count=5 - -:: - - $ mlr count -g b data/medium - b=pan,count=1942 - b=wye,count=2057 - b=zee,count=1943 - b=eks,count=2008 - b=hat,count=2050 - -:: - - $ mlr count -n -g b data/medium - count=5 - -:: - - $ mlr count -g a,b data/medium - a=pan,b=pan,count=427 - a=eks,b=pan,count=371 - a=wye,b=wye,count=377 - a=eks,b=wye,count=407 - a=wye,b=pan,count=392 - a=zee,b=pan,count=389 - a=eks,b=zee,count=357 - a=zee,b=wye,count=455 - a=hat,b=wye,count=423 - a=pan,b=wye,count=395 - a=zee,b=eks,count=391 - a=hat,b=zee,count=385 - a=hat,b=eks,count=389 - a=wye,b=hat,count=426 - a=pan,b=eks,count=429 - a=eks,b=eks,count=413 - a=hat,b=hat,count=381 - a=hat,b=pan,count=363 - a=zee,b=zee,count=403 - a=pan,b=hat,count=417 - a=pan,b=zee,count=413 - a=zee,b=hat,count=409 - a=wye,b=zee,count=385 - a=eks,b=hat,count=417 - a=wye,b=eks,count=386 - -.. _reference-verbs-count-distinct: - -count-distinct ----------------------------------------------------------------- - -:: - - $ mlr count-distinct --help - Usage: mlr count-distinct [options] - Prints number of records having distinct values for specified field names. - Same as uniq -c. - - Options: - -f {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not compatible with -u. - -o {name} Field name for output count. Default "count". - Ignored with -u. - -u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. - -:: - - $ mlr count-distinct -f a,b then sort -nr count data/medium - a=zee,b=wye,count=455 - a=pan,b=eks,count=429 - a=pan,b=pan,count=427 - a=wye,b=hat,count=426 - a=hat,b=wye,count=423 - a=pan,b=hat,count=417 - a=eks,b=hat,count=417 - a=eks,b=eks,count=413 - a=pan,b=zee,count=413 - a=zee,b=hat,count=409 - a=eks,b=wye,count=407 - a=zee,b=zee,count=403 - a=pan,b=wye,count=395 - a=wye,b=pan,count=392 - a=zee,b=eks,count=391 - a=zee,b=pan,count=389 - a=hat,b=eks,count=389 - a=wye,b=eks,count=386 - a=hat,b=zee,count=385 - a=wye,b=zee,count=385 - a=hat,b=hat,count=381 - a=wye,b=wye,count=377 - a=eks,b=pan,count=371 - a=hat,b=pan,count=363 - a=eks,b=zee,count=357 - -:: - - $ mlr count-distinct -u -f a,b data/medium - field=a,value=pan,count=2081 - field=a,value=eks,count=1965 - field=a,value=wye,count=1966 - field=a,value=zee,count=2047 - field=a,value=hat,count=1941 - field=b,value=pan,count=1942 - field=b,value=wye,count=2057 - field=b,value=zee,count=1943 - field=b,value=eks,count=2008 - field=b,value=hat,count=2050 - -:: - - $ mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium - a=zee,b=wye,someothername=455 - a=pan,b=eks,someothername=429 - a=pan,b=pan,someothername=427 - a=wye,b=hat,someothername=426 - a=hat,b=wye,someothername=423 - a=pan,b=hat,someothername=417 - a=eks,b=hat,someothername=417 - a=eks,b=eks,someothername=413 - a=pan,b=zee,someothername=413 - a=zee,b=hat,someothername=409 - a=eks,b=wye,someothername=407 - a=zee,b=zee,someothername=403 - a=pan,b=wye,someothername=395 - a=wye,b=pan,someothername=392 - a=zee,b=eks,someothername=391 - a=zee,b=pan,someothername=389 - a=hat,b=eks,someothername=389 - a=wye,b=eks,someothername=386 - a=hat,b=zee,someothername=385 - a=wye,b=zee,someothername=385 - a=hat,b=hat,someothername=381 - a=wye,b=wye,someothername=377 - a=eks,b=pan,someothername=371 - a=hat,b=pan,someothername=363 - a=eks,b=zee,someothername=357 - -:: - - $ mlr count-distinct -n -f a,b data/medium - count=25 - -.. _reference-verbs-count-similar: - -count-similar ----------------------------------------------------------------- - -:: - - $ mlr count-similar --help - Usage: mlr count-similar [options] - Ingests all records, then emits each record augmented by a count of - the number of other records having the same group-by field values. - Options: - -g {d,e,f} Group-by-field names for counts. - -o {name} Field name for output count. Default "count". - -:: - - $ mlr --opprint head -n 20 data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - zee pan 6 0.5271261600918548 0.49322128674835697 - eks zee 7 0.6117840605678454 0.1878849191181694 - zee wye 8 0.5985540091064224 0.976181385699006 - hat wye 9 0.03144187646093577 0.7495507603507059 - pan wye 10 0.5026260055412137 0.9526183602969864 - pan pan 11 0.7930488423451967 0.6505816637259333 - zee pan 12 0.3676141320555616 0.23614420670296965 - eks pan 13 0.4915175580479536 0.7709126592971468 - eks zee 14 0.5207382318405251 0.34141681118811673 - eks pan 15 0.07155556372719507 0.3596137145616235 - pan pan 16 0.5736853980681922 0.7554169353781729 - zee eks 17 0.29081949506712723 0.054478717073354166 - hat zee 18 0.05727869223575699 0.13343527626645157 - zee pan 19 0.43144132839222604 0.8442204830496998 - eks wye 20 0.38245149780530685 0.4730652428100751 - -:: - - $ mlr --opprint head -n 20 then count-similar -g a data/medium - a b i x y count - pan pan 1 0.3467901443380824 0.7268028627434533 4 - pan wye 10 0.5026260055412137 0.9526183602969864 4 - pan pan 11 0.7930488423451967 0.6505816637259333 4 - pan pan 16 0.5736853980681922 0.7554169353781729 4 - eks pan 2 0.7586799647899636 0.5221511083334797 7 - eks wye 4 0.38139939387114097 0.13418874328430463 7 - eks zee 7 0.6117840605678454 0.1878849191181694 7 - eks pan 13 0.4915175580479536 0.7709126592971468 7 - eks zee 14 0.5207382318405251 0.34141681118811673 7 - eks pan 15 0.07155556372719507 0.3596137145616235 7 - eks wye 20 0.38245149780530685 0.4730652428100751 7 - wye wye 3 0.20460330576630303 0.33831852551664776 2 - wye pan 5 0.5732889198020006 0.8636244699032729 2 - zee pan 6 0.5271261600918548 0.49322128674835697 5 - zee wye 8 0.5985540091064224 0.976181385699006 5 - zee pan 12 0.3676141320555616 0.23614420670296965 5 - zee eks 17 0.29081949506712723 0.054478717073354166 5 - zee pan 19 0.43144132839222604 0.8442204830496998 5 - hat wye 9 0.03144187646093577 0.7495507603507059 2 - hat zee 18 0.05727869223575699 0.13343527626645157 2 - -:: - - $ mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium - a b i x y count - eks pan 2 0.7586799647899636 0.5221511083334797 7 - eks wye 4 0.38139939387114097 0.13418874328430463 7 - eks zee 7 0.6117840605678454 0.1878849191181694 7 - eks pan 13 0.4915175580479536 0.7709126592971468 7 - eks zee 14 0.5207382318405251 0.34141681118811673 7 - eks pan 15 0.07155556372719507 0.3596137145616235 7 - eks wye 20 0.38245149780530685 0.4730652428100751 7 - hat wye 9 0.03144187646093577 0.7495507603507059 2 - hat zee 18 0.05727869223575699 0.13343527626645157 2 - pan pan 1 0.3467901443380824 0.7268028627434533 4 - pan wye 10 0.5026260055412137 0.9526183602969864 4 - pan pan 11 0.7930488423451967 0.6505816637259333 4 - pan pan 16 0.5736853980681922 0.7554169353781729 4 - wye wye 3 0.20460330576630303 0.33831852551664776 2 - wye pan 5 0.5732889198020006 0.8636244699032729 2 - zee pan 6 0.5271261600918548 0.49322128674835697 5 - zee wye 8 0.5985540091064224 0.976181385699006 5 - zee pan 12 0.3676141320555616 0.23614420670296965 5 - zee eks 17 0.29081949506712723 0.054478717073354166 5 - zee pan 19 0.43144132839222604 0.8442204830496998 5 - -.. _reference-verbs-cut: - -cut ----------------------------------------------------------------- - -:: - - $ mlr cut --help - Usage: mlr cut [options] - Passes through input records with specified fields included/excluded. - -f {a,b,c} Field names to include for cut. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. - Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint cut -f y,x,i data/small - i x y - 1 0.3467901443380824 0.7268028627434533 - 2 0.7586799647899636 0.5221511083334797 - 3 0.20460330576630303 0.33831852551664776 - 4 0.38139939387114097 0.13418874328430463 - 5 0.5732889198020006 0.8636244699032729 - -:: - - $ echo 'a=1,b=2,c=3' | mlr cut -f b,c,a - a=1,b=2,c=3 - -:: - - $ echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a - b=2,c=3,a=1 - -.. _reference-verbs-decimate: - -decimate ----------------------------------------------------------------- - -:: - - $ mlr decimate --help - Usage: mlr decimate [options] - -n {count} Decimation factor; default 10 - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts - Passes through one of every n records, optionally by category. - -.. _reference-verbs-fill-down: - -fill-down ----------------------------------------------------------------- - -:: - - $ mlr fill-down --help - Usage: mlr fill-down [options] - If a given record has a missing value for a given field, fill that from - the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - - Options: - --all Operate on all fields in the input. - -a|--only-if-absent If a given record has a missing value for a given field, - fill that from the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - -f Field names for fill-down. - -h|--help Show this message. - -:: - - $ cat data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,,9 - -:: - - $ mlr --csv fill-down -f b data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,5,9 - -:: - - $ mlr --csv fill-down -a -f b data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,,9 - -.. _reference-verbs-filter: - -filter ----------------------------------------------------------------- - -:: - - $ mlr filter --help - Usage: mlr filter [options] {expression} - Prints records for which {expression} evaluates to true. - If there are multiple semicolon-delimited expressions, all of them are - evaluated and the last one is used as the filter criterion. - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -x: Prints records for which {expression} evaluates to false. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". Please also see "mlr grep" which is - useful when you don't yet know which field name(s) you're looking for. - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter - -Features which filter shares with put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :doc:`reference-dsl` for more information about the expression language for ``mlr filter``. - -.. _reference-verbs-format-values: - -format-values ----------------------------------------------------------------- - -:: - - $ mlr format-values --help - Usage: mlr format-values [options] - Applies format strings to all field values, depending on autodetected type. - * If a field value is detected to be integer, applies integer format. - * Else, if a field value is detected to be float, applies float format. - * Else, applies string format. - - Note: this is a low-keystroke way to apply formatting to many fields. To get - finer control, please see the fmtnum function within the mlr put DSL. - - Note: this verb lets you apply arbitrary format strings, which can produce - undefined behavior and/or program crashes. See your system's "man printf". - - Options: - -i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. - -f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. - -s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. - -n Coerce field values autodetected as int to float, and then - apply the float format. - -:: - - $ mlr --opprint format-values data/small - a b i x y - pan pan 1 0.346790 0.726803 - eks pan 2 0.758680 0.522151 - wye wye 3 0.204603 0.338319 - eks wye 4 0.381399 0.134189 - wye pan 5 0.573289 0.863624 - -:: - - $ mlr --opprint format-values -n data/small - a b i x y - pan pan 1.000000 0.346790 0.726803 - eks pan 2.000000 0.758680 0.522151 - wye wye 3.000000 0.204603 0.338319 - eks wye 4.000000 0.381399 0.134189 - wye pan 5.000000 0.573289 0.863624 - -:: - - $ mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small - a b i x y - XpanX XpanX 00000001 3.467901e-01 7.268029e-01 - XeksX XpanX 00000002 7.586800e-01 5.221511e-01 - XwyeX XwyeX 00000003 2.046033e-01 3.383185e-01 - XeksX XwyeX 00000004 3.813994e-01 1.341887e-01 - XwyeX XpanX 00000005 5.732889e-01 8.636245e-01 - -:: - - $ mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small - a b i x y - XpanX XpanX 1.000000e+00 3.467901e-01 7.268029e-01 - XeksX XpanX 2.000000e+00 7.586800e-01 5.221511e-01 - XwyeX XwyeX 3.000000e+00 2.046033e-01 3.383185e-01 - XeksX XwyeX 4.000000e+00 3.813994e-01 1.341887e-01 - XwyeX XpanX 5.000000e+00 5.732889e-01 8.636245e-01 - -.. _reference-verbs-fraction: - -fraction ----------------------------------------------------------------- - -:: - - $ mlr fraction --help - Usage: mlr fraction [options] - For each record's value in specified fields, computes the ratio of that - value to the sum of values in that field over all input records. - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - - Note: this is internally a two-pass algorithm: on the first pass it retains - input records and accumulates sums; on the second pass it computes quotients - and emits output records. This means it produces no output until all input is read. - - Options: - -f {a,b,c} Field name(s) for fraction calculation - -g {d,e,f} Optional group-by-field name(s) for fraction counts - -p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" - -c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 - -For example, suppose you have the following CSV file: - -:: - - u=female,v=red,n=2458 - u=female,v=green,n=192 - u=female,v=blue,n=337 - u=female,v=purple,n=468 - u=female,v=yellow,n=3 - u=female,v=orange,n=17 - u=male,v=red,n=143 - u=male,v=green,n=227 - u=male,v=blue,n=2034 - u=male,v=purple,n=12 - u=male,v=yellow,n=1192 - u=male,v=orange,n=448 - -Then we can see what each record's ``n`` contributes to the total ``n``: - -:: - - $ mlr --opprint fraction -f n data/fraction-example.csv - u v n n_fraction - female red 2458 0.326384 - female green 192 0.025495 - female blue 337 0.044748 - female purple 468 0.062143 - female yellow 3 0.000398 - female orange 17 0.002257 - male red 143 0.018988 - male green 227 0.030142 - male blue 2034 0.270084 - male purple 12 0.001593 - male yellow 1192 0.158279 - male orange 448 0.059487 - -Using ``-g`` we can split those out by gender, or by color: - -:: - - $ mlr --opprint fraction -f n -g u data/fraction-example.csv - u v n n_fraction - female red 2458 0.707338 - female green 192 0.055252 - female blue 337 0.096978 - female purple 468 0.134676 - female yellow 3 0.000863 - female orange 17 0.004892 - male red 143 0.035256 - male green 227 0.055966 - male blue 2034 0.501479 - male purple 12 0.002959 - male yellow 1192 0.293886 - male orange 448 0.110454 - -:: - - $ mlr --opprint fraction -f n -g v data/fraction-example.csv - u v n n_fraction - female red 2458 0.945021 - female green 192 0.458234 - female blue 337 0.142134 - female purple 468 0.975000 - female yellow 3 0.002510 - female orange 17 0.036559 - male red 143 0.054979 - male green 227 0.541766 - male blue 2034 0.857866 - male purple 12 0.025000 - male yellow 1192 0.997490 - male orange 448 0.963441 - -We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females. - -To convert fractions to percents, you may use ``-p``: - -:: - - $ mlr --opprint fraction -f n -p data/fraction-example.csv - u v n n_percent - female red 2458 32.638428 - female green 192 2.549462 - female blue 337 4.474837 - female purple 468 6.214314 - female yellow 3 0.039835 - female orange 17 0.225734 - male red 143 1.898818 - male green 227 3.014208 - male blue 2034 27.008365 - male purple 12 0.159341 - male yellow 1192 15.827911 - male orange 448 5.948745 - -Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as "running sums". Here, you can use ``-c``: - -:: - - $ mlr --opprint fraction -f n -p -c data/fraction-example.csv - u v n n_cumulative_percent - female red 2458 32.638428 - female green 192 35.187890 - female blue 337 39.662727 - female purple 468 45.877042 - female yellow 3 45.916877 - female orange 17 46.142611 - male red 143 48.041429 - male green 227 51.055637 - male blue 2034 78.064002 - male purple 12 78.223344 - male yellow 1192 94.051255 - male orange 448 100 - -:: - - $ mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv - u v n n_cumulative_percent - female red 2458 70.733813 - female green 192 76.258993 - female blue 337 85.956835 - female purple 468 99.424460 - female yellow 3 99.510791 - female orange 17 100 - male red 143 3.525641 - male green 227 9.122288 - male blue 2034 59.270217 - male purple 12 59.566075 - male yellow 1192 88.954635 - male orange 448 100 - -.. _reference-verbs-grep: - -grep ----------------------------------------------------------------- - -:: - - $ mlr grep -h - Usage: mlr grep [options] {regular expression} - Passes through records which match {regex}. - Options: - -i Use case-insensitive search. - -v Invert: pass through records which do not match the regex. - Note that "mlr filter" is more powerful, but requires you to know field names. - By contrast, "mlr grep" allows you to regex-match the entire record. It does - this by formatting each record in memory as DKVP, using command-line-specified - ORS/OFS/OPS, and matching the resulting line against the regex specified - here. In particular, the regex is not applied to the input stream: if you - have CSV with header line "x,y,z" and data line "1,2,3" then the regex will - be matched, not against either of these lines, but against the DKVP line - "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, - and this command is intended to be merely a keystroke-saver. To get all the - features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." - -.. _reference-verbs-group-by: - -group-by ----------------------------------------------------------------- - -:: - - $ mlr group-by --help - Usage: mlr group-by {comma-separated field names} - Outputs records in batches having identical values at specified field names. - -This is similar to ``sort`` but with less work. Namely, Miller's sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear. - -:: - - $ mlr --opprint group-by a data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye wye 3 0.20460330576630303 0.33831852551664776 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint sort -f a data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - pan pan 1 0.3467901443380824 0.7268028627434533 - wye wye 3 0.20460330576630303 0.33831852551664776 - wye pan 5 0.5732889198020006 0.8636244699032729 - -In this example, since the sort is on field ``a``, the first step is to group together all records having the same value for field ``a``; the second step is to sort the distinct ``a``-field values ``pan``, ``eks``, and ``wye`` into ``eks``, ``pan``, and ``wye``; the third step is to print out the record-list for ``a=eks``, then the record-list for ``a=pan``, then the record-list for ``a=wye``. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn't desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you. - -.. _reference-verbs-group-like: - -group-like ----------------------------------------------------------------- - -:: - - $ mlr group-like --help - Usage: mlr group-like - Outputs records in batches having identical field names. - -This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in :doc:`record-heterogeneity` -- in particular, in preparation for CSV or pretty-print output. - -:: - - $ mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr --opprint group-like data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - /path/to/second/file 0.32 true - /some/other/path 0.97 false - - record_count resource - 100 /path/to/file - 150 /path/to/second/file - -.. _reference-verbs-having-fields: - -having-fields ----------------------------------------------------------------- - -:: - - $ mlr having-fields --help - Usage: mlr having-fields [options] - Conditionally passes through records depending on each record's field names. - Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} - Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) - -Similar to :ref:`reference-verbs-group-like`, this retains records with specified schema. - -:: - - $ mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr having-fields --at-least resource data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr having-fields --which-are resource,ok,loadsec data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - resource=/path/to/second/file,loadsec=0.32,ok=true - resource=/some/other/path,loadsec=0.97,ok=false - -.. _reference-verbs-head: - -head ----------------------------------------------------------------- - -:: - - $ mlr head --help - Usage: mlr head [options] - -n {count} Head count to print; default 10 - -g {a,b,c} Optional group-by-field names for head counts - Passes through the first n records, optionally by category. - Without -g, ceases consuming more input (i.e. is fast) when n - records have been read. - -Note that ``head`` is distinct from :ref:`reference-verbs-top` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -:: - - $ mlr --opprint head -n 4 data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - -:: - - $ mlr --opprint head -n 1 -g b data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks zee 7 0.6117840605678454 0.1878849191181694 - zee eks 17 0.29081949506712723 0.054478717073354166 - wye hat 24 0.7286126830627567 0.19441962592638418 - -.. _reference-verbs-histogram: - -histogram ----------------------------------------------------------------- - -:: - - $ mlr histogram --help - Usage: mlr histogram [options] - -f {a,b,c} Value-field names for histogram counts - --lo {lo} Histogram low value - --hi {hi} Histogram high value - --nbins {n} Number of histogram bins - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. - -o {prefix} Prefix for output field name. Default: no prefix. - Just a histogram. Input values < lo or > hi are not counted. - -This is just a histogram; there's not too much to say here. A note about binning, by example: Suppose you use ``--lo 0.0 --hi 1.0 --nbins 10 -f x``. The input numbers less than 0 or greater than 1 aren't counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has ``0.0 ≤ x < 0.1``, bin 1 has ``0.1 ≤ x < 0.2``, etc., but bin 9 has ``0.9 ≤ x ≤ 1.0``. - -:: - - $ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium - bin_lo bin_hi x_count x2_count x3_count - 0.000000 0.100000 1072 3231 4661 - 0.100000 0.200000 938 1254 1184 - 0.200000 0.300000 1037 988 845 - 0.300000 0.400000 988 832 676 - 0.400000 0.500000 950 774 576 - 0.500000 0.600000 1002 692 476 - 0.600000 0.700000 1007 591 438 - 0.700000 0.800000 1007 560 420 - 0.800000 0.900000 986 571 383 - 0.900000 1.000000 1013 507 341 - -:: - - $ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium - my_bin_lo my_bin_hi my_x_count my_x2_count my_x3_count - 0.000000 0.100000 1072 3231 4661 - 0.100000 0.200000 938 1254 1184 - 0.200000 0.300000 1037 988 845 - 0.300000 0.400000 988 832 676 - 0.400000 0.500000 950 774 576 - 0.500000 0.600000 1002 692 476 - 0.600000 0.700000 1007 591 438 - 0.700000 0.800000 1007 560 420 - 0.800000 0.900000 986 571 383 - 0.900000 1.000000 1013 507 341 - -.. _reference-verbs-join: - -join ----------------------------------------------------------------- - -:: - - $ mlr join --help - Usage: mlr join [options] - Joins records from specified left file name with records from all file names - at the end of the Miller argument list. - Functionality is essentially the same as the system "join" command, but for - record streams. - Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - File-format options default to those for the right file names on the Miller - argument list, but may be overridden for the left file as follows. Please see - the main "mlr --help" for more information on syntax for these arguments: - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - --implicit-csv-header - --no-implicit-csv-header - For example, if you have 'mlr --csv ... join -l foo ... ' then the left-file format will - be specified CSV as well unless you override with 'mlr --csv ... join --ijson -l foo' etc. - Likewise, if you have 'mlr --csv --implicit-csv-header ...' then the join-in file will be - expected to be headerless as well unless you put '--no-implicit-csv-header' after 'join'. - Please use "mlr --usage-separator-options" for information on specifying separators. - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information - including examples. - -Examples: - -Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records: - -:: - - $ mlr --icsvlite --opprint cat data/join-left-example.csv - id name - 100 alice - 200 bob - 300 carol - 400 david - 500 edgar - -:: - - $ mlr --icsvlite --opprint cat data/join-right-example.csv - status idcode - present 400 - present 100 - missing 200 - present 100 - present 200 - missing 100 - missing 200 - present 300 - missing 600 - present 400 - present 400 - present 300 - present 100 - missing 400 - present 200 - present 200 - present 200 - present 200 - present 400 - present 300 - -:: - - $ mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - id name status - 400 david present - 100 alice present - 200 bob missing - 100 alice present - 200 bob present - 100 alice missing - 200 bob missing - 300 carol present - 400 david present - 400 david present - 300 carol present - 100 alice present - 400 david missing - 200 bob present - 200 bob present - 200 bob present - 200 bob present - 400 david present - 300 carol present - -Same, but with sorting the input first: - -:: - - $ mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - id name status - 100 alice present - 100 alice present - 100 alice missing - 100 alice present - 200 bob missing - 200 bob present - 200 bob missing - 200 bob present - 200 bob present - 200 bob present - 200 bob present - 300 carol present - 300 carol present - 300 carol present - 400 david present - 400 david present - 400 david present - 400 david missing - 400 david present - -Same, but showing only unpaired records: - -:: - - $ mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - status idcode - missing 600 - - id name - 500 edgar - -Use prefixing options to disambiguate between otherwise identical non-join field names: - -:: - - $ mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv - a b c - 1 2 3 - 1 4 5 - 1 2 3 - 1 4 5 - -:: - - $ mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv - a left_b left_c right_b right_c - 1 2 3 2 3 - 1 4 5 2 3 - 1 2 3 4 5 - 1 4 5 4 5 - -Use zero join columns: - -:: - - $ mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv - left_a left_b left_c right_a right_b right_c - 1 2 3 1 2 3 - 1 4 5 1 2 3 - 1 2 3 1 4 5 - 1 4 5 1 4 5 - -.. _reference-verbs-label: - -label ----------------------------------------------------------------- - -:: - - $ mlr label --help - Usage: mlr label {new1,new2,new3,...} - Given n comma-separated names, renames the first n fields of each record to - have the respective name. (Fields past the nth are left with their original - names.) Particularly useful with --inidx or --implicit-csv-header, to give - useful names to otherwise integer-indexed fields. - Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" - -See also :ref:`reference-verbs-rename`. - -Example: Files such as ``/etc/passwd``, ``/etc/group``, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows: - -:: - - % grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head - name password uid gid gecos home_dir shell - nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false - root * 0 0 System Administrator /var/root /bin/sh - daemon * 1 1 System Services /var/root /usr/bin/false - _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico - _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false - _networkd * 24 24 Network Services /var/networkd /usr/bin/false - _installassistant * 25 25 Install Assistant /var/empty /usr/bin/false - _lp * 26 26 Printing Services /var/spool/cups /usr/bin/false - _postfix * 27 27 Postfix Mail Server /var/spool/postfix /usr/bin/false - -Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using ``--implicit-csv-header`` and ``label``: - -:: - - $ cat data/headerless.csv - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -:: - - $ mlr --csv --implicit-csv-header cat data/headerless.csv - 1,2,3 - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -:: - - $ mlr --csv --implicit-csv-header label name,age,status data/headerless.csv - name,age,status - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -:: - - $ mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv - name age status - John 23 present - Fred 34 present - Alice 56 missing - Carol 45 present - -.. _reference-verbs-least-frequent: - -least-frequent ----------------------------------------------------------------- - -:: - - $ mlr least-frequent -h - Usage: mlr least-frequent [options] - Shows the least frequently occurring distinct values for specified field names. - The first entry is the statistical anti-mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr most-frequent". - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape -n 5 - shape count - circle 2591 - triangle 3372 - square 4115 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 - shape color count - circle orange 68 - triangle orange 107 - square orange 128 - circle green 287 - circle purple 289 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -o someothername - shape color someothername - circle orange 68 - triangle orange 107 - square orange 128 - circle green 287 - circle purple 289 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -b - shape color - circle orange - triangle orange - square orange - circle green - circle purple - -See also :ref:`reference-verbs-most-frequent`. - -.. _reference-verbs-merge-fields: - -merge-fields ----------------------------------------------------------------- - -:: - - $ mlr merge-fields --help - Usage: mlr merge-fields [options] - Computes univariate statistics for each input record, accumulated across - specified fields. - Options: - -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics. Requires -o. - -r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. - -c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -o {name} Output field basename for -f/-r. - -k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -F Computes integerable things (e.g. count) in floating point. - - String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - - Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". - Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. - Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. - Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". - -This is like ``mlr stats1`` but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will. - -Examples: - -:: - - $ mlr --csvlite --opprint cat data/inout.csv - a_in a_out b_in b_out - 436 490 446 195 - 526 320 963 780 - 220 888 705 831 - -:: - - $ mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv - a_min a_max a_sum b_min b_max b_sum - 436 490 926 195 446 641 - 320 526 846 780 963 1743 - 220 888 1108 705 831 1536 - -:: - - $ mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv - a_in a_out b_in b_out a_sum b_sum - 436 490 446 195 926 641 - 526 320 963 780 846 1743 - 220 888 705 831 1108 1536 - -.. _reference-verbs-most-frequent: - -most-frequent ----------------------------------------------------------------- - -:: - - $ mlr most-frequent -h - Usage: mlr most-frequent [options] - Shows the most frequently occurring distinct values for specified field names. - The first entry is the statistical mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr least-frequent". - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape -n 5 - shape count - square 4115 - triangle 3372 - circle 2591 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 - shape color count - square red 1874 - triangle red 1560 - circle red 1207 - square yellow 589 - square blue 589 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -o someothername - shape color someothername - square red 1874 - triangle red 1560 - circle red 1207 - square yellow 589 - square blue 589 - -:: - - $ mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -b - shape color - square red - triangle red - circle red - square yellow - square blue - -See also :ref:`reference-verbs-least-frequent`. - -.. _reference-verbs-nest: - -nest ----------------------------------------------------------------- - -:: - - $ mlr nest -h - Usage: mlr nest [options] - Explodes specified field values into separate fields/records, or reverses this. - Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} - Please use "mlr --usage-separator-options" for information on specifying separators. - - Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - - Notes: - * With --pairs, --implode doesn't make sense since the original field name has - been lost. - * The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. - * It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. - See also mlr reshape. - -.. _reference-verbs-nothing: - -nothing ----------------------------------------------------------------- - -:: - - $ mlr nothing -h - Usage: mlr nothing - Drops all input records. Useful for testing, or after tee/print/etc. have - produced other output. - -.. _reference-verbs-put: - -put ----------------------------------------------------------------- - -:: - - $ mlr put --help - Usage: mlr put [options] {expression} - Adds/updates specified field(s). Expressions are semicolon-separated and must - either be assignments, or evaluate to boolean. Booleans with following - statements in curly braces control whether those statements are executed; - booleans without following curly braces do nothing except side effects (e.g. - regex-captures into \1, \2, etc.). - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - - Please see also 'mlr -k' for examples using redirected output. - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put - -Features which put shares with filter -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see the :doc:`reference-dsl` for more information about the expression language for ``mlr put``. - -.. _reference-verbs-regularize: - -regularize ----------------------------------------------------------------- - -:: - - $ mlr regularize --help - Usage: mlr regularize - For records seen earlier in the data stream with same field names in - a different order, outputs them with field names in the previously - encountered order. - Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 - output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 - -This exists since hash-map software in various languages and tools encountered in the wild does not always print similar rows with fields in the same order: ``mlr regularize`` helps clean that up. - -See also :ref:`reference-verbs-reorder`. - -.. _reference-verbs-remove-empty-columns: - -remove-empty-columns ----------------------------------------------------------------- - -:: - - $ mlr remove-empty-columns --help - Usage: mlr remove-empty-columns - Omits fields which are empty on every input row. Non-streaming. - -:: - - $ cat data/remove-empty-columns.csv - a,b,c,d,e - 1,,3,,5 - 2,,4,,5 - 3,,5,,7 - -:: - - $ mlr --csv remove-empty-columns data/remove-empty-columns.csv - a,c,e - 1,3,5 - 2,4,5 - 3,5,7 - -Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any. - -.. _reference-verbs-rename: - -rename ----------------------------------------------------------------- - -:: - - $ mlr rename --help - Usage: mlr rename [options] {old1,new1,old2,new2,...} - Renames specified fields. - Options: - -r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\1" through - "\9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. - -g Do global replacement within each field name rather than - first-match replacement. - Examples: - mlr rename old_name,new_name' - mlr rename old_name_1,new_name_1,old_name_2,new_name_2' - mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" - mlr rename -r '"Date_[0-9]+",Date' Same - mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 - mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint rename i,INDEX,b,COLUMN2 data/small - a COLUMN2 INDEX x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -As discussed in :doc:`performance`, ``sed`` is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example: - -:: - - $ sed 's/y/COLUMN5/g' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797 - a=wCOLUMN5e,b=wCOLUMN5e,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776 - a=eks,b=wCOLUMN5e,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463 - a=wCOLUMN5e,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729 - -:: - - $ mlr rename y,COLUMN5 data/small - a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729 - -See also :ref:`reference-verbs-label`. - -.. _reference-verbs-reorder: - -reorder ----------------------------------------------------------------- - -:: - - $ mlr reorder --help - Usage: mlr reorder [options] - -f {a,b,c} Field names to reorder. - -e Put specified field names at record end: default is to put - them at record start. - -b {x} Put field names specified with -f before field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. - -a {x} Put field names specified with -f after field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. - Examples: - mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". - mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". - -This pivots specified field names to the start or end of the record -- for -example when you have highly multi-column data and you want to bring a field or -two to the front of line where you can give a quick visual scan. - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint reorder -f i,b data/small - i b a x y - 1 pan pan 0.3467901443380824 0.7268028627434533 - 2 pan eks 0.7586799647899636 0.5221511083334797 - 3 wye wye 0.20460330576630303 0.33831852551664776 - 4 wye eks 0.38139939387114097 0.13418874328430463 - 5 pan wye 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint reorder -e -f i,b data/small - a x y i b - pan 0.3467901443380824 0.7268028627434533 1 pan - eks 0.7586799647899636 0.5221511083334797 2 pan - wye 0.20460330576630303 0.33831852551664776 3 wye - eks 0.38139939387114097 0.13418874328430463 4 wye - wye 0.5732889198020006 0.8636244699032729 5 pan - -.. _reference-verbs-repeat: - -repeat ----------------------------------------------------------------- - -:: - - $ mlr repeat --help - Usage: mlr repeat [options] - Copies input records to output records multiple times. - Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. - Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' - produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 - Example: - echo a=1,b=2,c=3 | mlr repeat -f b - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - Example: - echo a=1,b=2,c=3 | mlr repeat -f c - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 - -This is useful in at least two ways: one, as a data-generator as in the -above example using ``urand()``; two, for reconstructing individual -samples from data which has been count-aggregated: - -:: - - $ cat data/repeat-example.dat - color=blue,count=5 - color=red,count=4 - color=green,count=3 - -:: - - $ mlr repeat -f count then cut -x -f count data/repeat-example.dat - color=blue - color=blue - color=blue - color=blue - color=blue - color=red - color=red - color=red - color=red - color=green - color=green - color=green - -After expansion with ``repeat``, such data can then be sent on to -``stats1 -a mode``, or (if the data are numeric) to ``stats1 -a -p10,p50,p90``, etc. - -.. _reference-verbs-reshape: - -reshape ----------------------------------------------------------------- - -:: - - $ mlr reshape --help - Usage: mlr reshape [options] - Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. - Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - - Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - See also mlr nest. - -.. _reference-verbs-sample: - -sample ----------------------------------------------------------------- - -:: - - $ mlr sample --help - Usage: mlr sample [options] - Reservoir sampling (subsampling without replacement), optionally by category. - -k {count} Required: number of records to output, total, or by group if using -g. - -g {a,b,c} Optional: group-by-field names for samples. - See also mlr bootstrap and mlr shuffle. - -This is reservoir-sampling: select *k* items from *n* with -uniform probability and no repeats in the sample. (If *n* is less than -*k*, then of course only *n* samples are produced.) With ``-g -{field names}``, produce a *k*-sample for each distinct value of the -specified field names. - -:: - - $ mlr --opprint sample -k 4 data/colored-shapes.dkvp - color shape flag i u v w x - purple triangle 0 90122 0.9986871176198068 0.3037738877233719 0.5154934457238382 5.365962021016529 - red circle 0 3139 0.04835898233323954 -0.03964684310055758 0.5263660881848111 5.3758779366493625 - orange triangle 0 67847 0.36746306902109926 0.5161574810505635 0.5176199566173642 3.1748088656576567 - yellow square 1 33576 0.3098376725521097 0.8525628505287842 0.49774122460981685 4.494754378604669 - - $ mlr --opprint sample -k 4 data/colored-shapes.dkvp - color shape flag i u v w x - blue square 1 16783 0.09974385090654347 0.7243899920872646 0.5353718443278438 4.431057737383438 - orange square 1 93291 0.5944176543007182 0.17744449786454086 0.49262281749172077 3.1548117990710653 - yellow square 1 54436 0.5268161165014636 0.8785588662666121 0.5058773791931063 7.019185838783636 - yellow square 1 55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984 3.526301273728043 - - $ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp - color shape flag i u v w x - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - yellow square 1 917 0.8547010348386344 0.7356782810796262 0.4531511689924275 5.774541777078352 - red circle 1 4000 0.05490416175132373 0.07392337815122155 0.49416101516594396 5.355725080701707 - red square 0 87506 0.6357719216821314 0.6970867759393995 0.4940826462055272 6.351579417310387 - purple triangle 0 14898 0.7800986870203719 0.23998073813992293 0.5014775988383656 3.141006771777843 - purple triangle 0 151 0.032614487569017414 0.7346633365041219 0.7812143304483805 2.6831992610568047 - green triangle 1 126 0.1513010528347546 0.40346767294704544 0.051213231883952326 5.955109300797182 - green circle 0 17635 0.029856606049114442 0.4724542934246524 0.49529606749929744 5.239153910272168 - blue circle 1 1020 0.414263129226617 0.8304946402876182 0.13151094520189244 4.397873687920433 - blue triangle 0 220 0.441773289968473 0.44597731903759075 0.6329360666849821 4.3064608776550894 - orange square 0 1885 0.8079311983747106 0.8685956833908394 0.3116410800256374 4.390864584500387 - orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 - - $ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp - color shape flag i u v w x - blue circle 0 215 0.7803586969333292 0.33146680638888126 0.04289047852629113 5.725365736377487 - blue circle 1 3616 0.8548431579124808 0.4989623130006362 0.3339426415875795 3.696785877560498 - green square 0 356 0.7674272008085286 0.341578843118008 0.4570224877870851 4.830320062215299 - green square 0 152 0.6684429446914862 0.016056003736548696 0.4656148241291592 5.434588759225423 - orange triangle 0 587 0.5175826237797857 0.08989091493635304 0.9011709461770973 4.265854207755811 - orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 - purple triangle 0 14192 0.5196327866973567 0.7860928603468063 0.4964368415453642 4.899167143824484 - purple triangle 0 65 0.6842806710360729 0.5823723856331258 0.8014053396013747 5.805148213865135 - red square 1 2431 0.38378504852300466 0.11445015005595527 0.49355539228753786 5.146756570128739 - red triangle 0 57097 0.43763430414406546 0.3355450325004481 0.5322349637512487 4.144267240289442 - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - yellow square 1 158 0.41527900739142165 0.7118027080775757 0.4200799665161291 5.33279067554884 - - -Note that no output is produced until all inputs are in. Another way to do -sampling, which works in the streaming case, is ``mlr filter 'urand() & -0.001'`` where you tune the 0.001 to meet your needs. - -.. _reference-verbs-sec2gmt: - -sec2gmt ----------------------------------------------------------------- - -:: - - $ mlr sec2gmt -h - Usage: mlr sec2gmt [options] {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT timestamp; leaves non-numbers as-is. This is nothing - more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 - is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' - Options: - -1 through -9: format the seconds using 1..9 decimal places, respectively. - -.. _reference-verbs-sec2gmtdate: - -sec2gmtdate ----------------------------------------------------------------- - -:: - - $ mlr sec2gmtdate -h - Usage: mlr sec2gmtdate {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT year-month-day timestamp; leaves non-numbers as-is. - This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 - is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' - -.. _reference-verbs-seqgen: - -seqgen ----------------------------------------------------------------- - -:: - - $ mlr seqgen -h - Usage: mlr seqgen [options] - Produces a sequence of counters. Discards the input record stream. Produces - output as specified by the following options: - -f {name} Field name for counters; default "i". - --start {number} Inclusive start value; default "1". - --stop {number} Inclusive stop value; default "100". - --step {number} Step value; default "1". - Start, stop, and/or step may be floating-point. Output is integer if start, - stop, and step are all integers. Step may be negative. It may not be zero - unless start == stop. - -:: - - $ mlr seqgen --stop 10 - i=1 - i=2 - i=3 - i=4 - i=5 - i=6 - i=7 - i=8 - i=9 - i=10 - -:: - - $ mlr seqgen --start 20 --stop 40 --step 4 - i=20 - i=24 - i=28 - i=32 - i=36 - i=40 - -:: - - $ mlr seqgen --start 40 --stop 20 --step -4 - i=40 - i=36 - i=32 - i=28 - i=24 - i=20 - -.. _reference-verbs-shuffle: - -shuffle ----------------------------------------------------------------- - -:: - - $ mlr shuffle -h - Usage: mlr shuffle {no options} - Outputs records randomly permuted. No output records are produced until - all input records are read. - See also mlr bootstrap and mlr sample. - -.. _reference-verbs-skip-trivial-records: - -skip-trivial-records ----------------------------------------------------------------- - -:: - - $ mlr skip-trivial-records -h - Usage: mlr skip-trivial-records [options] - Passes through all records except: - * those with zero fields; - * those for which all fields have empty value. - -:: - - $ cat data/trivial-records.csv - a,b,c - 1,2,3 - 4,,6 - ,, - ,8,9 - -:: - - $ mlr --csv skip-trivial-records data/trivial-records.csv - a,b,c - 1,2,3 - 4,,6 - ,8,9 - -.. _reference-verbs-sort: - -sort ----------------------------------------------------------------- - -:: - - $ mlr sort --help - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z - -Example: - -:: - - $ mlr --opprint sort -f a -nr x data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - pan pan 1 0.3467901443380824 0.7268028627434533 - wye pan 5 0.5732889198020006 0.8636244699032729 - wye wye 3 0.20460330576630303 0.33831852551664776 - -Here's an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved: - -:: - - $ head -n 10 data/multicountdown.dat - upsec=0.002,color=green,count=1203 - upsec=0.083,color=red,count=3817 - upsec=0.188,color=red,count=3801 - upsec=0.395,color=blue,count=2697 - upsec=0.526,color=purple,count=953 - upsec=0.671,color=blue,count=2684 - upsec=0.899,color=purple,count=926 - upsec=0.912,color=red,count=3798 - upsec=1.093,color=blue,count=2662 - upsec=1.327,color=purple,count=917 - -We can group these by thread by sorting on the thread ID (here, -``color``). Since Miller's sort is stable, this means that -timestamps within each thread's log data are still chronological: - -:: - - $ head -n 20 data/multicountdown.dat | mlr --opprint sort -f color - upsec color count - 0.395 blue 2697 - 0.671 blue 2684 - 1.093 blue 2662 - 2.064 blue 2659 - 2.2880000000000003 blue 2647 - 0.002 green 1203 - 1.407 green 1187 - 1.448 green 1177 - 2.313 green 1161 - 0.526 purple 953 - 0.899 purple 926 - 1.327 purple 917 - 1.703 purple 908 - 0.083 red 3817 - 0.188 red 3801 - 0.912 red 3798 - 1.416 red 3788 - 1.587 red 3782 - 1.601 red 3755 - 1.832 red 3717 - -Any records not having all specified sort keys will appear at the end of the output, in the order they -were encountered, regardless of the specified sort order: - -:: - - $ mlr sort -n x data/sort-missing.dkvp - x=1 - x=2 - x=4 - a=3 - -:: - - $ mlr sort -nr x data/sort-missing.dkvp - x=4 - x=2 - x=1 - a=3 - -.. _reference-verbs-sort-within-records: - -sort-within-records ----------------------------------------------------------------- - -:: - - $ mlr sort-within-records -h - Usage: mlr sort-within-records [no options] - Outputs records sorted lexically ascending by keys. - -:: - - $ cat data/sort-within-records.json - { - "a": 1, - "b": 2, - "c": 3 - } - { - "b": 4, - "a": 5, - "c": 6 - } - { - "c": 7, - "b": 8, - "a": 9 - } - -:: - - $ mlr --ijson --opprint cat data/sort-within-records.json - a b c - 1 2 3 - - b a c - 4 5 6 - - c b a - 7 8 9 - -:: - - $ mlr --json sort-within-records data/sort-within-records.json - { "a": 1, "b": 2, "c": 3 } - { "a": 5, "b": 4, "c": 6 } - { "a": 9, "b": 8, "c": 7 } - -:: - - $ mlr --ijson --opprint sort-within-records data/sort-within-records.json - a b c - 1 2 3 - 5 4 6 - 9 8 7 - -.. _reference-verbs-stats1: - -stats1 ----------------------------------------------------------------- - -:: - - $ mlr stats1 --help - Usage: mlr stats1 [options] - Computes univariate statistics for one or more given fields, accumulated across - the input record stream. - Options: - -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics - --fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) - --fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - -g {d,e,f} Optional group-by-field names - --gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) - --gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - -F Computes integerable things (e.g. count) in floating point. - Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - Example: mlr stats1 -a count,mode -f size - Example: mlr stats1 -a count,mode -f size -g shape - Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - Notes: - * p50 and median are synonymous. - * min and max output the same results as p0 and p100, respectively, but use - less memory. - * String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - * count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. - * When there are mode ties, the first-encountered datum wins. - -These are simple univariate statistics on one or more number-valued fields -(``count`` and ``mode`` apply to non-numeric fields as well), -optionally categorized by one or more other fields. - -:: - - $ mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium - x_count 10000 - x_sum 4986.019682 - x_min 0.000045 - x_p10 0.093322 - x_p50 0.501159 - x_mean 0.498602 - x_p90 0.900794 - x_max 0.999953 - y_count 10000 - y_sum 5062.057445 - y_min 0.000088 - y_p10 0.102132 - y_p50 0.506021 - y_mean 0.506206 - y_p90 0.905366 - y_max 0.999965 - -:: - - $ mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium - b x_mean y_mean - eks 0.506361 0.510293 - hat 0.487899 0.513118 - pan 0.497304 0.499599 - wye 0.497593 0.504596 - zee 0.504242 0.502997 - -:: - - $ mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp - color u_p50 u_p99 v_p50 v_p99 ur vr - yellow 0.501019 0.989046 0.520630 0.987034 1.974069 1.895845 - red 0.485038 0.990054 0.492586 0.994444 2.041189 2.018823 - purple 0.501319 0.988893 0.504571 0.988287 1.972582 1.958668 - green 0.502015 0.990764 0.505359 0.990175 1.973574 1.959350 - blue 0.525226 0.992655 0.485170 0.993873 1.889958 2.048505 - orange 0.483548 0.993635 0.480913 0.989102 2.054884 2.056717 - -:: - - $ mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp - shape count - square 4115 - triangle 3372 - circle 2591 - -:: - - $ mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp - shape color_mode - triangle red - square red - circle red - -.. _reference-verbs-stats2: - -stats2 ----------------------------------------------------------------- - -:: - - $ mlr stats2 --help - Usage: mlr stats2 [options] - Computes bivariate statistics for one or more given field-name pairs, - accumulated across the input record stream. - -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix - -f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. - -g {e,f,g} Optional group-by-field names. - -v Print additional output for linreg-pca. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - --fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. - Only one of -s or --fit may be used. - Example: mlr stats2 -a linreg-pca -f x,y - Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape - Example: mlr stats2 -a corr -f x,y - -These are simple bivariate statistics on one or more pairs of number-valued -fields, optionally categorized by one or more fields. - -:: - - $ mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium - x_y_cov 0.000043 - x_y_corr 0.000504 - y_y_cov 0.084611 - y_y_corr 1.000000 - x2_xy_cov 0.041884 - x2_xy_corr 0.630174 - x2_y2_cov -0.000310 - x2_y2_corr -0.003425 - -:: - - $ mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium - a x_y_ols_m x_y_ols_b x_y_ols_n x_y_r2 y_y_ols_m y_y_ols_b y_y_ols_n y_y_r2 xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_r2 - pan 0.017026 0.500403 2081 0.000287 1.000000 0.000000 2081 1.000000 0.878132 0.119082 2081 0.417498 - eks 0.040780 0.481402 1965 0.001646 1.000000 0.000000 1965 1.000000 0.897873 0.107341 1965 0.455632 - wye -0.039153 0.525510 1966 0.001505 1.000000 0.000000 1966 1.000000 0.853832 0.126745 1966 0.389917 - zee 0.002781 0.504307 2047 0.000008 1.000000 0.000000 2047 1.000000 0.852444 0.124017 2047 0.393566 - hat -0.018621 0.517901 1941 0.000352 1.000000 0.000000 1941 1.000000 0.841230 0.135573 1941 0.368794 - -Here's an example simple line-fit. The ``x`` and ``y`` -fields of the ``data/medium`` dataset are just independent uniformly -distributed on the unit interval. Here we remove half the data and fit a line to it. - -:: - - - # Prepare input data: - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares - - # Do a linear regression and examine coefficients: - mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares - x_y_pca_m=1.014419 - x_y_pca_b=0.000308 - x_y_pca_quality=0.861354 - - # Option 1 to apply the regression coefficients and produce a linear fit: - # Set x_y_pca_m and x_y_pca_b as shell variables: - eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares) - # In addition to x and y, make a new yfit which is the line fit, then plot - # using your favorite tool: - mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - - # Option 2 to apply the regression coefficients and produce a linear fit: use --fit option - mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - - -I use `pgr `_ for plotting; here's a screenshot. - -.. image:: data/linreg-example.jpg - - -(Thanks Drew Kunas for a good conversation about PCA!) - -Here's an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the ``count`` field and accumulated seconds in the ``upsec`` field, labeled by the ``color`` field: - -:: - - $ head -n 10 data/multicountdown.dat - upsec=0.002,color=green,count=1203 - upsec=0.083,color=red,count=3817 - upsec=0.188,color=red,count=3801 - upsec=0.395,color=blue,count=2697 - upsec=0.526,color=purple,count=953 - upsec=0.671,color=blue,count=2684 - upsec=0.899,color=purple,count=926 - upsec=0.912,color=red,count=3798 - upsec=1.093,color=blue,count=2662 - upsec=1.327,color=purple,count=917 - -We can do a linear regression on count remaining as a function of time: with ``c = m*u+b`` we want to find the time when the count goes to zero, i.e. ``u=-b/m``. - -:: - - $ mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat - color green - upsec_count_pca_m -32.756917 - upsec_count_pca_b 1213.722730 - upsec_count_pca_n 24 - upsec_count_pca_quality 0.999984 - donesec 37.052410 - - color red - upsec_count_pca_m -37.367646 - upsec_count_pca_b 3810.133400 - upsec_count_pca_n 30 - upsec_count_pca_quality 0.999989 - donesec 101.963431 - - color blue - upsec_count_pca_m -29.231212 - upsec_count_pca_b 2698.932820 - upsec_count_pca_n 25 - upsec_count_pca_quality 0.999959 - donesec 92.330514 - - color purple - upsec_count_pca_m -39.030097 - upsec_count_pca_b 979.988341 - upsec_count_pca_n 21 - upsec_count_pca_quality 0.999991 - donesec 25.108529 - -.. _reference-verbs-step: - -step ----------------------------------------------------------------- - -:: - - $ mlr step --help - Usage: mlr step [options] - Computes values dependent on the previous record, optionally grouped - by category. - - Options: - -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - -f {a,b,c} Value-field names on which to compute statistics - -g {d,e,f} Optional group-by-field names - -F Computes integerable things (e.g. counter) in floating point. - -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". - -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - - Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average - for more information on EWMA. - -Most Miller commands are record-at-a-time, with the exception of ``stats1``, ``stats2``, and ``histogram`` which compute aggregate output. The ``step`` command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for *running sum*. - -:: - - $ mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15 - a b i x y x_shift x_delta x_rsum x_counter - pan pan 1 0.3467901443380824 0.7268028627434533 - 0 0.346790 1 - eks pan 2 0.7586799647899636 0.5221511083334797 0.3467901443380824 0.411890 1.105470 2 - wye wye 3 0.20460330576630303 0.33831852551664776 0.7586799647899636 -0.554077 1.310073 3 - eks wye 4 0.38139939387114097 0.13418874328430463 0.20460330576630303 0.176796 1.691473 4 - wye pan 5 0.5732889198020006 0.8636244699032729 0.38139939387114097 0.191890 2.264762 5 - zee pan 6 0.5271261600918548 0.49322128674835697 0.5732889198020006 -0.046163 2.791888 6 - eks zee 7 0.6117840605678454 0.1878849191181694 0.5271261600918548 0.084658 3.403672 7 - zee wye 8 0.5985540091064224 0.976181385699006 0.6117840605678454 -0.013230 4.002226 8 - hat wye 9 0.03144187646093577 0.7495507603507059 0.5985540091064224 -0.567112 4.033668 9 - pan wye 10 0.5026260055412137 0.9526183602969864 0.03144187646093577 0.471184 4.536294 10 - pan pan 11 0.7930488423451967 0.6505816637259333 0.5026260055412137 0.290423 5.329343 11 - zee pan 12 0.3676141320555616 0.23614420670296965 0.7930488423451967 -0.425435 5.696957 12 - eks pan 13 0.4915175580479536 0.7709126592971468 0.3676141320555616 0.123903 6.188474 13 - eks zee 14 0.5207382318405251 0.34141681118811673 0.4915175580479536 0.029221 6.709213 14 - -:: - - $ mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15 - a b i x y x_shift x_delta x_rsum x_counter - pan pan 1 0.3467901443380824 0.7268028627434533 - 0 0.346790 1 - eks pan 2 0.7586799647899636 0.5221511083334797 - 0 0.758680 1 - wye wye 3 0.20460330576630303 0.33831852551664776 - 0 0.204603 1 - eks wye 4 0.38139939387114097 0.13418874328430463 0.7586799647899636 -0.377281 1.140079 2 - wye pan 5 0.5732889198020006 0.8636244699032729 0.20460330576630303 0.368686 0.777892 2 - zee pan 6 0.5271261600918548 0.49322128674835697 - 0 0.527126 1 - eks zee 7 0.6117840605678454 0.1878849191181694 0.38139939387114097 0.230385 1.751863 3 - zee wye 8 0.5985540091064224 0.976181385699006 0.5271261600918548 0.071428 1.125680 2 - hat wye 9 0.03144187646093577 0.7495507603507059 - 0 0.031442 1 - pan wye 10 0.5026260055412137 0.9526183602969864 0.3467901443380824 0.155836 0.849416 2 - pan pan 11 0.7930488423451967 0.6505816637259333 0.5026260055412137 0.290423 1.642465 3 - zee pan 12 0.3676141320555616 0.23614420670296965 0.5985540091064224 -0.230940 1.493294 3 - eks pan 13 0.4915175580479536 0.7709126592971468 0.6117840605678454 -0.120267 2.243381 4 - eks zee 14 0.5207382318405251 0.34141681118811673 0.4915175580479536 0.029221 2.764119 5 - -:: - - $ mlr --opprint step -a ewma -f x -d 0.1,0.9 data/medium | head -15 - a b i x y x_ewma_0.1 x_ewma_0.9 - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 0.717491 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 0.255892 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 0.368849 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 0.552845 - zee pan 6 0.5271261600918548 0.49322128674835697 0.404671 0.529698 - eks zee 7 0.6117840605678454 0.1878849191181694 0.425382 0.603575 - zee wye 8 0.5985540091064224 0.976181385699006 0.442699 0.599056 - hat wye 9 0.03144187646093577 0.7495507603507059 0.401573 0.088203 - pan wye 10 0.5026260055412137 0.9526183602969864 0.411679 0.461184 - pan pan 11 0.7930488423451967 0.6505816637259333 0.449816 0.759862 - zee pan 12 0.3676141320555616 0.23614420670296965 0.441596 0.406839 - eks pan 13 0.4915175580479536 0.7709126592971468 0.446588 0.483050 - eks zee 14 0.5207382318405251 0.34141681118811673 0.454003 0.516969 - - -:: - - $ mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough data/medium | head -15 - a b i x y x_ewma_smooth x_ewma_rough - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 0.717491 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 0.255892 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 0.368849 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 0.552845 - zee pan 6 0.5271261600918548 0.49322128674835697 0.404671 0.529698 - eks zee 7 0.6117840605678454 0.1878849191181694 0.425382 0.603575 - zee wye 8 0.5985540091064224 0.976181385699006 0.442699 0.599056 - hat wye 9 0.03144187646093577 0.7495507603507059 0.401573 0.088203 - pan wye 10 0.5026260055412137 0.9526183602969864 0.411679 0.461184 - pan pan 11 0.7930488423451967 0.6505816637259333 0.449816 0.759862 - zee pan 12 0.3676141320555616 0.23614420670296965 0.441596 0.406839 - eks pan 13 0.4915175580479536 0.7709126592971468 0.446588 0.483050 - eks zee 14 0.5207382318405251 0.34141681118811673 0.454003 0.516969 - - -Example deriving uptime-delta from system uptime: - -:: - - $ each 10 uptime | mlr -p step -a delta -f 11 - ... - 20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000 - 20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000 - 20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000 - 20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000 - 20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000 - 20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000 - 20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000 - 20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000 - - -.. _reference-verbs-tac: - -tac ----------------------------------------------------------------- - -:: - - $ mlr tac --help - Usage: mlr tac - Prints records in reverse order from the order in which they were encountered. - -Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced. - -:: - - $ mlr --icsv --opprint cat data/a.csv - a b c - 1 2 3 - 4 5 6 - -:: - - $ mlr --icsv --opprint cat data/b.csv - a b c - 7 8 9 - -:: - - $ mlr --icsv --opprint tac data/a.csv data/b.csv - a b c - 7 8 9 - 4 5 6 - 1 2 3 - -:: - - $ mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv - a b c filename - 7 8 9 data/b.csv - 4 5 6 data/a.csv - 1 2 3 data/a.csv - -.. _reference-verbs-tail: - -tail ----------------------------------------------------------------- - -:: - - $ mlr tail --help - Usage: mlr tail [options] - -n {count} Tail count to print; default 10 - -g {a,b,c} Optional group-by-field names for tail counts - Passes through the last n records, optionally by category. - -Prints the last *n* records in the input stream, optionally by category. - -:: - - $ mlr --opprint tail -n 4 data/colored-shapes.dkvp - color shape flag i u v w x - blue square 1 99974 0.6189062525431605 0.2637962404841453 0.5311465405784674 6.210738209085753 - blue triangle 0 99976 0.008110504040268474 0.8267274952432482 0.4732962944898885 6.146956761817328 - yellow triangle 0 99990 0.3839424618160777 0.55952913620132 0.5113763011485609 4.307973891915119 - yellow circle 1 99994 0.764950884927175 0.25284227383991364 0.49969878539567425 5.013809741826425 - -:: - - $ mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp - color shape flag i u v w x - yellow triangle 0 99990 0.3839424618160777 0.55952913620132 0.5113763011485609 4.307973891915119 - blue square 1 99974 0.6189062525431605 0.2637962404841453 0.5311465405784674 6.210738209085753 - yellow circle 1 99994 0.764950884927175 0.25284227383991364 0.49969878539567425 5.013809741826425 - -.. _reference-verbs-tee: - -tee ----------------------------------------------------------------- - -:: - - $ mlr tee --help - Usage: mlr tee [options] {filename} - Passes through input records (like mlr cat) but also writes to specified output - file, using output-format flags from the command line (e.g. --ocsv). See also - the "tee" keyword within mlr put, which allows data-dependent filenames. - Options: - -a: append to existing file, if any, rather than overwriting. - --no-fflush: don't call fflush() after every record. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - -.. _reference-verbs-top: - -top ----------------------------------------------------------------- - -:: - - $ mlr top --help - Usage: mlr top [options] - -f {a,b,c} Value-field names for top counts. - -g {d,e,f} Optional group-by-field names for top counts. - -n {count} How many records to print per category; default 1. - -a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. - --min Print top smallest values; default is top largest values. - -F Keep top values as floats even if they look like integers. - -o {name} Field name for output indices. Default "top_idx". - Prints the n records with smallest/largest values at specified fields, - optionally by category. - -Note that ``top`` is distinct from :ref:`reference-verbs-head` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -:: - - $ mlr --opprint top -n 4 -f x data/medium - top_idx x_top - 1 0.999953 - 2 0.999823 - 3 0.999733 - 4 0.999563 - -:: - - $ mlr --opprint top -n 4 -f x -o someothername data/medium - someothername x_top - 1 0.999953 - 2 0.999823 - 3 0.999733 - 4 0.999563 - -:: - - $ mlr --opprint top -n 2 -f x -g a then sort -f a data/medium - a top_idx x_top - eks 1 0.998811 - eks 2 0.998534 - hat 1 0.999953 - hat 2 0.999733 - pan 1 0.999403 - pan 2 0.999044 - wye 1 0.999823 - wye 2 0.999264 - zee 1 0.999490 - zee 2 0.999438 - -.. _reference-verbs-uniq: - -uniq ----------------------------------------------------------------- - -:: - - $ mlr uniq --help - Usage: mlr uniq [options] - Prints distinct values for specified field names. With -c, same as - count-distinct. For uniq, -f is a synonym for -g. - - Options: - -g {d,e,f} Group-by-field names for uniq counts. - -c Show repeat counts in addition to unique values. - -n Show only the number of distinct values. - -o {name} Field name for output count. Default "count". - -a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. - -There are two main ways to use ``mlr uniq``: the first way is with ``-g`` to specify group-by columns. - -:: - - $ wc -l data/colored-shapes.dkvp - 10078 data/colored-shapes.dkvp - -:: - - $ mlr uniq -g color,shape data/colored-shapes.dkvp - color=yellow,shape=triangle - color=red,shape=square - color=red,shape=circle - color=purple,shape=triangle - color=yellow,shape=circle - color=purple,shape=square - color=yellow,shape=square - color=red,shape=triangle - color=green,shape=triangle - color=green,shape=square - color=blue,shape=circle - color=blue,shape=triangle - color=purple,shape=circle - color=blue,shape=square - color=green,shape=circle - color=orange,shape=triangle - color=orange,shape=square - color=orange,shape=circle - -:: - - $ mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp - color shape count - blue circle 384 - blue square 589 - blue triangle 497 - green circle 287 - green square 454 - green triangle 368 - orange circle 68 - orange square 128 - orange triangle 107 - purple circle 289 - purple square 481 - purple triangle 372 - red circle 1207 - red square 1874 - red triangle 1560 - yellow circle 356 - yellow square 589 - yellow triangle 468 - -:: - - $ mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp - color shape someothername - red square 1874 - red triangle 1560 - red circle 1207 - yellow square 589 - blue square 589 - blue triangle 497 - purple square 481 - yellow triangle 468 - green square 454 - blue circle 384 - purple triangle 372 - green triangle 368 - yellow circle 356 - purple circle 289 - green circle 287 - orange square 128 - orange triangle 107 - orange circle 68 - -:: - - $ mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp - count - 18 - -The second main way to use ``mlr uniq`` is without group-by columns, using ``-a`` instead: - -:: - - $ cat data/repeats.dkvp - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=1 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=triangle,flag=1 - color=purple,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=red,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=1 - color=red,shape=square,flag=0 - color=red,shape=circle,flag=1 - color=purple,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=1 - color=purple,shape=triangle,flag=0 - color=purple,shape=triangle,flag=0 - color=purple,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=yellow,shape=triangle,flag=1 - color=yellow,shape=circle,flag=1 - color=purple,shape=square,flag=0 - -:: - - $ wc -l data/repeats.dkvp - 57 data/repeats.dkvp - -:: - - $ mlr --opprint uniq -a data/repeats.dkvp - color shape flag - red square 0 - purple triangle 0 - yellow circle 1 - red circle 1 - purple square 0 - red square 1 - yellow triangle 1 - -:: - - $ mlr --opprint uniq -a -n data/repeats.dkvp - count - 7 - -:: - - $ mlr --opprint uniq -a -c data/repeats.dkvp - count color shape flag - 17 red square 0 - 11 purple triangle 0 - 11 yellow circle 1 - 6 red circle 1 - 7 purple square 0 - 3 red square 1 - 2 yellow triangle 1 - -.. _reference-verbs-unsparsify: - -unsparsify ----------------------------------------------------------------- - -:: - - $ mlr unsparsify --help - Usage: mlr unsparsify [options] - Prints records with the union of field names over all input records. - For field names absent in a given record but present in others, fills in a - value. Without -f, this verb retains all input before producing any output. - - Options: - --fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. - -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - - Example: if the input is two records, one being 'a=1,b=2' and the other - being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and - 'a=,b=3,c=4'. - -Examples: - -:: - - $ cat data/sparse.json - {"a":1,"b":2,"v":3} - {"u":1,"b":2} - {"a":1,"v":2,"x":3} - {"v":1,"w":2} - -:: - - $ mlr --json unsparsify data/sparse.json - { "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" } - { "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" } - { "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" } - { "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 } - -:: - - $ mlr --ijson --opprint unsparsify data/sparse.json - a b v u x w - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - 3 - - - - 1 - - 2 - -:: - - $ mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json - a b v u x w - 1 2 3 missing missing missing - missing 2 missing 1 missing missing - 1 missing 2 missing 3 missing - missing missing 1 missing missing 2 - -:: - - $ mlr --ijson --opprint unsparsify -f a,b,u data/sparse.json - a b v u - 1 2 3 - - - u b a - 1 2 - - - a v x b u - 1 2 3 - - - - v w a b u - 1 2 - - - - -:: - - $ mlr --ijson --opprint unsparsify -f a,b,u,v,w,x then regularize data/sparse.json - a b v u w x - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - - 3 - - - 1 - 2 - - diff --git a/docs6/_build/html/_sources/reference.rst.txt b/docs6/_build/html/_sources/reference.rst.txt deleted file mode 100644 index 37faaf188..000000000 --- a/docs6/_build/html/_sources/reference.rst.txt +++ /dev/null @@ -1,1096 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Main reference -================================================================ - - -.. _reference-command-overview: - -Command overview ----------------------------------------------------------------- - -Whereas the Unix toolkit is made of the separate executables ``cat``, ``tail``, ``cut``, -``sort``, etc., Miller has subcommands, or **verbs**, invoked as follows: - -:: - - mlr tac *.dat - mlr cut --complement -f os_version *.dat - mlr sort -f hostname,uptime *.dat - -These fall into categories as follows: - -* Analogs of their Unix-toolkit namesakes, discussed below as well as in :doc:`feature-comparison`: :ref:`reference-verbs-cat` :ref:`reference-verbs-cut` :ref:`reference-verbs-grep` :ref:`reference-verbs-head` :ref:`reference-verbs-join` :ref:`reference-verbs-sort` :ref:`reference-verbs-tac` :ref:`reference-verbs-tail` :ref:`reference-verbs-top` :ref:`reference-verbs-uniq`. - -* ``awk``-like functionality: :ref:`reference-verbs-filter` :ref:`reference-verbs-put` :ref:`reference-verbs-sec2gmt` :ref:`reference-verbs-sec2gmtdate` :ref:`reference-verbs-step` :ref:`reference-verbs-tee`. - -* Statistically oriented: :ref:`reference-verbs-bar` :ref:`reference-verbs-bootstrap` :ref:`reference-verbs-decimate` :ref:`reference-verbs-histogram` :ref:`reference-verbs-least-frequent` :ref:`reference-verbs-most-frequent` :ref:`reference-verbs-sample` :ref:`reference-verbs-shuffle` :ref:`reference-verbs-stats1` :ref:`reference-verbs-stats2`. - -* Particularly oriented toward :doc:`record-heterogeneity`, although all Miller commands can handle heterogeneous records: :ref:`reference-verbs-group-by` :ref:`reference-verbs-group-like` :ref:`reference-verbs-having-fields`. - -* These draw from other sources (see also :doc:`originality`): :ref:`reference-verbs-count-distinct` is SQL-ish, and :ref:`reference-verbs-rename` can be done by ``sed`` (which does it faster: see :doc:`performance`. Verbs: :ref:`reference-verbs-check` :ref:`reference-verbs-count-distinct` :ref:`reference-verbs-label` :ref:`reference-verbs-merge-fields` :ref:`reference-verbs-nest` :ref:`reference-verbs-nothing` :ref:`reference-verbs-regularize` :ref:`reference-verbs-rename` :ref:`reference-verbs-reorder` :ref:`reference-verbs-reshape` :ref:`reference-verbs-seqgen`. - -I/O options ----------------------------------------------------------------- - -Formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -:: - - --dkvp --idkvp --odkvp - --nidx --inidx --onidx - --csv --icsv --ocsv - --csvlite --icsvlite --ocsvlite - --pprint --ipprint --opprint --right - --xtab --ixtab --oxtab - --json --ijson --ojson - -These are as discussed in :doc:`file-formats`, with the exception of ``--right`` which makes pretty-printed output right-aligned: - -:: - - $ mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -:: - - $ mlr --opprint --right cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Additional notes: - -* Use ``--csv``, ``--pprint``, etc. when the input and output formats are the same. - -* Use ``--icsv --opprint``, etc. when you want format conversion as part of what Miller does to your data. - -* DKVP (key-value-pair) format is the default for input and output. So, ``--oxtab`` is the same as ``--idkvp --oxtab``. - -**Pro-tip:** Please use either **--format1**, or **--iformat1 --oformat2**. If you use **--format1 --oformat2** then what happens is that flags are set up for input *and* output for format1, some of which are overwritten for output in format2. For technical reasons, having ``--oformat2`` clobber all the output-related effects of ``--format1`` also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199. - -In-place mode -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the ``mlr -I`` flag to process files in-place. For example, ``mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv`` will remove ``unwanted_column_name`` from all your ``*.csv`` files in your ``mydata/`` subdirectory. - -By default, Miller output goes to the screen (or you can redirect a file using ``>`` or to another process using ``|``). With ``-I``, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on. - -Please see :ref:`10min-choices-for-printing-to-files` for examples. - -Compression -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -:: - - --prepipe {command} - - -The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. ``mlr --prepipe 'zcat -cf'``. Examples: - -:: - - # These two produce the same output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz - # With multiple input files you need --prepipe: - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz - $ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz - -:: - - # Similar to the above, but with compressed output as well as input: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz - -:: - - # Similar to the above, but with different compression tools for input and output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz - $ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz - $ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz - -.. _reference-separators: - -Record/field/pair separators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller has record separators ``IRS`` and ``ORS``, field separators ``IFS`` and ``OFS``, and pair separators ``IPS`` and ``OPS``. For example, in the DKVP line ``a=1,b=2,c=3``, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values. - -Options: - -:: - - --rs --irs --ors - --fs --ifs --ofs --repifs - --ps --ips --ops - -* You can change a separator from input to output via e.g. ``--ifs = --ofs :``. Or, you can specify that the same separator is to be used for input and output via e.g. ``--fs :``. - -* The pair separator is only relevant to DKVP format. - -* Pretty-print and xtab formats ignore the separator arguments altogether. - -* The ``--repifs`` means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. ``2,9,,,,,6,5,4``. On the other hand, if the field separator is a space, it might be more natural to parse ``2 4 5`` the same as ``2 4 5``: ``--repifs --ifs ' '`` lets this happen. In fact, the ``--ipprint`` option above is internally implemented in terms of ``--repifs``. - -* Just write out the desired separator, e.g. ``--ofs '|'``. But you may use the symbolic names ``newline``, ``space``, ``tab``, ``pipe``, or ``semicolon`` if you like. - -Number formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The command-line option ``--ofmt {format string}`` is the global number format for commands which generate numeric output, e.g. ``stats1``, ``stats2``, ``histogram``, and ``step``, as well as ``mlr put``. Examples: - -:: - - --ofmt %.9le --ofmt %.6lf --ofmt %.0lf - -These are just C ``printf`` formats applied to double-precision numbers. Please don't use ``%s`` or ``%d``. Additionally, if you use leading width (e.g. ``%18.12lf``) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller's pretty-print format (``mlr --opprint``) to column-align numerical data. - -To apply formatting to a single field, overriding the global ``ofmt``, use ``fmtnum`` function within ``mlr put``. For example: - -:: - - $ echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")' - x=3.1,y=4.3,z=13.330000 - -:: - - $ echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")' - x=0xffff,y=0xff,z=00feff01 - -Input conversion from hexadecimal is done automatically on fields handled by ``mlr put`` and ``mlr filter`` as long as the field value begins with "0x". To apply output conversion to hexadecimal on a single column, you may use ``fmtnum``, or the keystroke-saving ``hexfmt`` function. Example: - -:: - - $ echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)' - x=0xffff,y=0xff,z=0xfeff01 - -Data transformations (verbs) ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-verbs`. - -Expression language for filter and put ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-dsl`. - -then-chaining ----------------------------------------------------------------- - -In accord with the `Unix philosophy `_, you can pipe data into or out of Miller. For example: - -:: - - mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime - -You can, if you like, instead simply chain commands together using the ``then`` keyword: - -:: - - mlr cut --complement -f os_version then sort -f hostname,uptime *.dat - -(You can precede the very first verb with ``then``, if you like, for symmetry.) - -Here's a performance comparison: - -:: - - % cat piped.sh - mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null - - % time sh piped.sh - real 0m2.828s - user 0m3.183s - sys 0m0.137s - - - % cat chained.sh - mlr cut -x -f i,y then sort -n y data/big > /dev/null - - % time sh chained.sh - real 0m2.082s - user 0m1.933s - sys 0m0.137s - -There are two reasons to use then-chaining: one is for performance, although I don't expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way. - -The other reason to use then-chaining is for simplicity: you don't have re-type formatting flags (e.g. ``--csv --fs tab``) at every pipeline stage. - -Auxiliary commands ----------------------------------------------------------------- - -There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they're delivered within the main Miller executable for convenience. - -:: - - $ mlr aux-list - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - -:: - - $ mlr lecat --help - Usage: mlr lecat [options] {zero or more file names} - Simply echoes input, but flags CR characters in red and LF characters in green. - If zero file names are supplied, standard input is read. - Options: - --mono: don't try to colorize the output - -h or --help: print this message - -:: - - $ mlr termcvt --help - Usage: mlr termcvt [option] {zero or more file names} - Option (exactly one is required): - --cr2crlf - --lf2crlf - --crlf2cr - --crlf2lf - --cr2lf - --lf2cr - -I in-place processing (default is to write to stdout) - -h or --help: print this message - Zero file names means read from standard input. - Output is always to standard output; files are not written in-place. - -:: - - $ mlr hex --help - Usage: mlr hex [options] {zero or more file names} - Simple hex-dump. - If zero file names are supplied, standard input is read. - Options: - -r: print only raw hex without leading offset indicators or trailing ASCII dump. - -h or --help: print this message - -:: - - $ mlr unhex --help - Usage: mlr unhex [option] {zero or more file names} - Options: - -h or --help: print this message - Zero file names means read from standard input. - Output is always to standard output; files are not written in-place. - -Examples: - -:: - - $ echo 'Hello, world!' | mlr lecat --mono - Hello, world![LF] - -:: - - $ echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono - Hello, world![CR][LF] - -:: - - $ mlr hex data/budget.csv - 00000000: 23 20 41 73 61 6e 61 20 2d 2d 20 68 65 72 65 20 |# Asana -- here | - 00000010: 61 72 65 20 74 68 65 20 62 75 64 67 65 74 20 66 |are the budget f| - 00000020: 69 67 75 72 65 73 20 79 6f 75 20 61 73 6b 65 64 |igures you asked| - 00000030: 20 66 6f 72 21 0a 74 79 70 65 2c 71 75 61 6e 74 | for!.type,quant| - 00000040: 69 74 79 0a 70 75 72 70 6c 65 2c 34 35 36 2e 37 |ity.purple,456.7| - 00000050: 38 0a 67 72 65 65 6e 2c 36 37 38 2e 31 32 0a 6f |8.green,678.12.o| - 00000060: 72 61 6e 67 65 2c 31 32 33 2e 34 35 0a |range,123.45.| - -:: - - $ mlr hex -r data/budget.csv - 23 20 41 73 61 6e 61 20 2d 2d 20 68 65 72 65 20 - 61 72 65 20 74 68 65 20 62 75 64 67 65 74 20 66 - 69 67 75 72 65 73 20 79 6f 75 20 61 73 6b 65 64 - 20 66 6f 72 21 0a 74 79 70 65 2c 71 75 61 6e 74 - 69 74 79 0a 70 75 72 70 6c 65 2c 34 35 36 2e 37 - 38 0a 67 72 65 65 6e 2c 36 37 38 2e 31 32 0a 6f - 72 61 6e 67 65 2c 31 32 33 2e 34 35 0a - -:: - - $ mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex - #*Asana*--*here*are*the*budget*figures*you*asked*for! - type,quantity - purple,456.78 - green,678.12 - orange,123.45 - -Data types ----------------------------------------------------------------- - -Miller's input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like "3"; field values are usually strings. Field values' ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations. - -Field values are treated as numeric for the following: - -* Numeric sort: ``mlr sort -n``, ``mlr sort -nr``. -* Statistics: ``mlr histogram``, ``mlr stats1``, ``mlr stats2``. -* Cross-record arithmetic: ``mlr step``. - -For ``mlr put`` and ``mlr filter``: - -* Miller's types for function processing are **empty-null** (empty string), **absent-null** (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), **error**, **string**, **float** (double-precision), **int** (64-bit signed), and **boolean**. - -* On input, string values representable as numbers, e.g. "3" or "3.1", are treated as int or float, respectively. If a record has ``x=1,y=2`` then ``mlr put '$z=$x+$y'`` will produce ``x=1,y=2,z=3``, and ``mlr put '$z=$x.$y'`` does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the ``string`` function: ``mlr put '$z=string($x).string($y)'`` will produce ``x=1,y=2,z=12``. - -* On input, string values representable as boolean (e.g. ``"true"``, ``"false"``) are *not* automatically treated as boolean. (This is because ``"true"`` and ``"false"`` are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the ``boolean`` function to coerce: e.g. giving the record ``x=1,y=2,w=false`` to ``mlr put '$z=($x<$y) || boolean($w)'``. - -* Functions take types as described in ``mlr --help-all-functions``: for example, ``log10`` takes float input and produces float output, ``gmt2sec`` maps string to int, and ``sec2gmt`` maps int to string. - -* All math functions described in ``mlr --help-all-functions`` take integer as well as float input. - -.. _reference-null-data: - -Null data: empty and absent ----------------------------------------------------------------- - -One of Miller's key features is its support for **heterogeneous** data. For example, take ``mlr sort``: if you try to sort on field ``hostname`` when not all records in the data stream *have* a field named ``hostname``, it is not an error (although you could pre-filter the data stream using ``mlr having-fields --at-least hostname then sort ...``). Rather, records lacking one or more sort keys are simply output contiguously by ``mlr sort``. - -Miller has two kinds of null data: - -* **Empty (key present, value empty)**: a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. ``x=,y=2`` in the data input stream, or assignment ``$x=""`` or ``@x=""`` in ``mlr put``. - -* **Absent (key not present)**: a field name is not present, e.g. input record is ``x=1,y=2`` and a ``put`` or ``filter`` expression refers to ``$z``. Or, reading an out-of-stream variable which hasn't been assigned a value yet, e.g. ``mlr put -q '@sum += $x; end{emit @sum}'`` or ``mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'``. - -You can test these programatically using the functions ``is_empty``/``is_not_empty``, ``is_absent``/``is_present``, and ``is_null``/``is_not_null``. For the last pair, note that null means either empty or absent. - -Rules for null-handling: - -* Records with one or more empty sort-field values sort after records with all sort-field values present: - -:: - - $ mlr cat data/sort-null.dat - a=3,b=2 - a=1,b=8 - a=,b=4 - x=9,b=10 - a=5,b=7 - -:: - - $ mlr sort -n a data/sort-null.dat - a=1,b=8 - a=3,b=2 - a=5,b=7 - a=,b=4 - x=9,b=10 - -:: - - $ mlr sort -nr a data/sort-null.dat - a=,b=4 - a=5,b=7 - a=3,b=2 - a=1,b=8 - x=9,b=10 - -* Functions/operators which have one or more *empty* arguments produce empty output: e.g. - -:: - - $ echo 'x=2,y=3' | mlr put '$a=$x+$y' - x=2,y=3,a=5 - -:: - - $ echo 'x=,y=3' | mlr put '$a=$x+$y' - x=,y=3,a= - -:: - - $ echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)' - x=,y=3,a=,b=1.098612 - -with the exception that the ``min`` and ``max`` functions are special: if one argument is non-null, it wins: - -:: - - $ echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)' - x=,y=3,a=3,b=3 - -* Functions of *absent* variables (e.g. ``mlr put '$y = log10($nonesuch)'``) evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, **any expression which evaluates to absent is not stored in the left-hand side of an assignment statement**: - -:: - - $ echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y' - x=2,y=3,b=3,c=5 - -:: - - $ echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)' - x=2,y=3,a=2,b=3 - -* Likewise, for assignment to maps, **absent-valued keys or values result in a skipped assignment**. - -The reasoning is as follows: - -* Empty values are explicit in the data so they should explicitly affect accumulations: ``mlr put '@sum += $x'`` should accumulate numeric ``x`` values into the sum but an empty ``x``, when encountered in the input data stream, should make the sum non-numeric. To work around this you can use the ``is_not_null`` function as follows: ``mlr put 'is_not_null($x) { @sum += $x }'`` - -* Absent stream-record values should not break accumulations, since Miller by design handles heterogenous data: the running ``@sum`` in ``mlr put '@sum += $x'`` should not be invalidated for records which have no ``x``. - -* Absent out-of-stream-variable values are precisely what allow you to write ``mlr put '@sum += $x'``. Otherwise you would have to write ``mlr put 'begin{@sum = 0}; @sum += $x'`` -- which is tolerable -- but for ``mlr put 'begin{...}; @sum[$a][$b] += $x'`` you'd have to pre-initialize ``@sum`` for all values of ``$a`` and ``$b`` in your input data stream, which is intolerable. - -* The penalty for the absent feature is that misspelled variables can be hard to find: e.g. in ``mlr put 'begin{@sumx = 10}; ...; update @sumx somehow per-record; ...; end {@something = @sum * 2}'`` the accumulator is spelt ``@sumx`` in the begin-block but ``@sum`` in the end-block, where since it is absent, ``@sum*2`` evaluates to 2. See also the section on :ref:`reference-dsl-errors-and-transparency`. - -Since absent plus absent is absent (and likewise for other operators), accumulations such as ``@sum += $x`` work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don't desire. To work around this -- namely, to set an output field only for records which have all the inputs present -- you can use a pattern-action block with ``is_present``: - -:: - - $ mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -:: - - $ mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000 - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000 - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000 - -:: - - $ mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000 - record_count=100,resource=/path/to/file,loadmillis=0.000000 - resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000 - record_count=150,resource=/path/to/second/file,loadmillis=0.000000 - resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000 - -If you're interested in a formal description of how empty and absent fields participate in arithmetic, here's a table for plus (other arithmetic/boolean/bitwise operators are similar): - -:: - - $ mlr --print-type-arithmetic-info - (+) | error absent empty string int float bool - ------ + ------ ------ ------ ------ ------ ------ ------ - error | error error error error error error error - absent | error absent absent error int float error - empty | error absent empty error empty empty error - string | error error error error error error error - int | error int empty error int float error - float | error float empty error float float error - bool | error error error error error error error - -String literals ----------------------------------------------------------------- - -You can use the following backslash escapes for strings such as between the double quotes in contexts such as ``mlr filter '$name =~ "..."'``, ``mlr put '$name = $othername . "..."'``, ``mlr put '$name = sub($name, "...", "...")``, etc.: - -* ``\a``: ASCII code 0x07 (alarm/bell) -* ``\b``: ASCII code 0x08 (backspace) -* ``\f``: ASCII code 0x0c (formfeed) -* ``\n``: ASCII code 0x0a (LF/linefeed/newline) -* ``\r``: ASCII code 0x0d (CR/carriage return) -* ``\t``: ASCII code 0x09 (tab) -* ``\v``: ASCII code 0x0b (vertical tab) -* ``\\``: backslash -* ``\"``: double quote -* ``\123``: Octal 123, etc. for ``\000`` up to ``\377`` -* ``\x7f``: Hexadecimal 7f, etc. for ``\x00`` up to ``\xff`` - -See also https://en.wikipedia.org/wiki/Escape_sequences_in_C. - -These replacements apply only to strings you key in for the DSL expressions for ``filter`` and ``put``: that is, if you type ``\t`` in a string literal for a ``filter``/``put`` expression, it will be turned into a tab character. If you want a backslash followed by a ``t``, then please type ``\\t``. - -However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named ``field``, ``mlr put '$field = gsub($field, "\\t", "\t")'``. If you need to make such a replacement for all fields in your data, you should probably simply use the system ``sed`` command. - -Regular expressions ----------------------------------------------------------------- - -Miller lets you use regular expressions (of type POSIX.2) in the following contexts: - -* In ``mlr filter`` with ``=~`` or ``!=~``, e.g. ``mlr filter '$url =~ "http.*com"'`` - -* In ``mlr put`` with ``sub`` or ``gsub``, e.g. ``mlr put '$url = sub($url, "http.*com", "")'`` - -* In ``mlr having-fields``, e.g. ``mlr having-fields --any-matching '^sda[0-9]'`` - -* In ``mlr cut``, e.g. ``mlr cut -r -f '^status$,^sda[0-9]'`` - -* In ``mlr rename``, e.g. ``mlr rename -r '^(sda[0-9]).*$,dev/\1'`` - -* In ``mlr grep``, e.g. ``mlr --csv grep 00188555487 myfiles*.csv`` - -Points demonstrated by the above examples: - -* There are no implicit start-of-string or end-of-string anchors; please use ``^`` and/or ``$`` explicitly. - -* Miller regexes are wrapped with double quotes rather than slashes. - -* The ``i`` after the ending double quote indicates a case-insensitive regex. - -* Capture groups are wrapped with ``(...)`` rather than ``\(...\)``; use ``\(`` and ``\)`` to match against parentheses. - -For ``filter`` and ``put``, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ``.``, or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching. - -Example: - -:: - - $ cat data/regex-in-data.dat - name=jane,regex=^j.*e$ - name=bill,regex=^b[ou]ll$ - name=bull,regex=^b[ou]ll$ - -:: - - $ mlr filter '$name =~ $regex' data/regex-in-data.dat - name=jane,regex=^j.*e$ - name=bull,regex=^b[ou]ll$ - -Regex captures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Regex captures of the form ``\0`` through ``\9`` are supported as - -* Captures have in-function context for ``sub`` and ``gsub``. For example, the first ``\1,\2`` pair belong to the first ``sub`` and the second ``\1,\2`` pair belong to the second ``sub``: - -:: - - mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")' - -* Captures endure for the entirety of a ``put`` for the ``=~`` and ``!=~`` operators. For example, here the ``\1,\2`` are set by the ``=~`` operator and are used by both subsequent assignment statements: - -:: - - mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"' - -* The captures are not retained across multiple puts. For example, here the ``\1,\2`` won't be expanded from the regex capture: - -:: - - mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"' - -* Captures are ignored in ``filter`` for the ``=~`` and ``!=~`` operators. For example, there is no mechanism provided to refer to the first ``(..)`` as ``\1`` or to the second ``(....)`` as ``\2`` in the following filter statement: - -:: - - mlr filter '$a =~ "(..)_(....)' - -* Up to nine matches are supported: ``\1`` through ``\9``, while ``\0`` is the entire match string; ``\15`` is treated as ``\1`` followed by an unrelated ``5``. - -Arithmetic ----------------------------------------------------------------- - -Input scanning -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g ``123`` or ``0xabcd``, is treated as an integer; otherwise, input scannable as float (``4.56`` or ``8e9``) is treated as float; everything else is a string. - -If you want all numbers to be treated as floats, then you may use ``float()`` in your filter/put expressions (e.g. replacing ``$c = $a * $b`` with ``$c = float($a) * float($b)``) -- or, more simply, use ``mlr filter -F`` and ``mlr put -F`` which forces all numeric input, whether from expression literals or field values, to float. Likewise ``mlr stats1 -F`` and ``mlr step -F`` force integerable accumulators (such as ``count``) to be done in floating-point. - -Conversion by math routines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For most math functions, integers are cast to float on input, and produce float output: e.g. ``exp(0) = 1.0`` rather than ``1``. The following, however, produce integer output if their inputs are integers: ``+`` ``-`` ``*`` ``/`` ``//`` ``%`` ``abs`` ``ceil`` ``floor`` ``max`` ``min`` ``round`` ``roundm`` ``sgn``. As well, ``stats1 -a min``, ``stats1 -a max``, ``stats1 -a sum``, ``step -a delta``, and ``step -a rsum`` produce integer output if their inputs are integers. - -Conversion by arithmetic operators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float. - -The short of it is that Miller does this transparently for you so you needn't think about it. - -Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -2\ :sup:`63` or greater than 2\ :sup:`63`\ -1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas -- so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range: - -:: - - 64-bit integer 64-bit integer Casted to double Back to 64-bit - in hex in decimal integer - 0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000 - 0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000 - 0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000 - -That is, one cannot check an integer product to see if it is precisely greater than 2\ :sup:`63`\ -1 or less than -2\ :sup:`63` using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 2\ :sup:`63`, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.) - -Pythonic division -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Division and remainder are `pythonic `_: - -* Quotient of integers is floating-point: ``7/2`` is ``3.5``. -* Integer division is done with ``//``: ``7//2`` is ``3``. This rounds toward the negative. -* Remainders are non-negative. - -On-line help ----------------------------------------------------------------- - -Examples: - -:: - - $ mlr --help - Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} - - Command-line-syntax examples: - mlr --csv cut -f hostname,uptime mydata.csv - mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv - mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - mlr stats2 -a linreg-pca -f u,v -g shape data/* - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' - mlr --from infile.dat put -f analyze.mlr - mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - Data-format examples: - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - - Help options: - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. - - Customization via .mlrrc: - You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. - For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file - and that will be the default input/output format unless otherwise specified on the command line. - - The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. - Hash-style comments and blank lines are ignored. - - Sample .mlrrc: - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - How to specify location of .mlrrc: - * If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. - * Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - - See also: - https://johnkerl.org/miller/doc/customization.html - - Verbs: - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down fill-empty filter format-values - fraction grep group-by group-like having-fields head histogram join label - least-frequent merge-fields most-frequent nest nothing put regularize - remove-empty-columns rename reorder repeat reshape sample sec2gmt - sec2gmtdate seqgen shuffle skip-trivial-records sort sort-within-records - stats1 stats2 step tac tail tee top uniq unsparsify - - Functions for the filter and put verbs: - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ - !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub - ssub substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin - sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec - fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt - sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms - strftime strftime_local strptime strptime_local systime is_absent is_bool - is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map - is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum - splitkv splitkvx splitnv splitnvx - - Please use "mlr --help-function {function name}" for function-specific help. - - Data-format options, for input, output, or both: - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. - - Comments in data: - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - - Format-conversion keystroke-saver options, for input, output, or both: - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - - Compressed-data options: - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. - - Separator options, for input, output, or both: - --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space - - Relevant to CSV/CSV-lite input only: - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --no-implicit-csv-header Do not use --implicit-csv-header. This is the default - anyway -- the main use is for the flags to 'mlr join' if you have - main file(s) which are headerless but you want to join in on - a file which does have a CSV header. Then you could use - 'mlr --csv --implicit-csv-header join --no-implicit-csv-header - -l your-join-in-with-header.csv ... your-headerless.csv' - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. - - Double-quoting for CSV output: - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. - - Numerical formatting: - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. - - Other options: - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. - - Then-chaining: - Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color - - Auxiliary commands: - Miller has a few otherwise-standalone executables packaged within it. - They do not participate in any other parts of Miller. - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - - For more information please see http://johnkerl.org/miller/doc and/or - http://github.com/johnkerl/miller. This is Miller version v5.10.2-dev. - -:: - - $ mlr sort --help - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z diff --git a/docs6/_build/html/_sources/release-docs.rst.txt b/docs6/_build/html/_sources/release-docs.rst.txt deleted file mode 100644 index e1ca4b2a3..000000000 --- a/docs6/_build/html/_sources/release-docs.rst.txt +++ /dev/null @@ -1,21 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Documents by release -================================================================ - -As of September 2020, for 5.9.1 onward, release-specific docs will be handled automatically by https://miller.readthedocs.io whenever a new release is tagged at https://github.com/johnkerl/miller/releases. - -Information here is for documents from before the readthedocs port: - -* `Head `_ -* `Miller 5.9.1 `_ -* `Miller 5.9.0 `_ -* `Miller 5.8.0 `_ -* `Miller 5.7.0 `_ -* `Miller 5.6.2 `_ -* `Miller 5.6.1 `_ -* `Miller 5.6.0 `_ -* `Miller 5.5.0 `_ -* `Miller 5.4.0 `_ -* `Miller 5.3.0 `_ diff --git a/docs6/_build/html/_sources/sql-examples.rst.txt b/docs6/_build/html/_sources/sql-examples.rst.txt deleted file mode 100644 index 97770148f..000000000 --- a/docs6/_build/html/_sources/sql-examples.rst.txt +++ /dev/null @@ -1,227 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -SQL examples -==================== - -.. _sql-output-examples: - -SQL-output examples -^^^^^^^^^^^^^^^^^^^ - -I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with ``mlr --tsv`` or ``mlr --tsvlite``. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller -- whichever is most convenient for my needs at the moment. - -For example, using default output formatting in ``mysql`` we get formatting like Miller's ``--opprint --barred``:: - - $ mysql --database=mydb -e 'show columns in mytable' - +------------------+--------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +------------------+--------------+------+-----+---------+-------+ - | id | bigint(20) | NO | MUL | NULL | | - | category | varchar(256) | NO | | NULL | | - | is_permanent | tinyint(1) | NO | | NULL | | - | assigned_to | bigint(20) | YES | | NULL | | - | last_update_time | int(11) | YES | | NULL | | - +------------------+--------------+------+-----+---------+-------+ - -Using ``mysql``'s ``-B`` we get TSV output:: - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat - Field Type Null Key Default Extra - id bigint(20) NO MUL NULL - - category varchar(256) NO - NULL - - is_permanent tinyint(1) NO - NULL - - assigned_to bigint(20) YES - NULL - - last_update_time int(11) YES - NULL - - -Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.:: - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat - [ - { - "Field": "id", - "Type": "bigint(20)", - "Null": "NO", - "Key": "MUL", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "category", - "Type": "varchar(256)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "is_permanent", - "Type": "tinyint(1)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "assigned_to", - "Type": "bigint(20)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "last_update_time", - "Type": "int(11)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - } - ] - - $ mysql --database=mydb -B -e 'select * from mytable' > query.tsv - - $ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to - category assigned_to id_count - special 10000978 207 - special 10003924 385 - special 10009872 168 - standard 10000978 524 - standard 10003924 392 - standard 10009872 108 - ... - -Again, all the examples in the CSV section apply here -- just change the input-format flags. - -.. _sql-input-examples: - -SQL-input examples -^^^^^^^^^^^^^^^^^^ - -One use of NIDX (value-only, no keys) format is for loading up SQL tables. - -Create and load SQL table:: - - mysql> CREATE TABLE abixy( - a VARCHAR(32), - b VARCHAR(32), - i BIGINT(10), - x DOUBLE, - y DOUBLE - ); - Query OK, 0 rows affected (0.01 sec) - - bash$ mlr --onidx --fs comma cat data/medium > medium.nidx - - mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ; - Query OK, 10000 rows affected (0.07 sec) - Records: 10000 Deleted: 0 Skipped: 0 Warnings: 0 - - mysql> SELECT COUNT(*) AS count FROM abixy; - +-------+ - | count | - +-------+ - | 10000 | - +-------+ - 1 row in set (0.00 sec) - - mysql> SELECT * FROM abixy LIMIT 10; - +------+------+------+---------------------+---------------------+ - | a | b | i | x | y | - +------+------+------+---------------------+---------------------+ - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | - | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | - | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | - | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | - | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - +------+------+------+---------------------+---------------------+ - -Aggregate counts within SQL:: - - mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC; - +------+------+-------+ - | a | b | count | - +------+------+-------+ - | zee | wye | 455 | - | pan | eks | 429 | - | pan | pan | 427 | - | wye | hat | 426 | - | hat | wye | 423 | - | pan | hat | 417 | - | eks | hat | 417 | - | pan | zee | 413 | - | eks | eks | 413 | - | zee | hat | 409 | - | eks | wye | 407 | - | zee | zee | 403 | - | pan | wye | 395 | - | wye | pan | 392 | - | zee | eks | 391 | - | zee | pan | 389 | - | hat | eks | 389 | - | wye | eks | 386 | - | wye | zee | 385 | - | hat | zee | 385 | - | hat | hat | 381 | - | wye | wye | 377 | - | eks | pan | 371 | - | hat | pan | 363 | - | eks | zee | 357 | - +------+------+-------+ - 25 rows in set (0.01 sec) - -Aggregate counts within Miller:: - - $ mlr --opprint uniq -c -g a,b then sort -nr count data/medium - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - hat pan 363 - eks zee 357 - -Pipe SQL output to aggregate counts within Miller:: - - $ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - wye pan 392 - zee eks 391 - zee pan 389 - hat eks 389 - wye eks 386 - hat zee 385 - wye zee 385 - hat hat 381 - wye wye 377 - eks pan 371 - hat pan 363 - eks zee 357 diff --git a/docs6/_build/html/_sources/why.rst.txt b/docs6/_build/html/_sources/why.rst.txt deleted file mode 100644 index 73feab2e7..000000000 --- a/docs6/_build/html/_sources/why.rst.txt +++ /dev/null @@ -1,56 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Why? -================================================================ - -Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers. - -Who is Miller for? ----------------------------------------------------------------- - -For background, I'm a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. **Initially I wrote Miller mainly for myself:** I'm coder-friendly (being a coder); I'm Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I've encountered them all); I do all my work on Linux or OSX. - -But now there's this neat little tool **which seems to be useful for people in various disciplines**. I don't even know entirely *who*. I can click through Github starrers and read a bit about what they seem to do, but not everyone that uses Miller is even *on* Github (or stars things). I've gotten a lot of feature requests through Github -- but only from people who are Github users. Not everyone's a coder (it seems like a lot of Miller's Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on. - -So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn't? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even *is* in the first place? Should I think differently about who it's for? - -What was Miller created to do? ----------------------------------------------------------------- - -First: there are tools like ``xsv`` which handles CSV marvelously and ``jq`` which handles JSON marvelously, and so on -- but I over the years of my career in the software industry I've found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same *except* for format. So the number one thing about Miller is doing common things while supporting **multiple formats**: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream -- either in the same format as input, or in a different format. - -Second thing, a lot like the first: just as I didn't want to build something only for a single file format, I didn't want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to **solve as many problems simultaneously as possible**. - -Third: it had to be **streaming**. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it's maybe less important, but I'm unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time. - -Fourth: it had to be **fast**. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a *lot* lower -- it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn't write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C. - -Fifth thing: I wanted Miller to be **pipe-friendly and interoperate with other command-line tools**. Since the basic paradigm is ingest records, transform records, emit records -- where the input and output formats can be the same or different, and the transform can be complex, or just pass-through -- this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the "real" work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can. - -Sixth thing: Must have **comprehensive documentation and unit-test**. Since Miller handles a lot of formats and solves a lot of problems, there's a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself -- not only through web docs like the one you're reading but also through ``man mlr`` and ``mlr --help``, ``mlr sort --help``, etc. - -Seventh thing: **Must have a domain-specific language** (DSL) **but also must let you do common things without it**. All those little verbs Miller has to help you *avoid* having to write for-loops are great. I use them for keystroke-saving: ``mlr stats1 -a mean,stddev,min,max -f quantity``, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: ``mlr put '$distance = $rate * $time'`` or anything else you can think up. In Perl/AWK/etc. it's all DSL. In xsv et al. it's all verbs. In Miller I like having the combination. - -Eighth thing: It's an **awful lot of fun to write**. In my experience I didn't find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don't guarantee it's unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life. - -Tradeoffs ----------------------------------------------------------------- - -Miller is command-line-only by design. People who want a graphical user interface won't find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying. - -Another tradeoff: supporting lists of records -- each with only one depth -- keeps me supporting only what can be expressed in *all* of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn't handle. So Miller can't (and won't) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats. - -A third tradeoff is doing build-from-scratch in a low-level language. It'd be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an ``eval`` of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the `rows `_ tool -- if you find Miller useful, you should check out ``rows`` as well. - -A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed -- so you can just say y=x+1 with a minimum number of keystrokes -- vs. having it do a good job of telling you when you've made a typo. This is a common paradigm across *all* languages. Some like Ruby you don't declare anything and they're quick to code little stuff in but programs of even a few thousand lines (which isn't large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get ``y=x+1`` by default but you can have things like ``int y = x+1`` etc. so the typesafety is opt-in. See also :ref:`reference-dsl-type-checking` for more information on type-checking. - -Related tools ----------------------------------------------------------------- - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. It doesn't mention `rows `_ so here's a plug for that as well. - -Moving forward ----------------------------------------------------------------- - -I originally aimed Miller at people who already know what ``sed``/``awk``/``cut``/``sort``/``join`` are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who *don't* know what those things are; people who aren't primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next. diff --git a/docs6/_build/html/_static/basic.css b/docs6/_build/html/_static/basic.css deleted file mode 100644 index 639cf72d8..000000000 --- a/docs6/_build/html/_static/basic.css +++ /dev/null @@ -1,860 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -/* CHANGE ME */ -div.body li { - margin:10px 0 0 0; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #0be54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0.5em; - content: ":"; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} diff --git a/docs6/_build/html/_static/classic.css b/docs6/_build/html/_static/classic.css deleted file mode 100644 index c18792d87..000000000 --- a/docs6/_build/html/_static/classic.css +++ /dev/null @@ -1,271 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -html { - /* CSS hack for macOS's scrollbar (see #1125) */ - background-color: #FFFFFF; -} - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #808080; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - /* CHANGE ME */ - background-color: #c0c0c0; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - /* CHANGE ME */ - background-color: #808080; - line-height: 30px; - color: #000000; -} - -div.related a { - /* CHANGE ME */ - color: #000000; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #000000; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #000000; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #000000; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #000000; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - /* CHANGE ME */ - color: #404040; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #800000; - text-decoration: none; -} - -a:visited { - color: #800000; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - /* CHANGE ME */ - color: #800000; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: unset; - color: unset; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th, dl.field-list > dt { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} diff --git a/docs6/_build/html/_static/doctools.js b/docs6/_build/html/_static/doctools.js deleted file mode 100644 index daccd209d..000000000 --- a/docs6/_build/html/_static/doctools.js +++ /dev/null @@ -1,315 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('
\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('

d@@9g6+V5d{(BuNQ=*4&28Q4n? zDfv!@sZF}yy;Z7fS$A0}3)4&&MytNB;DcC(vv_%JL#WiR9&a8jc1|tGc&|vjg?`%+ zw1;i{1oHXN=%aa}V?ju{T$$`y@{&E{pMrHxhBQ0p(+A^qn$$t_vQlbWB;NvbHW*Jy zO2Hp>?px(ryn+o-&v`}datAH#Yj+yiuxK?wlwSk)Nq!=|)sP3zGkF7U;rpZcz^M!!1h>g^14Ode07=Td67NOjr5v|ZMrvcjZTf^5EFIS97vHk0m^?ypZ z?mnp@n@v==M_8f!Io>fu*cIAE&A0|(qfG1Aq)2Pc4&=z#_%iQNm7Zd#((jMb^Mnw| zEjx{$qesVp8=QdV>mK$64;{rGcMn6}>~Ep2DO zPQq19gt?L~gYPF^V(0z@c4s)DO*a?vJXZ3eieIX~rg$0l$o@wTIn&zZ@CfE%%m4o{ zX~K4}09rCI9x{Z-U;C&}sFDl*3BS)Py3Tg8i;bwHwkk*5EFSzBAFBUXAG7QJZX>sK zm1Gx-eUq2lG|2N-ck-+1%XsBDPTCVJWiz|&cSaQIjhS^U2d`uI>f#}mpZ7wet7r*- zpL%7kYneA?=x@J}=J{aK>UzV15}(#v`koi>9+i}FJj+n>O`ycwcn&ZNTTvZQZq5V% zd78={l$+n2Juw~&QQXj?^(UmqduS7V&Fpqj=PF>cBT>;|Bco)86!TD>t>Mn(q4X)iPCgS{*OfpKi zrw)v{QXgQ!mJkTl;_d_QkF6>TTn=N(IjEZdUoXXN2m7G8H#g+|#Yr&D8ljuCl~hf? zCx9I(-_wv`mciq9lzPvNX~qTZ9iqOy2h8{;F=`lU9&gNjy{xTHQC9Icqi&e`FuFO; z@E4Q({j%v6P>v^zrV$pw2EJ$do(=66<(Cf|h4zQZ$vxzDm2vJ=e1?8xxm28hL$tK3 zt?I#S^lF{LMB@XrU;~~AU5q?N{H7aVz`h`ZeJO~hnR$Snc*C7Sx6XqmbI1;ngO##x zJN-zmSnGHXRdg41XdY`@zS}F8^#uFNtzAkM3-x_}sB(H>*YWy>$J%+DdgKhA2)CHG znOUtcIk%@d^MH;_oP+D3r1P0u6Z|%RvOrq39v1Ls@rWkIpr!MQrl%g?zhwS#kYra< zP;~gO;WGbg_|n@`ps);f(2I*wh|dfHy~Hc7fgsBuF@N^A@YQW~c70RDfsfa4K*XvL zsvZQ|{0wYJKCjIhHWPh7$^I(B`|rPyI|vSlpse!IRB&*^cx`^PyBF-19O@OSPL=zzSZ*f6MNDgta zD+;n#Ux%u0!ve(E(w&8ylf_L(|QrW>z}*xeDK*Zs?J@#v&!`@$m>)-177_!o$kE${uGU6c)Np zR7<&xamV?92E2hMt>XNHs$B{BH%TG$-B+bNx8fO_k7hkUxrG4FNv2c(r+i%>>b5?* zfs%?zyE*CQ3@1msX?k#DfYs!oy8vc{vY(Xr16aKM4i#d>mEvmia1}UxaXIl<4=5^^ zMF^W2Vs0k)zPgQ*CAuORZ{E4hIzeQ;A`-84D;Gf(h%o29D4?kpn*ETEnQguE(c$mrf%7f)>diJTQhv94YZ z^?o1+5bWp-e?ApQWt+Jv{b^JOy8UVJXK;_b=;zy7C&K}|$GfQ_&+m7F9hTP?zCFP} z+=wkQ=|KFB4^Of31yG;x`z`EM&U8u&Fu&8g3>Fj;6KU^{Q+Uvj)H?*lT$T!;DEc=7 zM8P;)47i~<1@_Xp0v8L?msPz{qo%nIx3z;N|J<5s3n1J_e`=Qfpi_08TMXzjpr zT9(8ms*Yz#vvO}nxBJ;Qv%1$nMX;SfNl%u0w^|3znpc<&Mj~%G^LOE*6oNw3;OC>R z4;!!o@Duc$%q*P?Y0Rz3A;|Va&6yrG$fkF|7V+ZczTBHAYT|cJtoC2!tv$OJI>0*} zGtG;XY4}1cOREUnYm+@;qJxa@{Tb(l1p+9_{*4}lK{kl+IJpO2QG;^O*Mg31e|P_z zF0!n%h|w_;Zh-7E(XU8Ov~tW$K@JOmF4x-qMw_e}6rrAA-+tA)?Crk3<2u&HuF$Hg z`(XtKXmY(5GKWL9@dQS4yiWm9n5Bxpfg^UBLuS=`8zWK&fhE+kD<-gGi)}i3Ov^@%?V4>_ujqb zj{A7R1P*pDiSnMawg?4x(S<6{8SMIqsG=d{=o z+70yVtpZCio^PdlYqR)~j+mo%4mn;>Iz)sYTd3x7koFr{iVOBt?hEK7sxp)U4qnuy z1`+J=cjo6`B~$87WfA50?*osmT7fX|C36j%bD)erQRSz`B0P~lQYGecL;RZpnjE0d7VXOg#f@Q6vRLkc8Bl}lX*oxMG54hc==nC( zEBzfu&tvFf=-*J!8r}YWS4GG$zFWqq1XwkW^L5?pK?^!v$dGh#MgEV=dih_->&~1n zxDH)(vDk)cpQc@z$mpIT`oS#{|7(3(SAHgDLeI+z0c`_5@4RWD><0*LgFFz9qYdw$ zO&2F#@O~_7zO}Kh{7f9*!&4R@UxR7S*3&TV#Q%ouR6gcDPA-)=Qrvd^GXm2{bm$cc zq(B$l6IYF@rL9n!Y;P9;5T|wChbizL5l{0ns|Q|(HGQrkZr6fCb^pONjy-8YaJQQ=&{ zOiFnuuAnR{813;Q;_z@G&SXTcy`@h6LE^99T%xbnQoBz3u;?C>7KH<$cOb5Et~V&@ zTVud!u-t6pNoRe9xye?hR>=65pz8U{CdOtf*>@8aX?5CMiYg|pA)kN9HTA)i4P5W? zDQ1VQi=L6W_wLM8bJ>lps#X0eA70OBI6hk@1}=)aZ>)&Atq()Y1eSO~cki1+&Q?;6 z6|oN44GQ-meJgrZf#5aEncFq1z4GFy`$TTgon&{RlDyC2uT=LbN8Q(C)C_!PsOr3{ zrWeJvn@wl!3GPcKJ}UvD5g9s&Y74nN)<`YF5v%&!PRpGV2oWt_-L>$1rIo;(=W5OP zruk!p4OuLs{HMK5N8al!;?Q8s$br|Zw~uwN&!{V;de+^z63^JMDm$*jjaezM+exUg9eod3(J-=flXDcK5#cY3Tcm({-gtDzUu z{mu+?^5l~N#!;*Zt`J;jvU?Umt0?8YTLAGe)jt(XH0_{f5RZiVx=Jqu9hPDn%W%yX zbm);c`@MOf^I0K>sx<5zqE&aOR&c^kDHl!+N*`_?(Y~1Hx87WD*%D}W8gEw%Q(U$l zc`J?403ZvoiIGpWUMtd?!*31FAh~kqVpY|Ht{`PH^=tTbOx45zbT2+vB-kJ2pPP$# zAcXJ;dMjQ~iM#FxLC-|Nz>iS#Q>ZDXZs~>d#8CkW%+YIC9N>EzB&DiMOr)!=QAl#Z z355=h-JjE2%%X3R_Z~NKY0;=pp!?aZH5hGjrhsGFmg{m``U>))nzlkApLr=WOFsGX z0BY^NA5SA5^sp|s(Unml^4vW2X6Ek7q-`%9OulL#V3(xrO}ItA(BYzhXRpYBBvQ7A zO3oVbgz&R1i2AWBU2-(dZbF&jzK66Q!-uNhcg6TZ{PxJiQ6>D@kH%kdfO>ohXs6$c z4AE-Dzw*8|nrNH$QgolRHmV)gLiDM54Ml_Qqs#;O4g_Uj3xfn(=4i#?*FA|g&a;lmW|ADLyXZ9Ee*<1HC z+KeaMIl7tICyGiyh3PHljnnV@9E4meZN=y9n6s&Lrm@MyO#j$Okw?qQ3o3E#!)jBJ z8LhU5RTgi}_OW{~=h(9{wA4k`E#20ew@mW;9Ybeh06MOJ%?1w@SWsKSF`-)kSfoMn z23q$xv`tP0B>h_VSyJjA+2MG|HM?{rTGVx|TXf3Rj&`2M|9Iq}+~aEkQ-taRXfw}> zqjWKs$n!lyg>$mSQQD-{F5d#`r}vW^>$j??os|Kn+_zuW5QF96jD(ECLLF%7Y%{c< zcf@k0&PxnkWg#^HCAb!!l4{MMcmgS=c9}MhXCF%+W#@M8O0}hI&NESCNzUDb>X_`( zG`sM!_T*I=ZRoVTVI5ojc5gtZ{vC7DQfvJ#juvyB8_#Gs^EiI4-FC&;w^6C+&8Z@{ zXMRon7vtu!Kg_P7ChBa*W~O<3czpWGd?|ihN>ig1&PhfI$k#*p&B=;ez|n@GFCxxBgkpsCufG zZ#>{l-3mEMub6R6@`)Rq7|gj^dbU|0f=1 zz@>v<+?Fd_xUE+F56!fpN8@$bW==`fU8mJ8MKQFOH*t>nQ@y+)H~hDet4f5ik=Ct4 zjTmg0He}xlUL)Hbuf^=j%AJ;9y1s9EaS#vj#eZWiF2$4+D(tT+_A&CV z3@|!gFbx|y>s{?JVF*gFM(0}Gpp+IW75NvgQv4ky{ZnXtrgc^kR4A8pH^qmIZ%=2| zqO#7i0!L?-aq8qRp83l@lO1SesA)eAJ(;Uxqur5i8n#OiRP_h zg#ZLWIK>zUm0TwmVmx6~wKfiJ`j<((ynt_;<%t|MS!??z>D6xy`l)=+v~VnJP30Ndin4}BhF(43ioQc|dtn?` zW&OczBfKxs*%s2Ea`!3!mSf~n0)14MJp0=2+YSeI`>5(EU2`K3a3R$G$xA@GIO>y1 zMFZ>y2JBvoKdN?_TI^{A+`OFYYpvSx0tc@F17mY}`s`T1se z3l|Vtghw=f5hKV(%N{vkcAe=y<8CWDiGWcTR6YkXcBbB+_n0ppUZ7r zC0b);TTZ__Ybro7qfT2Uj22VGuaM}rBGh!} za4-SQ7P;_NULb!up0vUly4R1~^(XtQ0i*1PvW=Oy|0v#66xfrldGmOxb|2~M)iGVg z3w91WZrU)>dP##X26xp>C2gyt4A(e~a-q;FHXM$?H?t8$*H12TI}xzH-LOTH$}KIoknYnfMOF8}FApc}HToR?hON`m|Pc zUCX4;f*RcCYpX310%Lzaga6g4G6bx;Q)>E-tiSIMM9!A=OA}y`q*K1tLG1p*z>%GP zb9qa~S`9H?xZn42!2bxFHO;~0!#9+7)2z%6o%PG?&l%WOGtN8rZ`)ksxxHo$En?ni z{JOl}UxCK`w6;c9Tgq|e$C!+iCe9V)ryhszI#!KshBHS_)A0pWzirH#;6*HHb|$y{ zxskr5X}&&X4{v};-qxkcK_b+~n~E{JnAJot-}6-@(W8z+bYETK!=+w9FeDHEy=vV= zj!7=2dM!T32jSyXK+Y!duZlm-vJnz`%Wk~t4XV85%Px*$5)9Ns6i?EgQw;zb+$Mf( zSgowtNj~)-m!75`3uu3PkLiw9aHXl#aGHBQF8QlQvaYu(H4;;x*T*=Mz6i5=pSIAw z;osJ82|=xuP2YkKccc>KhBH1p>v7C@?b=qwM2{Ss@c58>$r+nePla1A_e2a>?ns^b zCgujA_aX$HQive(T56+x-j_!sA|{^_u4z+3{%uT`q?`yU*Ji-5e8g_I+Nip%zoVJf zPeez@`te`@wclJxHc;0s3UdAE7Ls^WV4eOuc!N-H@@8N)K&P&5E*5mUZFW{RqbEku zy6+Yoicnoy)g1h)s9L0SG#&JtzRd2So=$S9i64o#Lfh=JvyNWi^(yR7@QeY~iaZ#g z-lg`R<&+%7?VB#Fma?2lz^R~@By+VUWP$KMR1UTGxETpC%&dvF5B~t#KaBuPj#xbo zEDHO%oCV32gpTD9Wa=#Rnd4mFOp2mvv_r~__(~Sqv#1sj_HSa0saqY_ZrHhalf7@_ zO(x-gISC#tcwB8x(Qci?mYwd2oJL9<)%xQNCVd`E~MZ(l@jTQ127&o1wwUN7@b#LNrf3uRr8KItwNr9XWV@% zQ2VNY^G>*@%|o`y;~D2H;z=A)jz4EPSCHeP%A*we5u3d1DsS=$F}aFkaOj zT|aZy-ZN=Z#U;-A-Lry3dCDO_ShB&ksu+E?U`yWeaMMQhfJqKGGOzu+)O;*#?W?TFHzNxHx*tE?Q%6&G| zbqlK1mOO#2Ns;fmm$)!iM7F8AK|9oAdlZe%_SEIhdDFD8+1wP?WO30GUPpIP5;_!( zWB0TdF!!Q-)a=juaFJphWM-xxPgN5X%Cq|6`z{%>_ zmVL`$a4hP-F{OeQ8QDtjOB+hF>SA7gCanqx{V___7aO0keNIMPSar6m5kd z0|`IcJuk@Ro+~oQCz0dP{1>0!-O$7vqK>lu55`479vxz zqxWbYDBorw(Fm)EsoYI5MREM-9}6)D>xG~T_S4?4Qr5h}TK49Av^>^DLLKV1_#g~l zQtHX;IjW;VF_`j!M5oi3!*A^l*cUC72^F(Z&zL|9HDJ?p9sq-Nm{J(g7;B`na>EHs zT{^ypJQm1uu)N)hY!8SKZ0*=LMJs}edakLbN&^skX?k828+w~$Cy)g z1JRuR6g-Ddcmc*nRWlfkV+vEz=gS;Bv)eGZcnp{*k#!d2#;57w;B|{hUj>=28oIVG zTm!=sqSd6YNOp;+?`>w$H~SNP(5G$`bOYCNfjHpKK^gYu$9w|U2kg7BpPm5tZ&p`> z`^ws%N*?#GPD9Mb1iboE6yp1IQleRo{JBzwcBki==6NngHFue9tP(WTF=$+b=Z+di zOEfxMArBAD^jPGR^o?zQ%5H30gaMuY1-uo@anM z*0ZT^5lh&3bwO_6u2aYJ^M?uFczp_ zJ2Y7*ll4k0G&y`0*iNsm)8A`*%~%GNzN;jh8sBFlIr8Jjk%&@f z?5q1DPTcEVR{y(lxAjwfHE{wBldmA`ZUun;&5t%k&AwTNKLVLr6%)M*(}i`vC>#Cf zV6myPINLGv$Sk94&ln2q-aq}sn?Q(AM4dldu=M|6Q%J1fc?x7pTJWF*0XF_9IOL_Th-9tx!9=9GH}vPfhj(4jSFCz0XFuhhHtD*; z*8tSp?+uGB{U;uy5c#aj<}`f0%rmOl(0$CE|M)x_w3 zL;QnGAzuGqoDNjuHQ{jdOY*Vz2hA#2mz-Rz!R}e9rzf=Hw0g* zydmf%+hY^j%kRG*Fesc2h%)s~7%r`otE_o%fo>GHax^kvI)=UwUJvjdftS1ONO_Kg z^mma;m+`d${Jvnn22O{#f1LYKI)MdAazurPk*7Li`j8^+zdl?Raz2W?Tv}*!ygc8@ zeS%v3Hf_-J?Q41v)y~Wz{W#i`r6ORs*oI1u()5woE6khUPU=H4Cl2?Dg7V{@f;pc! zvi^pS1c1<11_7PpVPF=ed2HT2tw}*Ls+Nj4Kye%naW6~`9CXZ?I~JyD7q0>?HW>NX zw2V^bHl6+*1@^}}=4xi?<5cK1md=U1h2A7Y|3-sJV8fP5+lm1SxDG=_ie2nK&zZ#{3~8*U%X=MJ znybKI1iqHi0)RTa9fMux;U7_Lhc|011 zU{vetxm(rv_k;BEWBuo%DHzdjHCMq1pu*4f%)^~$dA8w?lAo8$1bYP+t6pMEQa(}A zHIJZ&==W!{O|TnIKI%Lab00%<3l{%6wVnj8lLxn`eUre$!xKob6b9AhzB|rhB}Qj` zUu~)vi@|bknyGBLVeP)SwtpDuJ6&C6^oWr1H zcXA?H*;MEZ9JE)89PGt}#4q(>HoS993~~xc+}r(ol0-7e21uqrq2GNN1Mde=VG{ww z#ImpiX~oTJY%g#%0((WF>?ff9LNR4PRSoZ^7cjFwGx4WwX6f$Nx^%0nxlCo+&$_1P zE2o?3-l8Bf4OSjYZzs4#9Ke!SiX_154!Aa1Fa_aNLi7oR1ANyz$!MDV(n0=T5M84e zL+-9<-iFSyl?ZlPu*_-$N|4t9-*P$plSR8OjTfDSHFqa*OlBSAzKO+}zQoT$rP=+1vI$?~=f&y5@~H%?_)DY7fW3JtQ9Ivb?F68x0!{ z4Q!-84=nXj>6K!LKMR!8e%>p$BvmIc6Iw3~EG>B9oIpr1SSR9SKM*319}b{{PrxJ_qE+H zWQ$ok+W3n(+&aoyytq@v^<<-0^n7syGOfbVa}%$`s9SXZCh8sU-!abSX<@Y3@$5oB zbM%*4UGsAOruRJs1K6&NLPdjRpeElY$I#5-D5FArgkwSS z$J3-bLkqqnxp=ag+-(&(;xH{rS03x)I$7^i7Esz}M@NKbW%B1Hj6S_duyWG}Hf~yL zeoXX49iK<+{)3X*M}>klZSXWM!lHz(JZ-yF46euaQ?*A>mY_W8*f{5Rrl4%XM#>@P z`@c|HZy1=ook%Pg!Sk4dO$ z<|lD9-1ZP1*a+GwS_ZW)?_I}LO~svo9Zv=O1B2Kn4->!gpd&vjZyTDKZnan3k!Hp2 zZ)4`-_?1c|$^%&+7-*V4>JtAvmoM&%RwHmCt}?2G@wz^!kL$(2?YZnb(UTEZ zbQgm?9Yp`w?xv3s9b7v7q9UoHL(IAaQfGSHXAuWc>V2ux zh)Q@oVq*xX7iX0mknr}tek#2f+63RAhGdbQGDeRj=$B#z(9YlD;2a0nV?* z5d~1y7NOBfd>_8K({%QVnL8h3GO{X{qs+DE>4@TEJAvJhMtwc+7;qZ-z=(J`zK8ZM>y~Mjo=9Ep`clcwdZyVT zu)M>rIEqOlbG#}H0rJ@DDX5NX>b$;R-TRU}oFVKWSoj?G1&QEvk-HyZAS(a#0?Vp& z?aQU{^SihE#;y-)YAa_|M%Ah2Fj3LxsS7->RV;m=?!qK(tSLX*c+TR{V&siqTPNW98o^HG_GK-oG_yv-C zy~rOACPYNryq~!v+-MR~67sba+m3oTq4*KQzfmnaLXsU+P|*O#+H=N2)5305;|G%* ztA;=m8fFp=$4)R(Q_>pho+Iy!@2Z-xql2|^D%X?+g_m1;GFk%%Ni{bV@W?(~N=Tk) zw>GUCdj(gtMQzN^Kuj`8osFZ?L-`cyX&XU4d(Cy0qlx-z$>l+&U@R{nV%8Yolk^y)0ITf$r;9OlMLJo!&dUYJMw&3H&gjBpx?q09*5ufPK-R~l1? zP2XsEU8j9Mr18El>MpIQKrL-Ap0~K~;ktB)jJ9(NGVViy)~+L^H#HXAr^3PbZ{Mw8 zux)%exJFq}?PZ;jow!LR{gk!BDS|zi=HH6-e$tda6*?jJYYWP{Lt9R19AoMM#Yhwl z&f8bVP|etx@J;!pTKQ*PVCc`}Ml_1u@?1();uG_->s|QBvP|jAs)deAcq4Anq40HS zGiR_b&*$FoCkoG}uP1}vNG8=uw8Sy{Jk(6eMnUv8VC@#|VO5f+eNb$5G9^8prp$uT zRNdI$-<=33J{+#ONqzv`$6G}+_kkfUVK&5)$RK?Gpe&y+b2u*{s$vV;tp~^R+Hb57 zpBk98Ruinx`O%cg54?PjftlsiJ6Qy!7nJ3vg(P5y{f)=Cqdn(Tu`b~AtX?n3X9e@* zwA%qF_3?-uG=CUq2QVyA8fRu2;zXZRSoTsT<}!$ z@M(zv!TI_kPHJq`{JXL@0M4xb>FDZxSPpU4>wRC&frxZG$FOg0mpj+ZR}A_eK1WsR z|75(`aGH$hzrN>3afa2b6dtJ2Uz12|;Xrgk-HGqn@vXq(Bh%3gdme_%^YaA_peuH2 zc`nk@^8RxG1$hKd877Z_%#Fq#P?i6OMgD~kd|OBB6E**+eD}T1dQRl?zwz0ghUlhD zLs_2|`8HXLch^t_IpnX$3>^I9$?3W}h=j&dd~T|+VO#m+l#&gqDj@-Xp@vAOOZR`W zh4eTWnVTZYCi9z6HF*BVSDUkRs6HpghQ?6+8j}TCGBU38Jzw=L*H`CcD)vd>!y;NB z3oj*o-c*n5QdMtvgUr1|n_BRP7#-hWcX*w2o!zSBZ^N8F^y*-eu~s`!M*hvxrfYu4 z&Gq=(@ZI}~JMZrx_e!+OH8GwA$5+zOxyPC~N*@dLj&mvkKaBD^){5nnJ>TXrb)F1m ztq~Cfg;jIgq{`Ty_9%>LKhvdH{ueo5T?)~h%FiTA1O6Vw-J^}R)nfvL`Qc+ZK>ppH zmb&HieU>$jC{M=rN{X|@+!=(#(9SQnrZ~ghp_g(&pk1C+5UYQ z+f!E@XXxoVVn{DUulVVl;&e#k!oY;d?!hk6-C1>~F56hfdhKFkWN*O}WSh^4z)h{w zI)ymKg*;tJ%(QqZ$;89fRo2IwyO(wWP=vhH;CKJ6@2ODm%l{F8OX^$8@qb_$IhYlNH#A525SUX+0N;%CJ$U3}J?psJIgfk#yT}^+Lm7Ml-8q~X zdU={60>$&3t&EZ6*mHKX5xumM_i^#u@=a5>#Wd) z!1-_TD`KFdG2A9Rg2qwej;?$tjCh%aFq$mXoAzX%)U-^g;T%2*NZGZdSw=Nc179)@q8CM_ zI$6coQ=Y||58Pn)pIAfz7$xOssKupD{GzdM;O|KCRd3c#Kg`@1LVQtT+;4ZB9KD<+ zmpu5oiOdm_I;d$n(`|?UgrV(yG~$x@e-t)>FDOQ+UzcXl#O%LdPLIfdHeHes&gc2j zS(QObXHYD~ADRMfSf?@Dz8{tjqSn)@FS<*itKK|lLk(FxT8aBImjmB8e)NWe==op% znIoFUn6`^7S2@}XRyrU3mkkeYN%jkvR72hiS!CpScHyx^mja1#6US4UiqoBBySY){ zD)2sS#f0voFvdx$=R9|^f9r^_u)7Pfir4&Tc0LgnXA2yI@!44Ri|DaE=~Y18FlV!` z42V7^mswV{2+)3Z#ZA)StRgwjxHEXpc;2AF>MxZs0sPPhKhC^Dt8$(WcvmKUidC~V z9=A;S+$B+&5v%6@CMXIuRPYs3V@kc)5x|%5hskx7s>7$6#}IuYbrurcv>4Hc-J=n> zoV(HQ(t2D8dOrVUBdhmd-kSmST~ko6q(zYH?QuC;YbUuiaE$?mwG}u6z(nb~Z)8bt zoWu-x_En-$b&uO~pExV_2|>&z(sCnploVt=;bUn+7cBVKjSzb7-^R;r$((ngBvu(7 zkk7jZ4(d!uttONt{bzX5L=(U_d%3bnVF;eYJ38W!AH5yZ_?oD4iPXhDNBBON3dcPG zHgBy4jX09AxU(I~G%^jC{MIWcto#*Uk>l3|f7l-5!cn6=WP=Fv!p>z@m5<0q!XRE% zoS%gxzRInj2dzJ@^UMgDwT?~e^b>Gu)O>YkVsC-4W;^AQJbn&Ks7F-?9gI{A;%pzV zsPtC}of_L5M9K)c6Hi%Y+WAclf-vlMs75DKN&Wn zMZM9oSf-v;9o`8(lUU<sSLSxl&^ND2QJdH~hF6E$3DH!C}e2L$iOVW=0oLr%lhU$S?Ho5ug-mBA2Uqy>C+8KL4iYo&E^yX zWvjHxS{a6~zeE{0=ie%6ms@(vR`u;R2E|XXcRkcql6o~Nv#mJ!Ma9p0?K*$8TCRM! z&S$_DGURwg9>$n{;9bO=V9ohLD0E<^7p);t5XaJJ1!mNlS$lc1_ej*JAhHjj$ObVF;_m#jLvApJ zD#g!p;yBgmdi$hPqj=7A&lXFBk`xtMCqvH|lkfEig+RrD$ww1N=`>ppo|q~5vbbVr zCqV1z6raf=wao}23z>D~b0sy`dZhM#vU77NCZww!7~ht*q=OX>b1j@nT})oniUNu_ zR)g*g%3=xOeLB%>irVe;UT*opC9ZSn+fEnI+cl(C_M|4Ij^oF>1+fCbCTNQzc3rY`_^jwBTC7e-YhbWEkkc0Je`pSjguRd27u-S zxe}P_+xkt}!qgc+(EWV+S<*TEb4touzjP*D7G&}x|9db!S|D&>NYDaz1F_{C<-@ZF zq~uPNC)|}G1u0|y#b0D_|C72M5uwSC4>5P|UecP!kE4acHyf%)Z0<6@>oZr@TV4~M zK0W6yjpe=emDF*XG<_C8c1{f%b0$t|%)A9#qd9MVOmyH_r1>(>RZw3e&`f^QGs`Kc z^T+14VciN3^|;K$i-?&z;|Z6!(Iao3?1>irx#YF{!yWXT7Jf;<2nbz>sP@X*QA=lS`fOLfY3`Gt%P{0Vahz*dB$b?x z5?@#%gl!zigCY&#OYftOn1<7%WgP`#X>+cuVIO4+d|or|;JUpi&%6bi+Gm+)$}r|v z^O$_}_l@S_z!>F!EHQs(kK6va8Pvy{_LSo>D~@^ac2WRxv+!vJ#?;BOqnvo40 zG;G0JdWL85_~e*ZD1keYlJ5K_yV#lp%h7jE^@(HCcE{C-0nfm;c+o}5?{>}1Bp4$5 zW>JTCqXcFx9WkN!kMu;G1h`k5as;|R=^SzF|KQN)tm?vZhfGLhloz7}KAiHp?`ux4u3Ok|Q~waTHalqDT(pk zGm2&AjcweCog3+hAu%NXKQDl*ZQat$Y`~sQKLEXH?P>eqY&B#&8N~c7(;8f{x&oCM zLs$v1ZGOrko94R|bj^>1N#^^*6-|Z-47x=3_J5k=8XNNDxKe_CUp1b9#8Zsb%dB>@ zn^j$D)sA}SjhYxR_JD}*TtlYKJ}2Q#dHAm(qqF?R>Cq*AtE+d}=gVqV=|vpgK!olu z;m0)R;tLqY((G)6mVu`&{}^c9Z<@~V_AwBV)RAN|vA)}!32zRzSVYNY()WR4pL7`t zq*K}!*w!CIqe)xE|BL%k6i&l(v{!;sQAwiPF#!MTwAZcgr~m<49P^b!c3gE^lQ*=<_pIs@a?5$Nt6{ANLeu*Urb>z?yIlbu zlIpLiUty|YsEo5AO8>;Zd6Mwbd+`0Se_!a~blXqo%Lp3Q|9Ing6#%2!6#vuZq8^XV_)+BOoiA_tB}UjOZFgsa zYuxMI#mx|{cB~*+pbb~*+2;-9+)I|aNy`XT34&yy8%ekYB`&o!ne|&aZC;K#40WbI zaFyEj{-6sE>zi#`97PD4DJxpBT=~@4KpqPv&)8$$-8oTQW-q>TCnI$<48nd!dti;K z(NSu^F6BAugDw*v>F7fK5ob(&odES(Cc||u2aLBzmLEPPSP8qnn`-ixX(Y)RV%hYT z-hFiM4NubME(`G92#NAMzH&9{hy4D3bX{dsl})r(L69z`8>PGZ03t02NOyO49y+9? zn?neQfOI2=?gr`Zjzh?S6PIt@b${Ofv*um%&fa_W?ETF1B$-5b!R)}-qsKMN(aTJ~ zso1I~f3IK#rZuWO;urmV)*%#Rs~S8|R2Yr^(bTDb<)YhQIAqDy@~9_yt|cbp*5Y71 zpV29CCL3*Q^u6)j`c)|Enw5K4%ahO0N*MlUxQt}ftKgFCu=hp8kM9I-Z%q_C)`zOo zte+-M@%S9LD4*)`F*#-`MbB-+S2T#h1h%dY5I`Jw6;YnOPaHSmMmT)+@?!fTtZAY7 zH)s7l-Lx~oG`{|b8sV;5M?T(61(u|9nJT01klp83QhpD+mig)K#R)_=>Y2zfue4*Y z=Xd*qMIKhJatV<{aqXj8V`mYsuQEqX-uCVIi-_T&sPQ6nUw-X;ya%Wy1>dXyBP?{D z)N}MtOw=VSjCT8)`!0i0LRK#En#~!XQfFr)HNFtsM{|*Fq7+RpIoHfaNu8CQg0LHq zaF1P}vYu4&YvW%f7NM)~LcXfR335UOrMNyI&F(nyc?5>gTj<% zNKYYJldOg2le&Dnw`kcqOqrPtu^#x-1fH4%V9-28!E{1+{-CT)nJ)yrQ7<0zv~wS0 zLM%>id)Rk1uh+lsLI3dPeCoGPPpA?SN_o6*vtCYw(W9Q$Jf3BLq z)+OnnB`N%%sc7>aCT6Vxnag~9|Ib_<$jhh6yfzPDNA4LTg_3Z?Q-{xJwg}&*gopLT z8jEg@?|7SNK|s(Eb%8?Tb&tv7*wZaI?>8BBpuNAoe-=f3MS9;>l*wm@2!Er%rY3sWcTfY8{LTy%6S$r^aR}U{W zHmfDIIhN|d`^)jx9TQ%9^XXg7V6;>u4#1ZSO$HGXJk@m^xtUWYNs0cY^<8)Bv_<8m zH$Iv@>|>!hP8L87Z}lYnkU3Y)bm972YKwve&(U+w`fwYidqc#?@>NuTrxRTIw)D%3 zt|ZqQ3g^38j>nHk#B5h#K8t8n090ocDq#1y3V+M-mO>5C`^|Y|{~w#eTgkkXV4}0? zq41B+fI~oIdcOjt!Q^2LUX=>jHL(_w-HpK$@i7!kijF*_M&Q$r(pah1M;h25lgxSW z`HrN?7*9;FL}H|7%D)&yhZJ#tb)Lq@wrXA9vaUhz`W^5VE&AxEI=e_ju1O*WZ(z}0 zceMJ6D7ncm1<9KN2Oj2KKB+XqC4=!ZB?gfJYGZA9x}hpY!NcVwm5|?T2{o;fqqqF(v2z@%9^2%R!%xH|Ksd%4Vn5J#>m5}ggKfU21K?s9`( zRXHzcKFLi=_`0(A?_=mwWMSq+fPNhMH4L; zzyJF9Nr>_pEOWxP1|Ug;FBVp~M0Ll2&SHl|qnA=+04$~u34eH`?nUUnhOgp$6gcRL z3DH2)`iUvOy8bw>F>NQ5(-DymGU5~*iTG>+Yx_6*>%lGQhl8slKe}3L|B+Il)8@5i zrY&>;b)0;c1tou9rHS^~1*e=)ArQ~(PT)OVYu%?*pZKq|QJAmCt<9@4+F=J#z z3h_`s2IfgED{JDpi7R>V+1-~k`+~NR7nL3;~$G|D6#2) zA6U?~`o-c~fER+BCrVT!@%yjp23K|7j@g+!aQ%YaTzh$wFKpLDXIq_GG>`X@rp=6D z@8zNl;hD}UlBKOCnqDfUdIxi$EpbyYfXR~qVmNHJNcOR8%>Kh-ce+e6l}x}GN6Ikq z5NO|LE*2~}7QN#SNo1@1+>?!_%Fza`Sz55tCJ%iX;Cw5Am5by(uXAuIo+CK4(9|oi zZ6wdIbGs*2!zs!ZfupVGgA3D>7|!-b3aF+`$VmcKZuCVsaD27*K}qdBsRp{@QBwhy zmoc_rH`lE6{X zT#+1)^+wdO%i>tvmFawrc6oqHUUmTXTR{Wg~!&0gJLR1a_$fv#wGe?j!JbR?MR zWoX&iw63Avs^>u@|MxdXSa^@AY8A-Fu{oGsDLNeA%MD_4%&QSQJ36-mHRv24-@z3? z<_TS!${Fn26p|2YOa3l8NV>&lV#J;60Y~f~f`7o;Zb1Rr$z(SBPO#>hV)3l~1hUNW zmo_0T5hYm_zzfk!hsW<2mG=^QAwBVJr1OX4ww#q~+o>ex-EJ;{Dm`d5S=V&BX+DNo zl3dn**Ux|4c*g__6(EAg7o-9BQ7HIxoDY&2N0+~>9@oO{a2&D6?(47`garLN{{Bm^ zWf8d%zzFZ5MEy`MhJ0$6HA6~nTj_=&h|?qa%4r6z*YM19L+`GV<2*fD z<$X7GsgyanlyveVto}MUeUpy!aNB&N92}gFxIUKn&Jx(Ig}oQZa&05}nrZ1!#s+?K z6JSPsC9OZHCg;dS{qQ8Rw0a;be9a?rsKbLk4D2UmPnNv(#Qss8M&0fGQv7>(LwAcP zgpyrr^<_{*gDdSYn-=SD!=`%hZf6`gsGW0G{XNSh6D;8+Ke{DA3Ht=%$v~$l$VJ-t99F$Fsy&v;C9-EDa0@K1g z9#iZ}1|vTCXTXh4?L(Z#*Kz)_hWoh9YDbC5{6)4t2nFp?e5LEcwtYGc3cmP(AHDS# z_ACj_a!%bJlr5Ho7-I#}bf9sQBdbzt{tS#E5Jm9%-D=Ixk~YyYPsvM;=5aHevv<7- zq9l``YDf}kOVom+yN>4$KPK0K;SF1J=a!A~_YjgqrW$Aszg2Fdr1hSzUjh&hZ6s?o zozW#+nv&l&>yvEfpi85&z6%JCPK3C7w2uwUI(>9Xa0K&9X^LkzdVCyV`EIeWhOaC_ zy)b#ElqDOvR6i>`(aa1Dpya~JKyB|M?EzoQ%UcSKg-Da_U5*(1evy>N+JJYubEQKs zVj%!@Cht6mL(qiP#lBzMIj~IkxcUNpmlOWh*_UPF!xjL;MAbKJ!D12ln(zBn3T+8t znt3vE&;{`=5eUXgScfm^(4}rSd%{j3nLEW>ebD-sfuFm&88U$a!)$K;N8dcI*MeNR zhA5?=ZF%4Q4%}snmuP?)_P0N9TnGF;v9BO{w@g6H_htjY57?&P3sA_r)cH?0tB!?s z*w$#c|3aHq^8QJiF8@NRL_>F)UcA!b1d^1Y-NaG*Cmxs0ZDuBw>ii%^4mo$dH}bz7 z{NV7zG^cWVuL%e5F)Sm=bwa3Ia7sElp{(|FYxDIVMZL>~6q5MOHOL~wD=(MqX$EB3 z&1EtVHk8@+WpOh!L}snFa$q96MyFIV0!Qh8uq*0vNHj3F;^XlE%f@KrOGX1Z9s9-bFmI$+Bd{ctB94K+9vFs`(h zQFh%6nQklGzUU-Eok@j!ze_KBpmx8c=C1m0bnfu)PeZOF#Ng2sYdXn6S3w;tx3|v< zr!>6-(zv6)4#Arci#Cor*I5}RWg-yXXI?28m{<@ex9@gZS;Z>L6y=dwafXSq+uQqO zq6L{(MSI!VZWV)m@k26a$d5WCUB8WDC(cg;zo&?7RjHB@Q^YcR4{W|l08WG>yr3M^K@h)$k`)Ea5W)3j5R)ZrxDiQ2)rO`N+^o4hF-vv|D6Q-Q(zVqjSEnGPX8S`$aB;UF# zHRFz3Z#28q@#*e*3zJY~sH#B(Z(VWLksP76ajkY13Q-#$UU^sE>{KG1EyINMa!j&T z-)~%I(@%WuWz^-1ybnvH<0*X``e|&FUk~K5-L3NX-NnmB@kXmOZ)p;eNY?`5syyGk zddyw}CN;ckk`^HnY$koN`PrNLyL1Ejia)jNOoHUzUz4Exd+Xg13&ZwS302O0w7uQB zZ6TZUY`akxXX|1YIG0=;GZ>vGA9^%&Q^F2(ekjU8xt|aBsNEYL?}pYyN>s~jOA$I( zyPgYehJ}_wML(a3vU}`F)2-3wDGP`&L_e7%^mf0s$uNm4otE%j^xNA6&z1e5{GMHV zC)w>MaqN|*+n&@QsnZ>+m1G1|_y4Z!d0bPecOV%RWI6rYbs0*0i7cXDzYWLh#&Ypj zh$!ctam~Q-GK$T08dE~B#O(a##zss@!zuu4x=+e@FlG|1tU30R$%2Ezcns4FDa`j( zIU^Had2cB7*RXlPDqq$~!8|He_(B`SLa$}iekbo`--(wOaA8)t@>50>l0{cE^D_*o z_46#-*zM(D1Pl${*j1fi-%e~=Z}7wPvb?xYE$@s9ecf0m;3Q`GBA+>R6bYPLRwan` zRxOsw!?pbTPyi)dpkiy%n6`^l3TnZ@2M_+>N`^_rjy%_Qf+lq3mtQcm=l*g}x;QnN6fPaE? z*Mkp_y>LZ^(|ww73Eu~+GTAA=LzMz2fVZSIr>P>AQ0h2h5;S)L?H!%$N6~@R2P$qM zUODW_Qq8J$T=6GqLxwbSo5e2F?1t2ge|(P3FH8l*nFkMMm186rdl@{Zpe@|8gGdDxf&=n%4xYX!lTqcA>?sAuBcX2;*CJBOK*}!F>ThT{kf9)@ zv@G7&%Q7fxyYhp)?DA}{4bArd)>1mS`yo`j6Hs(|Oqtd*I7g#C3$+=3VPxuG^5rPq?K(sk9j$w>LihuKJ4Dt{;0}Is@p)bcdOTE`>p|10Ohq}_zJqn< z2s$9`RMUCyf!jFP5C;U-7`vn zoX06U@ydVr!9BuW;gMNd1TUAg*NqCH;YKyV#2f$JkkFL~2dOUR7toZM2EVg-h}EK- z{F)Ct*5;q&D~t-Uv&oU<=p%bsJmyBRp~PG+B!v*Ma@O^u$ynv7uFzd*xsTg;86YJ1 zRlG?HG35FSAL`LJB>x+Vl2N*RX|_JKD3zODJ^}iqVH2j;h}|+OJCzr}2IhWIv}2`# z?|P2~P3on_Go~ROecu*ARPyLP(SBLRj}CUmCRXiN;l+I;>An8?#1atr7n)NsgwtuW z9=*(;t?D;2xegL7*P3j@Mt-ZoJ`I1_ol4*&i&cKn!NZ zN5gcRWlXoSdQ(wR6?6pVCrjABNN`xTwjd7B*AiKt3idAtCBzX+J`U`De+ z8s6W0U3D0@{1bYk;52ITPdr%Rm_Lpa0C1hXDh*=44@()@-={y zLvZd>LA!9u$?Cn=d`6PytcFiZ<()%%;yO5}j8iowqttrs>XurptCaN zv*$ACA?-Mkuylgo*6}ZR`X)8w@F>dHdg$zdO95>^QmO#SdPL#@{)BrV85&BTqY5J# z0MRhDC9U-7%55~fK%wImcET)YpJ+qkwtW>`((cDlV1MO>j&5mtbfEs%qjin!_qC=Q zDTWhvh#4~cK@EI_F6X$huOy)gB@m%se=5H$;^^BV7LU5gK19&((=zF~TGJn7(kOU& zAO_!j9sO!%pqGJ*+)`s^+iGxV>jfw)+aS3D@E!)KXA9%;99^e~e%F?_{ySo$@5jyO zAp&-2>Sb|z*A_A~D>k0Y zPuvmm&Bs_`aZ9X#SyUR<%j(AFlyEt##XreqL0pcj}J3#t63M1 zAZ(AadH3D8hwvp`H!qb;A%t#fB3#CLXUVMCB9=(G?@q ze;^X(FSCswi2jsZ$D2#azkhgfzIF_HxV$|c6FB#xo82er$Iu-Tr7}sR8F0kk*@g_w zC223;La)fmmQkKj(9prreLOBSpZurSl;QBtpP%;LesT8iT)^7=ohod-;qiz3ZMe|k zYs!V*ino=vyW3{M&G!u}U$v)tcsURTGyw&MN#;_HJ>x@>WaY+?ILL$zr2#}?yu9mP z)2iR39D{a#vWwdDVK@|C{QXqewFI!$#Zkx z#%@>Y1eE;1Dnt{oUYppA&7Iphwf)lv9rIN0Cyh^jKv+R^CUE=*%TC{}zfXUc*q+@W zF4t$HAB@(7Z+n0U%*XB7M*MQ&giT)`s>2E27EriE zd2JE*`5ONf!Ir35T&6wdql80VSdG=`4u6#oR;b+}P{Ji;DHm|FN&?&u`y`#F3OzMI zh6`p^-as`~S%5+5CS90BL-$sSP_|Wew!`u7mCO6dTuS5{*w+w>cOUEZWDq{)rj8u! z^81ct8A;`#O9e)IA+j&=(W`Yfp*Txf5R0tHe^2(>lxU3H!tJ~T0%EfQi1GB>nir*U zjO7)%%aP#p__g;P`43Z4LAwV@Yd?KBRG?rj`IgjX<#0dQ#3vHB=@{sK@P|C8Ft*7m z&AgnQ@TVj~V3{|p$-UI{$X|?XL*03{6PxR6?+o0i}|lb9=`R%>D;@U?C8OZkMrgqAc)-|> z!0;F{z6MDa_bDCJx);5y1|@LD--Ga}52X|`zkb|85143Z&J_MJ+NdWe;k@}^P#-@F zg=L}wIZq3!d$10~4pII=)x>{5g!tC+v4N8ZJ8_SlOcyTKHYVHItIqGqgDse zsW^4g!Z!08?gw>0JA}=?Sk*#2VtF&SlS1NuLt!l^^FkRkRM`2(^1tM3TWHV)4!0Ph zteTRMuXX8_)b7)Bv;814U)eI(+Z%1x7=?|}y8ano8RbPh2s=&-=mslhi08*VMy}#b zOOW$PY4@^|t%ztU5byulcCkuk`e~abYJOzxeW(U3)5vvr5RsOAs zD76G5c6l0HMja9}pV4vSNqaqMQGm?o63NM_@X$l-gd>k zY_$f~w`(ie2Hf{$%19~r{16lZS=DFixEfY;X7)eD!|UVm(<%Ds`+X;%ew?-Z7*9EG zKQxfJp#UjU%1&UK6Pr~$gg#WWhzEn~4EHS`OLw^@7rvvZ@w2Tu`YS+r`qZ+SG{ZAM z$kp$RzZA|AvS`Zi_w&Xz2adO`Hrh=Xs*R~7-1rPbvwY0lJ*Qj{r~fQ1S$H9nqGY1= z=@&884L{+KTutW)*6b*0e68H;aG53GmUmU^K4XEk>&lE8Aiinm)YhJ%+_-+G6(`q5 z9fJ*E``%+mIOSowkwcJRm-zi(N z!Sgk|t#jAq!+N^V#=C3z*xv_JrKr0+w#7C5qb%gsp60&?3xoqh-TELk--uofT4Y2E zXfu8-VN&fe9eJBPF;s}c!;kZdGp3K^uz)%Z$8RTj%ev}od%I&;mcT*=MyOKgXDANv z0mV|ozU*DB!Vte_A2w64+vI+Wu<$nmE?VP*=R3RcnR#gInnfuEip`ntwR~SKwTeI& zTn98af?AOA>XTGYU)17CzX6NY2lRl0DT_uD`n)GKl@)KA89vs3S?%ylkg5;-U@XH& zcDvx~O`SZZ7#fV{6S0G2;#KF}ncB{n^5HmbS%l`s6=Cn^7&}JWo3SXs&3H*g4Rlai zIA|we1rTM@V^zo`{P7@)rc++izM*{GH9rXHG#s*B!?Hg9-923~LWDCUG+c&X1A68w zjf7yqW9o?Fv)+}w1K}=C$(ifmo|#$WT^R&rqFihE6m}|3gl4S*p%wSXZ>|p2w++mi zw^2O@1%t;FXMuabf0tdM64sJ-BljZ!o7nv?8w&dDAHWxLr%;2@$V63(a8fErCd#i{ z4lSe13~>MS391kI7fFvNrmljiz^R`Mo3+U;yd28ufR>dToB7Z*5MQw{Uu^h*ge}Q` z6pmznLqj8#QB{X%R|-UVET7a2V_uG#I0%y1xVwd9qJ)sA5ePdW=8^Nu*e9W?3;cH~ zhmOPH4>hg#2U(H+iN5Y3&~_IjV7X${>mEf+KBxZhd6I~;&W-{O>O8svwC(**W zE#9s6Spx*?p(r+r>*sLHEk>rq^woz8#>pyXwT~O#$IQSU8bs-&c*3JiNlRW#5M)7T zVaW8JaQh&H9w0lN%J;`v;*^LLD|6NwZNieO!o~EBAbj`;~Qgv=SrNE2lCXaRvdP;PI{f_=s>ey7m!D2V#ZIwrr zvQI%AT%D5Q%Esgo*U@sy>fh=1?WbV&y%5fSl?-aZDu1x-NK$wGFLD|&BiYxKtul#z zN35Adknxa|)O6HKUL_73fcc<2ug5wY%x4+*DLS`(oksuk0S)7mdVHU`{#OKi0vhgf z&BQKqV*=XzuU#6r_RCv(;z{Fdk%OiomSW?WhrC}Vm$n_vA%~817eOKuHc~!mz>`zS zQc=aIr1dM3&PCX$d&;r!m{riNlW<=U)3`7g&&mSe|2Z(woU$wYYCYnh2b`bExZBTG zpwzT$!>NX67`1%c|2bg849v3^E}zLqok|n+IY&h5bBiQ-ueQp8nh>5DcTfw)eYuFH z6BVHMc$a5qBN5L*kNK^UI*VNWbfs?n-=-S*%HH%ac^+iwmdi}M@#2*SQ|RnD<|cSxM$;)D;Rv3;BWtXKXAh|fCYXkO#Ifl zcjZ;;+Vu8Cf)o(O@%K^xrs`boBTX=rT*!-Quf-soYNhm#Dt%^FBkZyHl%!@h?JRBs zjN7FRm@W21&)l@NkQc9x6uyfpnIr#TGwC6yFqYX^=djEF&aqhlMLw3-){6aRI|U?P zSG6}vB*HiJETl*7uv4M1%-jZG|D!_ErQv#jgDz{m3G`r`h`&ilCa+v3_sO>ui~r5( zSu4U|ODEdi;6_f8M18hu8m?Rwy$;`7UZ zU2Sa6KCuBK%WqKj7CV*`V9X43wdcAQ7YNVYa4WG2Zt^26N131}hF_I~-A+_~xgcbd zxTwT}aF2KVV0R^F*xosL#m-IZNA-A=)(&f4qUW_ygO0m(mfx2ozLB6^(9H`@lYA%X zN=qoHr507`bDdqN*6oTU3g#xA&eq=jt;u78cO!;AtG#ULa}?usM>r%A?fcmK3Oj?J zQFFKX)xFvdI~%7&0OTHMhe39l7aKO?w?YllbZ8MjQ(+en6EcdE#+()8x89`|3@jq+ zV7&JU-R_cDoBKG1lc)bfgwgm+$8Y0e_{P=q9#OA=P^#Ts_Jj!KAbw|y-q0jk$cuP5 zz7>?ZjH1p>Aeyx{EzD5nc}fM0LY1;IRE(~dCNeW>LIeomZe0A?U`sGdNJ;q7f!=E^ z#pXWpoIz~@A6>qL=j9LQyd7U?)s%VCo!#-U>CkBbeyG(o6dey=$IVSx&QE;ULRY`- zx#k+Nc4Tz=C-UeeZ_~*o=Fn-c5>q7<6#V?se zIk7qlPm2VA5PsKDkb{592S;qc#$~9$O`_~@?D#8J@2X2P9ZH+85W5{8XyNXzYhD2l@=-IO$t;;Qcnbf7JX__w}y_< zoWB@iOJbWvtz~3s4MPIpyRmV|!B}TwM)Ps$@Cny6At7#?r%`U)?-H0)UQE_E5^`|d z8d2497>|-uGxFhemPDu~Mlc_!YcZnNe=qw;xN2U~K3&l3!rZH92f*yKFAXl5IRK__;2 z7C;_p?@2(>bv8L9UoRGX2ld3WP7*qIOQi>NN#HTXXrvn6OthQ~fD{4>tOl&$I>7f% zS1Y^Q6M=Qs-WCh@e`9W}vHLf|8a;w59p~DKZ~GY0EjF`muIpZw=jg2%-gnyj_q06l zq}#du7I5H|Trjme64(qBlk}9t&D6AD6gydFBz@7GlsE`_ObSw5Ffr(T{fLY3()&gG z<9sksV*Ii?LTc1%v!lS*C~^J@c=gSs>{Km4$8J{)>cMy5Wo-ZW?;CQdX`I{pVy{on zlLCAx_A6uGxg%j5V#P{{(tsvVVb`=r`>7lzo@;XhDwe)vC!)9cGV0gVL2z5{zGQ4bro{4bsebw zPa1D@KDKGO+%lY3%iC=Kjpy!M^O#j%l2?8DAFOcR7TYfe=Gc-~F{A$P8|ka6aD-0w zOZU|xpI%{)#*+$g8a@1W`|CgY&1y{a7N!holQJZ3M3Ji$;e{vd{$uX3CL>3z1z2?? z!3pNJr>4Sr71m##Z!LM_;vgsMhyT2VG3~sz8e<49pzc*67d-g@9~huY0wL25U@La89c6wM$YvNjk=pZzdfQ17kTw@R|gr+Jq=Uqy^AF)&2pjdAKfDufY0zJAkq_3s`OP~@f-nM^8tu$4BEW_Z6pWZNi6 zdOnzfGwDvo3KJm;c^Y&t)bUn8y`&a}dSGTsT}{DiVUm0EJ!6Hep7U8(kT zCxLznw1HDp!MIou{)JSt5XTGPUx*Mk%`f32A^Y?u_3_AuEYAkZrIR1&oeeNb!+m)w z^2yrc%_Rsur_Nr1a>GT3z(g-P`T`&)bQE0bGH;0JOX9GojYv}dQP6sKxnkXID_Uc; zGMzVe+_sm*=XY3$a3!*sJkTRVME1Qnr2$Csf-UOU)A%evmcea9lqx_NR6RDga;h)3 zVgma@P+&g^WeN5mYcvW!Ioq8Be4g=iC5ZUnAja|OTxaqX2>(k0CZU($NH{%|=@yV`mp6;! zn3&nrg6wClkbC%LPP@$CO&fbCd*?IDG*-sU4KJD8AnETnsMmR#3*e9U< zatE|GPo|NrglH%6wh&wb;4|aW>yslk=0KrWggw&kUxC3 z8D+>%ovrajckyB?VC^j79gUIA*{hbu(~OU=c{#J)t}-7)A!HP$*5-e{P673Hrm`oJ zwz8~+b_TG3{KiaXb%9?p>crR4E$Yjo^?n3?+V<;R>(epEu#7#&@Y%7FV#$yCL4x!n zjoD5b3$^5}-mz-lM?)AEKai>h&T0VuPDjn2R?gtX17rERABW~Lsdv?UdAv1SQ!;p` zuMV|w*GM-K_FH>4hXeSt;74~P_Hv$@tVxjpTFACV+<(5?XUD309CCd?+H;d?pv`)~ z$D9O{4sj<$5zrqnAZVQ zMsyg!Z@e$r2a9_joJMPNQL%Hme-QMrbiHz(AJ8}6o#Wa^BSJ9U-=>?1iF{4!R}eR6 z*s5+mVPe%Bb|@b;{mstGh!v3?>C4W6BP;(KnwHh+<^ln z&;#5kO$1|uevM6)I?nMZAKse;>f@9_Kv+CqA(vSX>!-iWP&a=~r{9s?z$&;iz9L<7 z?$*Ib{q|j8SBT%3pPn{x;-L&wPY!qy4CIsmrqjq&e^7oQWibAN=$FCHjGgXb`&}$9 z4acEH$K2`6VGn5P4Ax><8^;ioy(xHKC%B| zn~6%&)mxG6=3978H(+n-G=CE`cBdvf^j0luyR8&h4Es`b4g1?gicN<+8MiZI7-IJS zheTbVd0cG!D*OWX#^}9 z2FTn5szUvZyZTvYmXQv>MnW9JK`h~F>W?S!?RFDF4{1}Hdv-Y5Agx6SG7?Klo%+hI zV?N$^uc3(xR&Jp%`YCUwVIQJ5qG14a*PnJ=gA#6d&-_`%2))QcYKKNu3yVKI-=+bx zbgyl zK3A*oO^;Jc9BQ?)1qyXNd!xFwNvHJoCrrk8M12^9^*NZzDesqgwQ^)GjL&Hvj2&Si z?^=wII6VbXGjZNoIQ>PZ&itH8VZE`pXN6G!NHRQR30px;J^3}q%%$aAFK}Xl6Nu)7 zaYeF+d&!3lbat+==+70Zr_Z{EWg-u`D&%-_5txDQb-U1^8z1QKic9PY$fh1~1Bry$ z=rPf%BR>$Ux5lSN}zr=ibO_5qX3&u2{nmMqf>gwL2b~&`n)spx=lkl%lx! zkW_)?qyC3|?NTGkT3W)zvknXduIeD_|BVR+hHExQ!al(pPSmwNv_v87JfqXzuued# zfTcvO`k8XLhSM9v_FdJLD>SIz!ekiSHF8l|jCUhy0%bFuzOmVph@!S?jekQSj^LPj zsO(fn_#y}+0x_U2Au*3Mk6atTZ{9Kg06K|Zu=z{R`GHVK%1AMCW-HA}c?oIm7;oST zLs@7?4h?aW{)a73P`bx%n0)_mv+P|l$7-M~?JrkV+nN#)<#U7jClE3quIyT7hT8J2 zQ+705h+3gtN!o9eIKJ|R75h8RKcYJIj4jdiysTm6A6qWI!n2{kVUr4e&bMtBa&RoT zCd&*v#%E~ftk;MOBY-sYA_?Txy;DdlegGQ6_kc=0OKS3_(X_6)#38(w`At0*Zj22|M*4jJkdb zy2~RqT}g?fNRr*E$j^CO5z%Ot?v~1xCCI}nVvqk;Id|$lQvRpP=6BqyrfibAxlFP~ zdJo3elzJ83{UJ4dGUR;3;6AW-Gtsqe58x`3J>uEwO4{GREtn$^rTVpUCF`E9KTDl; ze@J?w3LZxC;tHLWR;&X2zLKa(51Aj{9+5z7m?L27x@erhh2XZYR??OEPIQx~TlnYT zT5eb|A`*cC@6*SB%(SPwbqNof|G|A+i6lBtYN1Lbx(I3pOJO3Zzy3r1%0j8f4gM0< zL=GTwxEl8M*3B*&1TXz~T^~&n=$b*uKCvYimT?CWoYxc%`|1Yq(DcRJ+X8tx!y+Eb ziHdB2#qb0KdZqjf?F^Fl106iu%k~zKVTME*qEZydMO}b{A+%_=WU#{c1p6g63L0MC z;?a=KG|ZO=w+&|Gx};kGU5`S)x}h8##T->7)dcEgdmo=}3Tf(&@{$r2gpwXnS~+eg!1wf|(MJWorI6Ij58=k+EOP5!WgN`Nrjl#*9`$ z2Kj~FGDiLggdMe5HVr_T2dHLvB|5hu55MDHNj|&&F`puru<1uKeF?GpgE-behZjSy zWTy&#efqjqM&I4>po3w>=AsA6DOD{~{4%dH2(EoYW5m1qY_%jJ4WXYfaIDH6Y(Tg^ z!yqjQEm_mK?zyEHN+We7cIxyqPTZy%@oDgH;xaz?1VH1!iRZ}C_vuS1qb+*i5s8MS zf8?hpO_s!I@C?%K*Ox{x4srcED|5swpm8>=ma(;tC+oK@5GQpSj2~qS)a9t^l6^8@ zNwft zrNrbEs2cSm=i0KuVL)lFD?F&?UCbjosSGj#VdeDQpPx$4PU$ZZ_$^R>I`rm`C28AV zgkQwTU_Wit+P=zVoVR=}@T} zBAf9R99niVZ|E*@F3YW>?k^7~a#cqf%Ki5t3^>Jk(tI)7>qa75<~NwmYrroPXyTp7 zMSR?G!RM{8$ZC-s2MO%iytMKxIFkrih?DA4Oa<9ulw`t4`x2O}o$(gY;k^)_y6(7yhp zeK=|})EQ{JpHf;|On-;w5YH#@E*{O>afYWiOBKcN2&9V5Cm2C6`1}C%Bi(!Y^jm)O z{*WW2EK<$ATREAqMn3J`@<-%b$2W?D(OKCTa0W_4XNbftSI8SU*33_PwMKy512=Zb z3v_Lw1fF5-JETel_Jip2!sbj#U&}C_VbOb(oW)c$#oqszm(FbRk74{f++1pwTwj&x z*g?#Vr;JlFANl!U%JgH=dwdv%(w0l{%TNqxs(6;{*Ls4xnxD9%3gJobqceBx%$}Xa z;c=0v`R83&iTs?UJHtFNX=O~{OvYP0Gt-HX zuUBPC5ca=djBw^*U<)~>?vnn&y;?L|&+_We?ie)lv$lg=RH8%z2DvM3l}12BFMjO3 z&?C(Z@~Zv2maI*#J{#UovPFK##SbIuTNj(`Vp!?JDUXI@;r0Mdo@_ zrd03v1Y(enM`bW*-QycjMsgiup`r+eQ>WQ|8!|7EDNG#=z>|xO!qchwn`MyHkWcX9 z>(0{_t~y)yh{nLN>l{WEPH=+|Zuvw}54e}d;HCN&X#f3Q4Kd~t3z>1Wp{MAYryShj zE3VdOb-6^XBO1ji_d;NFl2pLp&@m2M7r>W_CCMnVn)88Mx@6r(;XNfYg@oNaW{FZD z%~}xv$zhdA*KYSb3H?N`!Esz|@kG(sOT>RE4(ED%G)x|j_k8AWrpq(}wQRaqzu6)` zP^+0CZRUR_lOt=tEzckuYTP;NP}&VJQRoHekvToQ|88kTFHczRe-JS6nEw#5{{AkL zAVN_EqFj4Iz*WfhUS-8C3N?8QarSEj~M+}wNSHQMNw(XIf9SzM$ zg@SKDVy?ClBoQ2-BgDx)gM3FggY*iGLDYC!-2$tPx5(ipA>0vgo;+4tEP_q~kAjmLOrc49UXRE8w)b6{hD?TT%Ywe9i zBB&a6mNZ(O(-hWMf5F*8(?5Nt4}Bq}_rtRsVHDJ)SRak3c!34CFts$pfNR<%kJ?{Z z;;oIJ3yjlN4J)rRe5fc!&e0M-GTo|$OZ^sTV~s>qG%8pL_|~I4e|9>F{2|VpR~wC> zBOYr&7&*rj8ur}-~Yn<6BmO1pUs`hE2x$7VE z8r?}8h?E8Yxpcm3Qw$2t|35AO=Cm^t^ndRLdL`aJP`r9aJ+MN{lKUjI5emS6108!c z(`B{Hef;aw;2Eb1@y5~HmpKx-y7hi(g9e_VK(rr0V@srI0+!Z3+l`uBe3u(02fhAj#7VBZ1I5a~R(Q&&o8h=k>M5-3+3VeVncksG zA)Pt_r*Qd%3r~G%x5+CQ<${yFOf}xUiU0G8c>zsec@2C$NotdH&k?P6;`O#6z?^u4 zS*KO`%m4lczNE96u6=H0aH6@l+ITNpS$b3Khg^BPPLMXjz_Ba4P@_4k9M;h3Z~Z4Q z4vZK4Mb5517o%@qIS*?flstak5e&Z{nf#^!VRG@|Y8L6W)7SWqcO;Wci=cO|r; zG>cz59}aeX1HwAj48AX@YhMVr zQl=a>>!k8t<4G{FdYA0$AE#7a(K3V3BcWeGX23on<%6aSi(JRZtG(jx!7~i6i;AaY zkhe)v;RZ*W)8Mq!{}QeuN?oU|hd$Oy)h}Sxp#i>_vJ<4+@}ud*mPHJTXhoo?I7HKf zj;?CGZ+24bGH=1iXFbJc4ExR9`(+%b__&rp{At_?o&gl^2)0fg`AUS{iVp%e?=>}!w?~aST#y(uJ zT<7s{)(LLvl|P@z(m>}Wzi?0GIgtvKvGB*mKdL+>a02Ei`fEacr!OCoFYqwbOWbhi zh7#-3&x?TM+jQ0g_za>egv57TV+qo8p^2d+cWUM(qPj(|)qJ+8@3^p(wT@XUYY7e2 zk@mVWNMEXY(S?jec8&LRwhvnKSFR)%Y98=_a|hh%m-3Xz?`8|aI z;O-s*BxrCL+}$O(yA00Ao&3K0zN%O6eSh4lTT~4-bIzI5)2Dmywb$Cc+g?w1<#POq+sjaNyZI@O5Y zhkfdHY{J;gE1h*(2Faf`5XXN$V_<*4fV}}~!pj-n-A;XEWqQ$B2rN<0SAR;M{JKg-eUqN?9ThlX!2rAf8=3Dn0;G2o0Tgo_|2VQNvA8flYM0hKK0 z<~RR4eRBw|&|mIf9Sa6WcdO1CZu?`mdgBr+v~QSCaiq*=J^fysBLH?jMZt>6ZuP6$ zfqh{?$-d;yUyQyj5;W&Qpe{Z#UQUins!FV#e~m<--4pE%(Uam)T*P%nFijIiLVeCJ zeuwZPM?XVe6OXRXHy7^^%QMrO+R=8X+OXZX@&*A8S!zCH9u+8!|4BvY7*r-9&E>g4 zo1$>mkXnz;mdMc0F0(>A(3b8;782*~R-o3K=rpgBIDY(U_j;zOTus}FFfyFU!NtQC@Ic?{<+kjM1^#J_?xQlBF+d>$|xwl%m?BqOVyX( z*=+TM9YwSKR$4UmGH!(jVa&$r^Ua9k%&=#GxH(Ss6I$C6U;0?}F2o&aAGcX~iGmj0 zZ`jU1^QgFOS43zCx0w)v#}6>^=w{oA+E^LTmsaF-tCMVG(^$~>Je#WrGv?<#D+n?D+$V30e8s|R@f zHOKHDLqXb}Q?5Opar9WCz9GxeuanLk>wOn#6$>5Y{T7^~51OwVMs_3le#_;!oIC+m zK-HXM3dtR`$vm`Dz~Yi`6m~gg;zc2XpuiJAWu0=+;$WQrgyqyDcQ%{q4nw9xw0}O# zfeNdD724DA7#P<&>%(35V#py}5e|5QPs2%(KfKhqc-ENc>Jp3Q7-9N*xHz*JNhnYx z$^Mbgx>uUmjd!ZmN-iqUn9jO*CE1>UuYmY{`_7Nt7!C^K{htBE@~m76^BO+@JRELp z1nG#NPHTYPtexgF2Lynu%sGTzZ!<-4=Sjt6e3U97k~HT6YE zZKcZ(Q<00W5lnsmfE+CuL*a;!*(GfVhZ8>Zjn|gYTbtzt5JAE|wV)!#N`++0xt{h2 z-h8Q1DFMNMJkmx`17MwwSU`*$``B;}AVd75NEQmy?s$dsFTkgS!oA_l76 zXCW6sR!C5^buw{V6^|B937f%3RG>8W*vo8u2TYj)o0^?3B*-KW5fEvte+)>W;J31u z(ClogFY50`RP+gpn7GS;5~Wihfs$#MBAjI<-xgR5wdy52bG`wbu8o%k7E~8Zgxu0C z5k=jbe!d#>gEw8_FKm?xsY<-H(7&u6&lsnFtc_y{E04ud%2BI&YfCa92KWDf(U}7c z2Jq3%u~QXKC&Yw*%6y>#B;-p-S`QRtM`?p%0BJKZA*@yjL_;|J5y)kJ|Azk*V4=J~ zClnUuWVVy&ftK1wK<>%(FCzVZ$Fj0<2+Vj_^7}hX@di)??|!dv1Iqgj)v&86JYoKl z^`g{V2`3)6)W~Nr*{jk)u=7X3-(ikqLn(FA82vG!>< z$Xh!q0`F>Uet?^95*+Ye!uopDHZPPu*vcTNY)w2FI04dPv7F`OET~2P*cLcvuy@xh z&^z@vTh3=YJ9`QghboPTl%LYS5FzTo2e} z802wX8+$Cf@k-6Ma?q1GroI6Il|$N*k$OY;{(&J)y{e>YqXVu6wyP|3l$5)du(2v( zS)z93gn*L62`N6lQl4IR!F!B0$U>(886s!X04lO~n&n%F5d$$Nl39{I8;$ zgiy+TsVJe}TRuWNG~^&DI)ay||KER?MlxpPlPNx&(&SdS|3An7>mswwmwg3eUA0&v z|HIcHP7B8gB1<9XealezKc9mh*TqYlGHntZIQL3u)O_80+Qh8g3`}*NVB>ef-GG_K z=GWZO$&lrku=Glw|FV8Jn{0v^;TKcBv(vo+n($Orq#SPv{HQQFFBL12hk}2BczMy- z^xj(Z>j|CYIAdGTCowsF3P2uu z2vqoIcz&@&`%2*^{`81^zM}cpn^K!Cv#<{u{HcZ7=dC8}r2$G9R_txf6?Fy^&CkBa z`*Ew6O>}v`vc$02bpp#vMz30VlzJP43uK+A!JHVJqFC89YUt0IF_C z$mHHanCl2g>dKCG2#qFU=h^?B&T?>UTzawifQ&<6V`~E1n>!{10dPTk1(U~pb&>z6 zU?vrobVU^i*U2AoeM{js%&rR1Vit1n6()1PLLvt@9-rugHQCpsH~Fy?e+t`&hwH}4 z=#yt_O4B%1*HFov1jR6G5WC9pz!IPrJLWomK$r;q$|cA+K_5tOz7=~WaA!=(o3Db7ea4UdHB z-hiq&FDWj7>!XM_3kk2IZ5-e+XW|&v;XUlo0-SHWA!0BI(=`J>D^8P`5i~_ozJVJj zN-=i{AF8|~k2jJ#uHs)a916xxT3VMLM+efFr(Z!Zr8k{}UtQb$i9<|zY=p-b^71K$ zO7oeYu~bjP3}VQk@rOWpcycvL8RdU^YA*H)MtqTf1sl)eZoa~h)BDVa8p6A+s+6!mpF+ zeu?N7(yvl~rijk)zeV05xcn#DbrS`6%rya2qev>m?*{a%JMtcXShgLA6z&Z#`5Jle z98?o|g7s*mw>P!+0)$ zYdjzHt%L6Dw+VQ!EAE~Dnf|F|7yo!9b=CH&x1Y;%Uh(n5`!adb|6n4W)N-n`XjxMA zIY2Po+b59ap}T$WQuKcy+hP8HA3db~KRY_frwzwB>DlIp^@t_oq5oCWgJlP4cD1{1 zO`fIU@((lsUO$y#e0oKd%WEyMnU*XqhTVISAe9p{#=9b#vp0)ZK zmfU~^{iDZ*L#-^O~-uwO-1^Uy2~r3$iHIY#ptW?d3~Ol~@DBy8BTdX$5` zZfo(r6Id;Y(`>d>z4UU&;ys@}p?SCude!mIOV&0jiK{6XeWZYXo*#x9OABl<^}T#< zR)C(MF!;(tE9EA+zm`xuVm&e-$Hf>@_^U)B%?~0}PFk{QgeEcvSRjpx7>-m`(E?S; zv;gNov5G8o`)daRHyTKl-4P~*z={eRGLes(a0<=Bao0lmK@(YT5;Mr>_4dc3VU~Qg zdo!b*I#n*!c)+9gibMT4k8Ma0TSCZ5SKvH_8B)_Kc`uJ13)P5fe6`1!Pc zrZnAn#HhRSwT6>Orf!Cb`F_U`H)ecN)n~7oa($goX`*%^aC#nVGp@g{QDA*sm(C2Y zuhUC=!%AH5l8VcLg+Lj2Met1prTQOCsG-od0Ox-}IsCau6+bz6@eDz5SuoXR#^^?vi%Cm6+{57uA(V|+llfC z)imyDI9cQe!w#6zjndBhbT}$9a!Nivf&3M>e@Z#!?^p@#~@6KbS&fd&S+`9iVIm-R2l(t;V*!pih0zIxA#tBC6(!zn0H zI4m-paT{?<8i=VV6|YKldFZNqQoQR>VFH5TnQuP1Oil#bG`^-f;^gn2N$9QI*W4Z^ zd{|r}vnB8Kx36)eEB&>(Bpl7v5shR%{_j^@RwLSpQyA>$Ng`ffx~b$<$eI>TW%A#R zks2l2Hwsl5o#V-CtuP6tmjv$ECpshN>C*40xEBQt8(TG=DU`ISDG`>tT^*Ht)5O2rz z_`Zzz%5i%q^Ks-siTl4+ev@yz!aucoTQ>X^Z5=0~nhHQDUy?KZg4Gc=G1tFy?re#u zyrW%bnfJ-`F}d^Wf+ya(Nos$q=<>Le&IsWHo$k+ZTvbPgfVy5njG1L%pS%!>B^_M? zH~3O7{|Qr-O6$c?Vv5pyO$#C@K56{S2I2c@_&e{{u2HZb^TjhQ@&CLt9fG@V@ZI_# z2e)rI0!jq+#`+UR3!XVvV@EM7cB-=Vjnyky+hN_#7|9$8B-wjT-IEw5R5;i74oU`!SxtUxLN83#6EK% zWK{&BS2@ft8wiE5riLV$7EYp<284<^Pl!iG<4W2q zg?>gxN{nqtRhPEXOq0gnv296GE^*a4Mu$Mquw!)@+QOO?ho!HD+9HJQ_Ba=q(;Ut> zyxG1UOCT`P?9}VnNeY zTqT!`9u-EOaQ6$%>VG1EFENk6j#4h*ng9$ed$G4QAURnO|VQ=Hy~z_BeBv% zWj(y0Id&eU@7>=}Cs=CJB2CQvSWxvybn1yRjud}eRZg#=|iuL z9JBCRD4+Ar&1>FKqVXm2+NX&{d|Wr_*nKhJuYAt061V=am%B#KfkN}2Tf*+^RF!2(n^zcZG_?}omVDug+g$Jwpup03?&yq z(-yLC>1y`&8aFFKN6oYmsd89s-Ne_ry@a=uCkgY_jqa9-^q2_puqZsD%_aURy}P2M zvQ7b797|Bt7>WpgL>X;Gr-td}lgfdU$k5qbVc45qn}L>h&8oP~felkg#u$LuV#}*k zY9sCOItROwq0~g1w>I5M2J=%gQqJUDw~bz9CFc zaQG+}^e=Zo`lg;4!UXk+NqvR9v&Yl)<{~SG$wNnx>6cv|3-c+_ZwRTdW1kM_uJ975 zKqFbQuh+2$$`NsD-8Uscqrk(1aHI~@LF8hXh*CQW<6w2&K0(-hFb@J*fY|AhaMNj@ zTFj-mx@)`2fp~-$FNUuw|I-Sy*e8TufE{VsyB87YL^h@B!aj9EJ7_%efHAun{AS$X z=Q)X$)FL8h-Gw{647*o4r*XD7=V~x^k6_(lJNnT(GWZ00XHj4{Nyj(#=Te>=mk@fm z9DZj`?2i%OjPR5a_Uh(PtSu0fyvF+jBypBHU` zbq=3~h73%Lpiu~hBj1Rj2)ZX0s`iiIK$Et;7ZO{WhR4EK{`B*ez%kd*qQ)M#zH_S7 z++vuM*O1>7sFC_+3vz}qsclBct5PJqaVAQt(pP29Bn7iAvyou)vHU*IPyWOnlZ8E( zdI!9P*{wP@{+wZ~eI-E*(SJQ!b~P8Ghxg!RezrQ%cA6u&V#^@Gnf9Kk;WG&&eewF_ zC!Q26yaa zDt{L9y*a!|k}yqTexK89l(ylKE5TAN?&)=9KnMX{hH;ftR<|%a)?G1+wEl>CMkua% zBTr3?57{-_n8;3kaX|nceUlYX0%)%os;~1TbPSrmn*tWXi=h_Ak#`&XGB<#ExI*dS zLb~uak|npHf(3*A`^b5z@d6C13>P7LCf+VI~yNqW-D?T7*&b)b`;AuKOw2X6`uAN;~4^#mxc?F zU*ZE3q~FLz&viFheXh9{aihr(a7retM$GJWX8qQ|=QoR^@T}h;*b~1M^!7_*Sa;nn zAmIQcez{>DK|SNKXp#}{%$B(e~l8P!lOa(j@{|ojaQ0PiTS~`hG`JhmNX>T z7&LnWLXuidS=YE|;#bCir?|}MwPx3gE9Br}tN@_}Lauu9AMVVKk0hV}t+?f5;Io-{ zdp0Sv|Ehs2;7B$9>m%U2c_#_XqQDZc$0o0!5KCq*qdC0saK-k+?}r8{?oPli11&3` zA5+WQ)$0Oy)#jr?>c$rqtl_WLQOA|gHHUijTQy^t(fzNwk$0uRTpCYY*wI_a4kV>; zUWcwpevmOom`y!Qb4wOh4Era)|8N=|sj7#QK23Ub*afz=n%dEfhb%JL0@E9z(u)JM z$#*H{`2#C#+ULy9C^a0@1vsNs`R`4U!Ka>q#$)C@4aH*gTwrGzH=$DRaz=e+Z01s4 z>zj<55#7#r0ar0BjGhqB4U7AmQmz12YLB^TyPJ&ZuyuVrCb-9IEj9ROwSk2dUpIh-5~vU zDf6TC>?0SveOAB|i%V5u5{1z`z^MLGx8Q4tR}W5Q{iLLrW6NHeU3W0r5yjYHGd|a6 zY!Y@gd~p|$urJg`c-%6LdQ9w*D8B`~U)JJwkT(0bqW@F$s8Vz~hu=lLM(buU_KXJb zNh=H=vEV5fc}$ohL=c!xI!e`p{sFE_CNVNRixBFv&Nh)u^43MCBsSo%``Pb8e=|%T zdPsxHSOTCYri)!i`Zl>}O-Nfed7DxXlxIcx@V`Fb8>$EPDkc4|v1hyo`7KsK)CLfJ z7$%VpF%J7G3ch#(v$_EXnD@SJU&H8NEHh-oXcVK`?0B*sv9ciI27-wR+C0BeK}|38 zg$V%DA25lSU&HXlFU<@bJ?Wp?U6$EA;p|`HLePna5!-0bD z#RbUeGjQ`Xn1FaaA4v9PNcMLk$J2c9QZ`1OZ?dXWpA z!ZT(^c3>zS2O5SbOuG3@UaegO&IYGbc;Gl3H<>n;^fmV^)4Ou#Fkvli*F!$f)1{l* z_yG1_?bi?dehXBkeBfbnyM?h#yN=t1Svq9XhZMCq!=$PiUQkwTg;d}&9Sg+=#D%@- z5}Yjs%QhDsvp%3_YKIA=d(jczO|F5~r4SMu8;yP0KKKCuE@Gm>TpB?W_;&KMt#G#E z^0gOD?t@T^p5%j@;BeuE82>L}&;A>fc9(h>e_3G0_v+=mmOa3EF|C$F2ORc18)FLD zc1KLjx1(&o8$M@=Sd^XWjQzg(sS)sQ?du80Q4cm}=;>3F2HTskN8^h?UEjsFbtZhg zy7tF$=ZPR_I&fTIfna0RsZG5BZKi@#4Bpy)o|zrTzwTGQ{wIXVv~4UvanMlpF;W}IvTQRx}7@4 z3l*(Rxm&Wp_Z@+pn8H;MclsrwLZx^7R(1?fKhad!pa0nT{JSkda7I2x)N!SOKj5ju zS58Cn(Q>=mF+2}WQCU6VFf=CR*GRu23WPbXQ%Tiz6UWfTTkdtRJ%>>NYQIH0W7-gOwFi~I1u}RW$nn!4pAPfrdGsI({!m6+(+HP1mN;6CH!NHk zy`+=4=B@J|?l8!oSCLP;6{%Q2*dP*E9?q z)wqvZ_nU0wfRuR@0gs36Q$#jYZS{f??|g`WR@yjCZvQxrZ{wK>x~iyKw@grI<|J$R z3wI&spComI;QOv`WABbSpMU(QHmkTf0NjW5k)qk3x1BNjuD^X2uO786~W>G4wR%)W#3?rI>NpFDCoLmuUC+BP1Y!qcxc z^n+0)Vn#vZje;(h^VNX@_(K_|VkF$6zs93lNb%C0T%?Ym7eHX4EfMf->WLbi5{0TV`RqBOaRY37L+4^o0ko}ajQT6EEuTr(f)3| zuDFQ@LS#+v-L__|vz_zs0FcXuVdm_T`77;==kI?btIKjYuE(7NiBzY^j(FkLjzEnCQ=YR|gwW@X)A6acM52FgFFH z&;5H5wD5;Pp2*hE%9&p;5f6`rVLk;!(A9&)PI!pt1%#aS_g~vyjsLcffW*@RBs-qw ztKV09_p{CD7&?}w%WZoMklQ2_%MYdspS2vQHhhZY^TZQ9EV#K&2eCWWKBgVz+1;1S zzJE4(+T#M+xuzAsT+RBgbNPq1CpY*ITVB#jr9BYmhVYKj)@DR7ncS}pTA8=F5W~|! zki8>ZXKxgf;HEc!(voUBp?G`{e{>?B)3(XZq!7m%JJIw$BcHw0BM|HaG_z3~uQvLU zaFA((R1+~todHL)znWG=$GcR~;w>t*z6GHHn4K42a^5KvJ_p5$V8-LThGBtg` zn(JWhQ7BPo24}}>zq3z}XCREO;xH$^T{I8KN{M{YnayXFbWC@3AceB?Wg$Z5D#ps_utrIFmujXSX|zWEJ>(Z=44nKU2iWMyy3UYYqo zw`r_$(y+`zj}>t0U&x)wigeQ-AD&zF`zFq-o#E_urh~5Duq1*uQ12F!qV-;xLJ#RE z2&41OS>vkH201QXMnjcKc9g~s$Y?#|=cBaiVux(!MxPZRT=z#njl1jE63@{F z{HZC8e*;1IM$Q+1?^|xfQKSS9g5ep6EHUv%KIQY1ex&zVw2(~a2{fde7$Bv|D&hgs6 z)^4d9j|No`)$IDdwiXDuZ`;sbeQIp#z_q)`rs<6pI?un|p@r+&i2+4M&^CV_c8qEO z2bNt2sb>PK*SR`yp0Qs!ESNfB1#Sd*ORCwtx}NOguu^5?Bf59p87O6l6E>o3)W{T- zw`zH+V4Ky}HBFxA`8baTCXEE}h;D}{mYi|NIE@P|egytYtokT6S(;XFJ*jdbb`x-H z0l8}esRJK+X;V6R1YtRegMv|`O~P!gRw>e>R!|5z$jllkQb(njao3>dI$iwjD^;Nf zB6G9amr&uk-{q2jU~vs zG>69Y>!0@G(|;tPqx<-hcv|?$k~all1)LT}T*wr7Q`eyYXCbQOD`@1x? z1qb83c0e1ICiCE_Ui^?5snID`Nzq_5E}Vs%u?!xRPw%IfYFz6q%}Y~tj-?MiDML?f z0Bqvz4r3cPN3*GStOXnuftSA<-l{de6}ajkRX!7 zMWY%Y@c!*)Y293Hs~Xv-S8#k9SGjzM^5|WG^f2LpmJK<+5HY7{JTqQTmGa5YaQcx5#&Uz7H1a+VzyrULsff`{b5{h?4(UVWmxG(Kzpxl-^uf3n{gg$aZYZ92v9mAEfqrd!FmH z{`2coy(Rfit+hG3*?7@g#9CE_XbFi})gAudm46RPlHY%ntYKGoCrdf+o{?QX8BJ8A z(U)*$+gUJlWFjp4js%aj*9!dHD{fIh2F0EX`mwUs>*)=>U7Wm%tnL4G8^8QK0K_o! zem-kTuM=R+{_aB$Y@8%R1#kL0Uxz>+QX<%@OL9E!jXVTaYecyQ;6)&#lIA5klN*@$ z3hz`K0^}hbp!w~HDw^M zYz}0N(?1~pH{dG`i|f7Ac}N~>ZyxT8pvD@LQsXVn*sz(ONFEh#AL{??l{U`G8#|kd z^9ChOBh8jBllqxiYz&|LPJbYdHhn>fSE4!6U^yFlH<%w9E8w#>ydw6EPfwU_Yuwp4 zxpN_wCQQOIVQlWFmRlB0Zw_umBPgP-VQdcwI{+Tbg<*3(5Os1Jf9F!6MOB`tc2ctA z+2gv2jX*BErxz4SWtOmrvrle=jZ`-`*Zlpv5vp8VoW1V78ANR-WS1D3O#>(6lh!fu zu{vetX4sO~FkRx&E31xa#1H9bPiny9qUSaPr~rjJ&qL zLNHn3%f!!H_D4a8;1OO`J=q6`fG0Ja2N$PnebQduv-HH6u`ThX#RC`?sRlF=)TKJR#_<(C^M7 z_JcS=Lol+=eNLn17p9IH^I);N42wVUQ_=~3fyVQ)thxjC0N}x7g6ms=266>1da6=z zT_yzV?T~d+-9}OmTxWUa8KnB9FQpSB-L3>7W-_HCroKjC5&)uvr=o=d9(Wf*p2&MF zdJvnRm*}}-r#LKu?mk1Dpd5&Z2Y=*-QiH5_tV+Zw)AIawYvdq^TH={Dj1%nLQnlB? zFT$4Bs&TDjDuCdF@x@cpePS*hkve6`>c7Ib;C#6MQy+_DkWJ`L?=p4hQLz7%H?`|3 zMxi0MR6)%sCx|`ZV0ELLFOaZ)EHD2~Zp~Vs+%CVvG>-h6BAcX!;q&Q%WO1h2U*Q0R zr7gGlad^Y-G=$}Z%hFehU2U{IJq(0H?-i+qjm$|+{a@`Kh4MT7RXI{Mg?uz{hThIL zfuN3OlOBt?Ui<9~0*u$pLp0+7_v#uy@?o-LbHX3$wRZKvEUtrKp)6*WTvw7XkW~>I z^~uu=box27bN1T2e*R*i@GQ-dH}9^7xi}Vj;nUQ;mhA zpIzB|idUAB&&!h)j7{sl*ehd|+-+8He!^#ktzKN~wcK!h&|kmN$d0%~4T~zsI_v_S zy6-?3N39u>$d|b!=|*yXY+uFM(XF3S^;=;7Pwt!C2cpq@bD}F&tukBdNzy`6;pFcb z9b~?t&vdl`pWnCKlWJ@hnP(4Va{Hqjc@9ekJ6`7zN^bt_*jBjoJ9|vJ0orC)l^fd) z=6Whk0=vP9G8)_0x)icOg7ll5B&aPHitvOLH6o1N5Kh3XOI$ao`(ydP)KyJ*i8TfF z^b#WJF-XBieDS7w#lT^2CS=^WH56s4z?&dRIs>7Hq%?FpkcoYom;FEn$#}INrd4HE zX?M6m#_(D@*VWr^%;)gIAH&bZW#yvmP-(^?>h|cb_~jS(wAG_GF5e*icnyAMe{@B6 zH$!Hhn@e8iIg1~DkD@#aK=|r;bWj?8?U~0BUo0fmj{&g1WHF=65`dRlsXY9jnH7WC7 zAUGSGq^>%7#qOqR9H?x!pSt1mJ?QxlBdK&(K1zsz0dkg?loO0}bluh)hyRCTeewtr zE2p;0Bm7DuaAc@xr@_V3OdC~F;{YvQV8KY1pX&0-)NG*GlB@lN*6H4=5#C_K_0`Tm zZ?WR2WHV}LxX)&aPbcH$;Y$9uYOl}a@AIe*ulLj+Dq{C=xztb8^BjU0i>}1Gi~O^= zAg`oQG&sGyx3Ep5K3?sq5~e>x&n|$o;Dea{`HbWDy&Yo0o6^0c7S*5kmOrE%*!f!S=teV;GsM#P z`N5S|BSSx=&#yuJ`)x4S>O?+e=$A`O8eLO2j}@yGTTlwo?Lq#mx1Dyt6MQ@zth^I4?{k`T5xewGC3TrbDUM;c_-=c5VgQcxq4?x zTP`nTa+~!hzl9{y_FUtS;Sfmd5V93{^P$svtyr=2mr6F48emdlJ1579?2}DnJI64> z9xgcp-CfL*Mkj^IwtV<}{i3w;60xA%;NK;zYL^Mxc%>XV*J-p&FW^*Ey=s!X_7!Oz zkV{2C3jDX;mqSXP`p#LZ%Pgq04Ohk7eTFoW>F%p+GdHP-5G<;fkM|%rE>IOzDJjs2T5JSRJR1;f5G*)$VRIvmNu4mNk+F66G4vBITpxzcIeTHf-- zEeB5tHU6DI&jplqm!xvPnE0Lygg=94ukuADT{W2TWLzIlu__cFK3pbR{9#P-`Rw{0 zavk+#`;A;9O7%NDt~9rA|8CVu{Q{VOi(3viN+Wv^WDm;X^{7Zw=gBROd#Vu}fwSIl z-WH~1uo8!tx!=KUF2r7(u~$G2I?~tK2nb~e>EtWi?Sfln94a>}=!*1~{uISjp8N*- z85+yM@%@W=?+YNBQ?%064Xi2qiPka|EJV(ymQh?l@@tk!w>O6O z)4Lv(hwC5^y%f?bKnTy9f^4*~kXaNSwIZk{)SpCiJJ!S%oUZWxWn5SF+=b7@qxnlt zSO9HcX=XSzrtTIg_ir^;hHK@CU)Lw6_*#x^A&gvdbOgL zB^2B(De5QrJpH4={l-D{i*Oh z_u}Lrs)^Jmw*wU5*0%F8J1#s_Fb(egm%8Ti5v>-IBwH1mmiuPEuAw2mKMr}t|8cO< zGpU>I0LR^pHxK0NhS7Mud+;FeqsT#bGoIZNwCt#K>d3a>HRQt;$@oHf5->6UBF_AEep?05(kuYIO z4VBJz@`>1;_qot}S{5HF3J`rAO}--x5zJ#tu+0W}9&}K*+k}e+hvU=6r9bZ7?&W9p zlwe9qnECAB3WXzrIdr0vjvlJ^J{Q7CG5j*~>980a9U$z>WZ<7KdlfDRxn8wHN*jz^ zmqKga7T%;L&CJ_Op{7UX#=l@2UFT@}2}lyFQ8CDBE2N+}tXF@NQb{m0a2vVnl}FLy z#V)bmX>CS+o4USU5xaPZ@sJ-@rIm-1I)t?zcgysU#UIXhJv0cjv3Z&D^ao*FF(G5) zK7_UL!C1@(Bax?Hhg%#B3tc6336^cKH2Ykjcuhn>RLbx8I;C>mCYG;1Dj(a;mZ5bv zUva+VV31Kie3c}kSx3DHgcuO-eY+RFv)gv1Gm7*04}cVDtLDU6+7s%e(4l& zR@qF~n_&Qpp!RI;bA1z!&1-Ef&Lew+v6thI16-+U8mZW}O4I?ag99(SF;sP$3N&h* zrxM`3-pfXj^2wS@R|9@dpHWw2w7|*3HhGU}HFd_LW9ed?%#f>iV2b$diJ?xkfsbY2 z9E(uF#cqRqG(GOlhOdg}fdfq#5n z%~BJyyI|n@B=f4@)A)uFJ7mKK!IQu{y!VbDwAp^@S8rej1mpmJnO zUY5a+pXo}(Tx+g<9_5rASo?;isEnf$2NIGI`k)~o%W^51|4-E_YIzGj*6pBReYXUy z<+8yJ%y65MWf+xj&N&mCP^^H zxWBR(LjI_d^L3$-`Bw@?JW;J`!dyGsX)o;~x94sTMljEFoPzgDS=XjDDSxOF@e`?* zhX>5#lxGkNfBmG-Z^JgWdfDJ*tZo9!IeJ+OITRKrcHR{)4#3kz+4y7Myi|Dx3hZsY zhGW#I)0+ovCIdd zkHDQR$Z|y-Xf*#GFpFv324i&(QBo{(=Q~hUg%312#`#cFMHUKYiNwvW71()ehKKms z)}4vC9&U?e8pY7{($Y|HPAc`-De$^jcfM;^Dz0g7ax#PmxlbNiUN2Zxm7(xYUCn)7!{T& zwDnN|Hr^}KrRX{rk^d~vi%HJazqA2cw{!t?|EA)8a ziyo9|=95Kb@Wk8irg|W>#YWBI@^U5XRHMeFH(WL7mu*D=#2rliz8DMNpYo_DK!gn% zDJ?+tf;?P(Z7D-CP6F-^j1}=9_Fjgbxl9ES^=@>W{nBGRWNPbusAMsXj${Da91X_P zvUqInfwF~mwl&Fm;fRb9nO3k1YN5z!1jpSjg1cZLfj=z+i4DRNSeFpN&w57s+e6^nYV&A!6c4Gx$N_u0k-wLrnZxG!9qJk_#9hAUn zLLhnSERK4TUSl;KAodPZq0ssb%M~vNms|fDB?&HN;e+#o*8pe^mc_W&?LSTir$T6o z`6(8`M(oqSO%pX@Ho_YBk&pU9m{q>+gSnq#J`p+%3t3MctfGF)abo*F z$5XS^Rq`wlqJ5~f6EMh2t(jaew$zNQdJANN>7h1LlHTP-VYdxh{7_ayj`0x;Qw6&I zWMBD$N|M?MNu7hmka8u)EIr@TezW}*`IGm~IGL#x!3|_vrpp2RzpUGGXsjqq7Auaa zxM@Y#wW+|QTF^YYsAcPUrtA(tm_EeoR*|jYa)9@p7_oB^ zE|ruB8_t?Cyyy;+-UKol(yRJ^Y5@#=!qNQ8FXtxp1tRoFIcY4qjo3=RL1~d8Ka2|eqZLdN2F=OpD6_k6t6T9nIkz>BMTP?^V0aQ}|A%&EsHw%dROU7nf7W%y$?7UJ!^Q5~t`h%hZ40Jq9xd=I_bolrha>T#{ z&xTw$Ji5W+KreH!^8Xp3MZj+$54)K^DjpSWjW~TTYPw3};A>|KV>M$Wx5s%j91$Oa zUZJp0$gKL~Q$O9kd9&;?89(ySQeKl+h$uxXy^>9cgTSxT+brq9P0qeVosupM>?3dK z)QTI}_4DF)(=d8EtW@s=F_8m?72eH6)e@43C<|yAf5&SlR8GuO#8(-3=yhsnu%1``_?^`tdnE3fkBs;0gif$vzZdB5r;;CXYA8gx10haY#UMGmR z11+sV1&KuIQ}3jOO^$m2IC~={EZPfnAmQz^YDkji4e$B+BQKh(TFqj_Ma)zD>Vzx8 zoaHs>!39B~4s(4OyZ0k?OINFkdR^A4Q&O>~@o^p7%(RJsVm}1_SE7#G%U3T`A4tQx z{l2VDbGQ#Jmm*eeb#*mCQH!h>t!|9F+8?Q$+6#A%tR!7ooIy`2VDsm7e9XIEv57#j z#=jbA)jA#E+>4a@$M*UNG5%(TP({ZTgVjvE$EeD3cm_`~hhgUF^>5TMJv8anX_>|p z&=a$B!1%kcnlW^PyylclYxWWm+_jf#x9P&Abx&+Q+vr@^N&L0>SUx|{22nxsvztFf z?Bo2mXC`-jdMP*Ppk3v$08`!}zJsnEua9_T>sWB)v|o#+yo!?F?|^kbd>oBO|Ul=yRU^Pb0^4Q z;4q_waV1&8lOmLn10WU44B>E6VZ<~mXZQ{ZfBgU+!n|lL8e2k+ok_|6TgvTo{d$^p zMQ4oXj{!ZxC}oi|Q1<7?jF}=*p)3oN2Zx&}|) zl=$K#?2AItgB&k2BMF7hQw0MWH$n@@ysobS^cRVYLD9ECWOJctkY$+r>EO;CEvfZb zPT}A@J$~}5b^C#}@+e}|wANe?3o=|%?Uv?x_vNn-@2)-Gg(q86cao&+Omby1^?p?y zSfYOEqk*2PACmj#O9J-MM@A|oIT2PY;>*1;AId7-xqafq%3?@bcS}eulO`x z@2;2Vp8@fBhR{^*P%GhzRG@s7QuU*II6OFPGNLzL_)~l&xvKPlcrAO9c|yMmjryMJ z2bhb?i%voz)O)aNI_@YVHeW$$+!IHfz|{jgFy~2V3|sPrFU5KU!$TyO;szbtqUlft z4Z`+*RP=%|p;7@uWUaJYE6_3>gKET1fO9fF__K_haOA>oiNzLO$bVi};f1sod>chJ z7lWnnqm|S@lGbWrr2`TfkQgwtP)jj_$vJ|Dl#z$A*b+VZr!R|Qxd&t&xcBLm`Cv@i zJukxt_xV+^h_ENFuQl>rrNezb*A4q)y@_fW5YJS4px~M$lzp6^eMH7 ziG`p7{`1}n{y-yn|>YLWchKfY3gTvM*>6q3@{7jj> zL=rU^fUyP8Oqmvgu*}DMWw%e(u5zJu1sEh+ULkLBoE4l5XC$<<1Q0 zwUB!+RpKkm(hCDjB=ovyErBh6g(TKv78;GxjkXbd!;f2(J9hH@?Z^kfCLBB=Q(fQ{_XhFd7ZIJHj6%O2OZkCsJius4SafjH$tMaiW0r;-61AhMiC=QO>ayFceO z_0sYE7Wx!|9zy=aqtv=Cb7UsvmDoW14(s!sO@KZYVT}4t6b>E8=>#H<-8we^$OG+| zC4#Pz)YggH#t1M^&bEX+{d=>zsbwNZpMgRMaa|PaTA{+y(ARX$A@gL{Sk;EgQUXWo ztqO(7UJ3CJcImOiG+}b(!uMRz*aqS(GSQ)(4vD3tKDPe(stZv^me95c1^AIW!QE zJoP|xvh4PiK{AwoQeviBK2X{wk0doUG|&t+GwV$i+l}iO-(mcz(DIi-elZ~l$v7JF z(!l6d$)0U>q?Wl4yV`RmnxZh`ZbMC0?g4ozb#*%XO#%j-aV50gyipvf#Hi@6fP`Q- zgqy~h2}Z{b#aP0gc8@9wYN8SMOb%&ptAUUl#a)~DdXwp)Y#+V&3Feq_7Ms`qHJy0l z6~dBZf&Xw8xtPG0kPUxpA^vTJ)3~erm2C^o&d`>ME>9@!Y2ShH+d$oJz{`qnXv9o& zO^f>Xo8E-;iX0mOQo2zZs8vOjoO5WIBVuY`s$!&fKr}>*9O4AW)ifkze>(5$f*w-U zoeD$`p>>uxi)q<|kAU~eCq=j$<2hC#2fqVc9StENrwQ~N-u_hd zOxhhx*ElEodCq%(T6phdnCA=DwsT}=BYBl>c$l77uxlTIa} zOzPs{=%W%>*oprB_da#cX16@bt540QF95QENi5wO`|yc7eT;7iaaf_uu^xG&U!!P!z5 z1D-{alcH66fq96-^qo`qzz7TdXVBt?H*oCj1tK`-PBNL?e|cH;tE<0z?=i!{TjW^? z_0fqvK0P%EXdNFhRFE+6azlzedsRvo-p7FXU1gAy5EdwZ!h51=iSd|hSb(OM@wcyC ziw7?!(;u8w>yWc_gT_3{;o{VGj0g44kxfC3?Ro0FhG$x;Aa@ID*P=v?2b8_W-JXB%1OC3&e<-cB?56XJq@?) zEGLw|>1)e0zv|>8bc%~kxN0|x((vo*Req3_tQ<8(MsV{7TT*jF1#>um_$tCyG=O`y8_#h+hoD;+`h$y^L>SEqP z4i>$%rO;OOKW>I=dP<`b%0*N?M~9~xX|1#xZ-d;cCa|mvZtx^W;S9v>&_KCCW#9J4 zXW;OEVu}&y1@19~7XM#N;e=Y>y}t_KqoF0EXeWC!?X%VPNB-BfXluFG5clc;G$h3m zMKAf6Iy=0EUq}NDN|3aCWvE+IT8o97$3RlsVc5co2?i+%SPdcJq<6DAG?GUHe3Jm_ zIh%+;&5H0gobq-#`v|03MYwjyrtc&OQ-<(t^%%7@98lBmM*cLcA{mQKNYb^YVX?WQ zCU0(WaZ-K%dBxek1QYKxxgY=Z+p5^#7ieR735*<1>Tm~zuLD}_iSA{iOdnb_E}3G< z_*s{z6Lque`i6<7P^A__GREXYeupHP_xZ`l=g3pf{f||zRv76J?ym7JLBSMl(ZJXz z*i4F_2;}l)pbq}=gPek)#Sh1q1pd!s_3Ungot9cWxBPg=sN8}(bbhN~P6D?g=c*0M zjEWEv`UIkR_uDgHb;h!@nk&URxqY%-=bdz*w(6=a)gg?39AR*3dP2an{_-&1S~V`` z8>qRE^ii^N=5X7W8(mO}FNd&*Z)UK~?ZR(TR@0p&4NHfrl!*-n>wQ%Old&}h;gvLT zX7~PZzor)VwFRc(TxWk=`IldDds@+5(O>*;ga2rHILi5%nVj(dA?e(I-lZ!LQSLsA znV;mgYw>7~21`S-sG3i&u3;RMS)kxgmI(i=pL3xeF}WSM(Ii_gvl&e^@{13^8=u^l zzG`<@3;sE3k*zxWiwfkZNi0TfB&hMTC_^l}NG-bcMrKR`v8hoSa$h_kw`z!_GuGIm z#n!O2D>;EAS*TvSca6I~l{^#vNw6;cqPd+ga$`8vxuJp8@Zb0 zf^%~|f-ftCCx8|7k$;3K(t!|6Fks1G-Nj;mznS1N;uJ_>qkF$G0-nTR`{3=9fSN(c zonl&3GsEv%l?Y6SVJDVtYKpTn7bz1K=9Rq7vlyWV$qCwj5XGJEce`Q)=D)q1sj)pR z4;S5h?vd8|FxkMx?1VFPkWD$ox@(NBq@p(9*J``QJ_<_=;@QemobPw82DzhpL^QOo zOR%DTXWeFt_<-cNg7IKo+mS-tfLU>`0ZYXATT9b)Y$Juj8#ce)5&{-0cZXp@W&Xko zkO<<-ntfnJgn0vo5_F+O(00f8#ePh?Fg9b^LaS-JEBZ~{9ZyK>zK_RxKiTBHlA8T92&BPGa(>%U#CE~8hGIhS^=U;IJ< ze-sO_a5~t}m;(#CQQEV8;5J&>IlgQNJHn{&E+LQ!jsWTiZ?Z~a}vj|zu>v_aFZo} zuQdM4L9YFA)=t}uN%wHGpS;dv5afB2g0>QMJS^;H2bC9-tp?qwv#;+!h+3#HORp+d zTY{HzembyXA!BY*{w^mB1mqxXC5CHr+o@Q;Ah~a#V+-?e7P5{LU!oBE46w*voHe(b zX5( zf`v?5FXVw+86pcwQ8TAuF|56F8Oi$KefEwmZCM)1?paUqSo5BDcR8A}=JhcJSZc@7 z`NK*SE`vYIi7vmnW7>GendG#N4RQOyokAvh>$mBWD3qQML~bXI_$b>V{GE*JY^inn z6MKGxOi+f)w>BHV#MN>1v*T@t*dIRto+ib#^49Kstmc>f^}4MorlvYW5wnf4SSF0y z+;H7S6Et7=@F)1I_V_J?b%26I5~VWOI^TD?Tb451p@RCB4aM0W!wK<2-yGD^7(${T!$#6Y)Bz)Xz+ zwm04K@n+|}_7=F@T&LHN%yD+EqJJ%I5x7zDYS*FXDWrSnZ(1ivnJux;pw)7-5$H7W zySMf}&LY0yrfFHoTkh(~d&6~DU#iyp66H}&f7*VEfxk-^S2g6);gU?h; zxpklC&>5MvBvMLBVAA^w04LKzZ4zfzYKadDnGYZcsu%(r)3LgJ z&tUsJA%pEchd7h~^?_>PYt5fo23-J149n(X*k}68YL{c6%OLN?m5h0v*|z%EEAWVE ztKrGMS4e-zS*CWWe;#P-!|Tj*mvtn!Wb46Qs%!W`p#SMXm^}$bJ~F?PsNrTn&G(iK zj;*bzr1Wm26q+t)XPnD^CizM}z|nhJ)$SO;;A;5uhZ{2P}4&(?3zFxu?6 z;g6)3qb2nuv5$T}`6JqaYU9kHT|$XWD$H|d9Cqc1avE@s)Ue}Ef#Dj`vp%)@vWIJ( z7n#rd5|77)NITDh zyr=XsaoVqmjiz-&LB}U+kx*xf=1^~yf;p&VF*1B~e7)JOAs%d#d;3?iQOr1jS=DIY z$Y%vZZ3z9${EhTvhpSK%+>+W$&!<0cJgKk_$kx3lPo`hu@=@yU^ND)d{fJ!{focw! z%@)-`?ax{*88n6T+*82Qy@I3?2H}JJ{IxTYzVE4Y?AiFcDh;^N8uA?4^T>GI zmg;$m10BDYnNA_0idVv^0mptuRv8E6Z!V4e8vWwnc&AIISGA7#}1Q5jV?s;^7yvVHo*r)i!^E(*N$!ZXt1M~^wLV!g83r6(nl=n#!=_YK+Z{HhZ*ddQu0jz*nqhkGl zhEbSNltNz5UlDXnhAP96hZ+Nc?IeQ#ZzUhZX!|Z}lIXC9_+3#MN1-Hg!U*%+l=l}7 z3XIhvq4!=DchZPItmWu>=`{CD_XBd2__mreC7XpI_)ooUWibVhcXmy`m`Fa$R$YSO za37LBKoN7VUH}QNE7N2Rbj+20m)(Bht=TOM=~O?G$xW))rs37*eWix6#>Cs0wb-E0 zfKv<2_B=e9JO_QfWsaH#Pl9zW>H9?Pi@dUK@e8>7(~ZA*83l9E%(cnOQVkskD&PKQfF=BJml$T%Jkm?~B zYrtBF13Oxkkg?LPlAx@x541xyR~1=v?vL{R^NX`BkiS}XD4jVuOD==3<8Ic@;mpJNe1<(-p;f>q>pzjjE<;V*osv7~*Z&C)_ zPbD5xlmNygy;0V{Eu!ktMxQdEN1|ZNvjUuB>OS3P&r9wz`zSu>P2|=q6^8L5jlyHH_hTH~Qm7zacIz}R2^-Ru~xD?1~F+NjiF2;_0k$TSG&q&>NpdM*| zY`bSp#}%LY53l|pKiGUjf0Wx$_w;ln;~K6XIf79PVZrliYeKZ4YEs_;nsff>@76bO z&o=qx;-#f7`oqaY*2q`8Ievjq=+#?u~=pE^!*)=%{P}Xtl9<1sr%YqgsMlEjb$dU zof%Z@p`qbMi{ESd1}?$E8j7U=mRaV$1d<}TPIOOwXBTj~H=77w?LaiaVX3!(-a z5arO+$+Zb}V@aKJ&MVXXBJN`+qs91U!hKF3E52BN`83XHl9h18)J2*vJC-22p+AiD zW&BjXd!|;=^F8|@3$pl8qy5c^%`s3ofgE)|wxl+2lnT0{3YJhD{U9$XGFZ@grlJDN6@D(3; z?tB|zOMAwEPpeDT4f-%gNs~X;-NBziLd^bcGd>GZX8f2 zD}7eIbuJ2pS1V9Fb&iO|}!!n6aen2&pcwGeB-=t+FK54y%dJ&*(rryOv6;QbzTiHsS--NLO5 z(my^I?NhHmMOKZ&p5F_`SZkX7-A7jaP3Y?WNU@)LW%~%<|H#YRx2$qqJeHOjO>PxYoxRtdgzTs~@r7UUT+c&-49Ck0_Ow{bl5nU#aEP`%-av8c zCqrn-sYs}jxgKb{>Q#~$<-k6V1Og*J#VkD0oE?3aZ>Knh*gx?M#~rMyd?ewT?wpMw zYY+f+?AkQMeB=yFoV|q>@1VyctLxc0wENoubt`<@mJWdXj~2CqLPhBCWy-;-)aFE* z5|5xVM(b^0ToR}e!~V2RSKz7NbO$SiHf-8os-4fF2D$nCU*fTEI3#zaRgjwQ+86k>e#{O{mO?d^m(zxW>(re zK)1dHQ}Ve5!ylA*0G*cSW860kumTuZ)wqqTNer;x)5_>JQ$MY23K^zAIh} zG2SV5tkzujM7sstyFUjLco6U@0D<5Poo0lz-aPSfd>u`3hpsJ?>*eO;32(!e*J^JP zg)k0y`yz_MuHo5a`k8sU(x_23se2~T(=m>j(*ZU%efh0SG56hxi8=^q9kL!pZ(kA< z@wQyha(Nis*z9$`FJ5Ul@q9N(TWZCgi&RMh;zcJPH-aUH?1&DkKOQ#i)ey?KcgmL+ z_VF|s60PY)7tSL>DjLq&FJA24C)X!yQ2J(M^wbPrLMgrJ@lz{08+^?~hsS^7J@elc zsV!&c^|zs10=Qhl@>_)3iTqGup(!xKhr_0s^ktQi=p3wT-tP%#JghBn@Z zO94u8KZGTd#&ey=II>!Vw5k67yCCF$E|^tk{_l6+bP<+mn*Wv05qG#EtvUHP#aooi$odZD`Lv3t`W^3SRi^7~gUS!FA3*&c0JA~97`z0XpAHOw z^8ygJ?-9r-0}}uoNC9i?5QEdB(Z^G(fnWA?cR~ z_8b%{aFjy<4Y@7$ImEE!K+=Q*TTuLTJeDVc04EVi!T}UNO3n&+EMf(0N+wQO;h`%8 z&nXYBf`4G13t0hlrK$YOqkA_4j=k6|0jhF9C*n#y2UEuQtfRpL%*xm8r#S~~jbc5e zo^>R!A6)P|xURCcjaiv@jlxJlXf0qupQHDo;D%sHm4$9vDUjwLg!?Ka_i*?i2K}_mBk;JI1EU^@wt& z#bUk8wKFq<%yq){QEieaY_1`R0f(!Ln2I_l!g)fXl&3`F2Z~YaD^B`)j=V!+@7&K_ ztkF@&q530+w994Gm?lcr2m&NiUGcbjM7{eN;_AXCZ=u&PzK0wSctB*5J+Vw(lUm1+ zyVS2k9T84r44kLZVnJBJ&Y8iGQ;w;X_Y(FM)1@#Nt|#Q<3I8_ZTHuG> zf38@Lc!UUjL*GUXo>0E&Gl8D<`0iIQnHn=y8c1yzQg05>rVHr)a9vliAY+nr{@OdN z&t%j$YiRWThzyh7BouP)m4XcOtQW zi>xLi9kq8Odqw`jQ;*sOxD@PDQn@RZ?ZNwD7*F`7T3p?& z`{>6%9N=QG?DBRatBFR{^h>o=>^Mk!#dGOVrz{X#0 z)5>LQzlqjM65$+A^zPKOA$4)M!NRi8F}6@S3@t$pXfNn&o*(NdveA|wK;`tRKeS>9 zDE=AB8w4C)SFJXapy+@(gx6sw1f<$Lel6&bJPr!Ru;WphsK%hERg@kw%?oq7aT@BY zng2kzVke07^EkyPSPQ#zMlZ_ZyfKDDZZCv6S@r9qRSdG1)6O*>)x){Id)NZ4LUTuF(Ko0yj#7n0^k$&4PjS5 z_6?T1INC+cUDh3d1x(o>KDp9DjyFd5NYva88wYut7p7~qFP+)`W%z;Qr#fR-krGSa zw{xXri&mJ;1Kk&)e1zSf`7vHqABf4LIiG0RP4POw#j*8?&rGE8RPxt!8(2iIdZ3}em>2KfXOKcZ>q2mWn2Z1+6Sszg=*&#&r^?#s7# ziFhfOB>}Cxe}8()m6TyuEyQU2nTZwP7}|neEeCJ||8}5C{~KX4Z03NCkAsZ2>f^Mv zpA_nn`)op;k|W~VLwqT?!Cjv0$Ttpb=!;k8WP@MSm_Ig3k^S*sec$t7fjbg2+EUFVs&b0Qvq{kYB zBqf=)ki!b#@OTqjqD(LgUC{n7yin#>D=lbL(yzG(Jl=r&c?{$8dPw#QqU9 z-g*1F@{liS8ZE)7avh~)1*CA3xJ#EyQ9fX{C1r_w+9Mr<4lXKP4_<+3HY zNOyDdjH@mxld&W5MBy+@#$reJ*IK@{C~T@fd)-aDfzbTR$w8cp+p)Ru!iwY5PBr#A z%#b@8QXJS(1-UoEwG@F=CIwzr?+vhpQYHNxrAW3+ zs8O}SpW)GCPyYX%<{)bR(th|sa4W(CQb&)n2@yWx<366 z&w=`UeTKy;s<=q5DW}aSW9yr*eXLeOiMI~fBGz;v{=cNnSw2UqQYf3xMz!4I%A+fP zk%{_4j*?c4vK)@SsToHqVp556VC@50%PT-=%&V`5GuX%`HuPXsZsGAN0{c>mR;f|?->ME)OYc{xm(hPJwQ~>@u-32EOeV?;Gx_z6?}LylyGunRUU};x33#)( zwi~?J*Lx^vw$WsqF5uP}{zA~OeD4irNz{31w3b)tZsqxRx;WP^9U`533nV~IgAhvH z^3zHAwDe0d@2uoOSssIrA7Jpe>F~1{{SEZ^zj(mD-Oz0P`m~C{EG&K;;(np!xAJb| zGv|}-bC4?66<>TRJMR-^3<8mH{V*$oPxv0|985c}ezgT7eVF#wDoAgU!MW`Pu#Zay ziY(OjSpRDO`uCdvL!K=n=Npzc(W%~>$%R6*Spn-w{V%ji(>+ev^Lo$hAd^D~4ksc9 zjg)9BnJDg&?BO?sN+Qm&O7T+5zrb&#dCCUok-XESG4Qt=IG%>Y{9IlG|6DSk#Q1`1 zSm`2n&Nb*5V#x3>%&6c)AdC}fJ@Fe@Iq(|)JGq5M^5Yu>=TCLHGVUjP>)7Z6WXKSV znq{pH7zH~bC9?otwOG@6xJf=tAI_ zzP};vfD(W7^lPuoLc{GLF9s`X>mrq%XLP8CF{KdvkUfcXb5Ow0>g2!*=YS3%Zb5f= z@-pS3MK1T>4h_GV!+Q9Tjkiy7v+W{_Uqn8m6(zZF6T4KGVAj*Bjfj8h+1Knj=bm6< zG@|E#RpP^bzM2IBWhyvyqQq#LIZ!dP@9W4JXLQD_-X}lH=b@C~fw9Amw^*UMec-fh=8|gLAuEw6n{Z8HK5g zV7Ljzydva(?9D~QC){tlboZ(7zGX1P@udmfUGJmcD>iXx|8wyJL-lM*^`|e^%%o^V z94m-N0or&ie6}fd z6Xo*bSg_UhQ&uR@A+`gv0wyXokb%o0FQ(~ujp2TiSm>Z$R0hbym?{A;Gm>$@D3RdP zYdE93@4{~mt^VPctQRj6Z(Nk*X+8_C&pRZO*S$j@bYp`i`hP^k^oqg?J%fxLKAgaZ z9MUUA^1eGLX+y*2Oi||MrWx$Z+giOPksdkq&zC2PK43eSM+IvnzX7s1UIOW9WVzrO)=G(eoY63xR0YEdK!!Q+8jb(F;^a>%xZJa z_+o=(&cxFR+*H}Qt44RO@byV5;q^BJ22Rdttv}1Cu1KT)N zP`G>u(U9Bu>mTjC>MPRO`_&E6lq-GrQgAq7zR(=91CHoiJ4Cn?j&2!5I=bw#VcQ@8 zudv?0F&s*MLrXCSn^Ly|G@ito;`jA(QgA2zg1kpj(T-5g!LTuDUASutCh1fEWy+m~ zn#;FM>l6heO!7eE_Wtx-+3#F^P9L189Jw?$D9d~Y$4=F5j(LJ$80#mY2C%at$O{F&nfT*#l)EGDamXG6u0{0?X_>RfF!l=Vo*t|86|a^SMsd zIGVmu1c)SrsOYq!;KyepFaFhToZ_Z!>ze=i(QByZ~Mu>%O$c zW?TOGEZDpv$<`h`C5g{dDy*U>R+&39MXs6QTM9@SqY)Rzhd`t^d-WxJoUKnLjewEnRovl1*}6KTNcV0y8Kr*TBNDGFGHwFTKcwmRpNwQ_ zn^Fr5nrzE_%M3S)O5dkjw`ypY{%qc<(#ZST&W{|@@%%$n!Z4@kjz~4^T$b1qML?Vb ztHx~yj!Do5SVNzZJoC@hRiO?>ot|pmJ2{;j0P{tZQ+~CqrZ;#X^GoC6svSV0dhT4D z`j0b045_hV6Q(a+T3vS~zvKI?rxo7r;Yw=_s$Dnp)lj^M6O2?F!On!XN%I4uf;Yc_ zO3E{gur^nntm1iOwcxp#xCaKe0A44?#oSBU;E8nbpVBWgS1WD@xGng<>Sofx3B}aPL z*Z><2$FHqVYo2I9`_k$`$++}uP(~I$as5<1hnjWXDs{tk!+9T{ZjO45t>5~elTxzt zuLZMxg&{orB*P~y+d3n|u{)7~Mev(Jn4+<7age=+4lkvv<5tEU5h> zy(Vf)vUXX^v&o7v}Lt0wpAe;`E&{8Eqr+PSTiSzTbkZeHNvKtjqNF- z{q9bxN?Qviu7!vzVACdp1z%EuefLI|1M64oGd^Tg#@rwTNmOX#c1hVF8Tofuwcl|( z6Sx1I0-~Z1!%tayuwKS2j{ODPK&}7Z&6QG|p8E49!w^ep)jTtgpR#<-kkNVHAc#e2 zIkmLls1opH2pLBcjU`~2i0tuHSG;>%MiKK4rR>_`S_4ZA_X=MX5O$@>W}JVpqbl3- z#!y+}IzaFfx~NPaL5Ci5d!p`>s^h)Mf#FA8gATX_IBOv$SwsT=p7`V&b^{jsU=)>@ z``>TG@&Dql6J(CQwtTEc&(Zq%ICBzF>>hc;uZWk7#gZ2&^uQ`WGW4wVpU+(kr>n;?kf#|NGP1br`FHt!|sXwOQe=OjKyZfv=|;bfz-M8jM*TK zhGqjystL+$koy^2qP>xKkXVPwU|&QTxI}`o!kO40CXDj(5d`I%5p8aj>vf`gG1)))EGxGx>RZC1YfH@=lo}ZbWV=khw@ibp zJ}@N^dF~ch41bb2-rr0*0l_aMyCd;{+}wKy&QlZ0F25t8wXyr4|vIQr$2uo3-Q*n04+g-cY&)q)~c9!U|kX8$O9#A#)HJjTda5=;NE! z0hnA}<`Xkb8#e6HN~+tf=#m6}PFw-1O?575`Q7^`CeYL|EDs73LpBL*wX?1XkQj6*a58oCG^{!Q3V- zi{1lVpoN4*Pwl!RPwh_Dy4Fhw+2Tnhhz>PS-pB)aTQ!F8KDv5>lpj}Vb$9MU}4212(Vibp|) zzPaovol&(L$riR79c)h}O_%F|cO{#Fv?GVF=?K0K>E8n{N-YgMZ&u= zc|c%Trta`}mNOSb#uGge>BCQ`?|2U?%a`7)G|GRr=y-7hwk&9d7p(w(Uoqi%PK^&v z{4w`H1K``wBha;pL4;drQ^yU~tNTY!s|+Y*O8;0EjYLq2;gg_=Ma-sW&c|a*)90<) z@ejueAU`mRoya<=6mpJPQxR-iRf3*dK;$nl&1hcCw+*r?``KE`mt)xAGlVrc{a5gM zGFwApN4>H9tShSihkC@3@%s7giRuJeI(;7-G~Dps3`-i2aa1_y0f5V5=BvA|sTz}{p}16@ z*R8AwAXvVv@OAkol+;4#yNJM1Fh-zinHxx&TSXdYGDG%^+e&~|R4XbF@Wy)LF+Hhc z?$f2t7s!FJBH-T+jE#og4I(&i?Kj?W&als^dhCegXfjEYvw=4bDuh{!i5egFlrf(X z@U81_je4Ly&hia&JrPeOm2bXO509sxGYao6L$X^8=YMv!54!Xzgt!U%F+FVZ`(yEp z_{;p4uIZ)15}s`7n?aZ1mG|9-Wj8VCm@AU;=GR1$Id6yzL@ek{UrSwN0qnOI#G1+b z^!;Qv8NTm0&VUNj}k#0}`R(P}pIj1*89q zau!ua2(B86_h~+JzX1b1Cg`}M#8;l~yOBj(GIsBnnw`C0uiztoxAmKM4h6&g*Hqob z!~@Z+=$Ocvaix1QwJ(wp=3-%Ase>pV(A=cR%eh;f2AiW%@Q+%*9tFj)XXultR(_zC z`6^8E<@Z}+H~L>Xmvg1`yGx0D5DB3VAa9^IA(^Tv=1ZpTQEAEY%rp-H}bSU+*K$x`C*TYFSR_Sr$sJmJ)ah&^AVH&QaKo5+oyqX){>;6~J5QM-%L4*-IU;$| zcsWxazOYbxF6WwCH!;*0Jmc7igBce!zxM{}_bylVZIL5lRB}8LtIQBpp^I$%z$o^2 zu1OwsP@@rbZli3)VQwwIi92vEC>sTbREz$8ND2h)cdox5NQ`B4O_C`|>hu~3KS{XF zA+FoMaf|S?0ajYPx4rBBe2)eylZDq4WJR&eq*!$lrfC?sZrcO7nnXD=_lDwaCu+~5 zPmz-79pzvC+$Q0p{O>$VXqY#?CXZdmaf?H~Rlw-fSgt(h#orlD;nd6pg3Ij$AVwMS z&9RH6`7 zbB_Z^v_(z`{-vS2Fcfbb`CaTRSF*<#h8n2fZXKuyQ3dRMB0|N9V47jSl2y;^r6`EkaGJyPy z>duL*!dx470}TU}Bi0f%9`145nA_u==JJ9wes#R9q6OetE4WTO=6u1q7^-(yvOLU`q5kG#r|5ew?{u%L#9@vz(oJb6CXd5ee^K$>H}i zcxrp*jddqzMfRGA>(K=W`DT}3>%rzXN6&``y;O><;V|5RoZ9w{Pil`K7?c>67%~KP zLCpNtjQP$gA@unLOy0_CJpJUMUjeh&XMZ`IoJ)#>DzQc%HieLKp~24!6I7i+2i;R9j7+2ZU(TLkS84%+3CI6t_Aos@SpJe1`4Yz5;F-kVjoyPCRO zpC-oZiQ+wC>AaCG>p?XqtvAcp2t61|*}A#>L-VXN`(%Le_4<00TMw*AM!>$xeF(tf zPbtl;Jk`luNt#YB`7sug@f-Y@UynT4#T`QrSIaaFMzjXMsE;~7+1-94ut062CZVCS zGgkNj;i89>F4;5Civg2oD7`zB?TO{IVY`ywY8Sg+sB>@`I;Ud^BLBnt*LS+0JNpvL z;(%F+1h>q44i1E{|vb1rXu_Q(;x)YJ^0)AoI z@*Tge5qR0kSs4w-m2A64HJ{Q+EVYfZT4NM zY<$DX^bKr@UT>L>(=ork-=ds4hnqi~Glk(d|t!vPNqF3H8E>6{S>|7qZ9QX z%Q&q(E}Pax<*3!XkGsZ$(S)^5Ou6~w|+8CXVuUrJT1SuT9B3|zzaO(-R5nhil zuSW{esk<9i_Ci_3Edoou9f6|t@RsxK-?B<<7%^jdU)Ej@QrP^(N|{C^%p1Bp>w-n;;)A05{J~5z zbzp8K%HRQ6l@#TOdc3V`yPK4;jQXwlq$x^L<_Jm!@x<2fVq|Uaa(T_HV%TKvCvQ(slFCRO(2eS$xFiJ=JmR*5EYrsZ?K2}kF4}Wx zd5P!DjJ$|nPw!9P%+nsmJ{GRFAnnXi`$#?Pp>tU-lHxw6)caj3=E9IbpAIgjx8nVR z=e#ay8ULXhFpqzprr;Vjm%3L6Z*i2pq2Wmq%`CXXgqL8l(a5DEp8EABYaI(EZ#yM z^6(j@MAVQyGerGi52rlo6PlbT`YywM`~MekK`%@Ii5D>X2jW;8LkKahmA~#aekE)AfZZ~usgvcziT$a^)@Z~fO|`_ zJr4T!+vn)pOuu5jk51}F4s3|zQ=#8w9=t8~F#>u#QuLs#zw9LGqTcju=(xZ6IZ69w zU4<-OGO%vN&h~iz!(fWV+41U;IrC9&O@h|pe8>5LrezNsbXwO}(XK$JK^hfk65W2!P*?{Rp1t~WNyt+;2lEhva_lv#ePREG=-7VOx;3 z)iC5WBN-FZ3it2nDVhXnn)+Rz7xV4S(w~F(MgHDdP$XmaSKEahJC=WmoFNU+)6Zp> z%$ELfaAIb&oB-S6kMhInU5r3|qJq$?H}Ox@R1Sb?$?aLPS5WmIuXovaE-{q%I7+!k zF2U@Y#O$#NSXm6%i^7Z;S}*vGri(?}4mzS^7HKTO0-3Q8AXf$mDJskH)2Dv2x!|=q zV=K!k)sN0sFHcz)s#_OolC2WzBd1+6GhSqRH`xM1cI+pc*8dFQbKtGD+glbAdGt=4A*;Ft!i! z)k`pp8#S;jSH!vb)NXJ8>3YW8FUlM^CXX62b=-y6Ib4-FPo7Y|9h;acGhnz?ILiDO zxh|JJ?Y3)f75~n~JgLo5Yn3vA;n5AnU5YHR_0OWwJ)rlh0rHq+#Kol@lx8LFHdLTw z?qrg{rU66HnEq`u>wFGhhx_-!XS6hh!AaHL_wgs)FyEUmCs|ZB;%H~8Kb<|-J$Ioi zc8B4-6?p+ZF9$a>JgH8;){~LSjwWd4wir7b-)__gl8cs%>9pR*2t`bg1m*#x-_XW| zM#~&@fj}IB_eCA3_~dH5uX}6NCpK0i%cr+Ul{!2cmdJ#&9dUTW8=j?Yw(Wz~Wn@>Y zg?Kf1pdA#{)XH=e>~sD#a06>3-8t{_L(_B(mkWB6nBwMK!tL*B~6hFOYjofzXr*MrD_xIrl{uiX2=yOf4w{sj`Y6du;l=l;D_($_r~Ojb zu6MnT^wAADv0H!-zhoOJL@@kZv!+tx%WFu2QQHzGoPD7H4KqYy5gj-=pd4(Guaevf zFiF7{IiAa4>+BTDm=_SSq%O?Hzw|K@m9c=+zp`pX7*G!JlKcV@%RgTJYd+ic zzxX=Ku&BB>+>1z;pmcYKbO=LtN=uALgVJ3CNOwt!G)N=eL$}i14Fb|NOq}ukpY!!x z>*C9>X2Z4i-fKPUS-8@ZZnH68wB_%gfqiC4V z_&zcwe4uiM_w0WF&-=S!H2QbR;AtiE^-%=PsbYa|e{pYt7`?$b=(k%y3>oy1{1mGd zT=K(PR}?F+$Vo=bxJK+jzB!X;0a3nx5)SRz?&`~=?-JyGs1wM28$?&J8Hbjs>eHSy$ISvPq=O!(O=paZHoyc!h9)cjkNFHV{Oz1gQG$_y@g=*k)Ldf0(yK(+2D4=V4=y$s$_ubcW5j>Swkv=^6%`fJC|GBH&Po!{{pSL3Fo^s>5r|Gch0ZjX97+*jt2me z1oS=%`SqeC##AFwLnV~!)p;PYzbbJHQuSa#rLODNKGL5o=aQAJshJNnNaqMgnUTvFcE`NUAA ztrJDTMDF*b2TjMJ<0b?LnwTZ_=pSrj0AcnIvNIH`?2P4~jIrl(=MV*GCw+bTIojX@ z7lVmNX_w@~i7!8KP;bHH_v@dQ)PsKhuD54x_pXD#Q}=!Spq1d6oA*A(tn7-@m!HA}iIv~i^rVGMnBSyGZN<;R;O&p@3>a+&$^m>8)r zl=r#E@4}mSl-;H*i@%-=#DP%NGeZy)z)-ALUi#sau_z@ay;n~R`qCH0xXJXF`QD5j zx_I$G#2JR5tm|o{@SfmXBqjhR`c(|L5|(F!7_Y#S8~%~8JP@mgrEt;+q98vTXK}bjo7{=j}5_ z8y`fvx17S8okgL_0Gd)qds&QIQtbQ=o7UQ3v@xRVeImwU^fx5vIIphSEW+G$SO?#H zyQI=NPU;kjV`t_O=TgG5q{z&aKNiIFrIQi40y*suT}(S3hSNgN;M=If37BQne0*<1 zpUg&{egr;+Z?uNpx6=N`q-@da%WyI#3-UUEZ}+pF65~@$OT2CRXesLFfpA${3bLS1 zpbxxEM{ByZg(a;P_}}6IKqsQ?{;QCLi&4ODQkoN2{Nr)ud$|k5-l%^hyZY+W?f27WHv;eC!?cYOzh z^a#0$@c{hezb4jgE##H_F?pJVZ)!z`yh^}A9ik;pc$@+D*GD=(JBIN2tm#;cq#2^~ z>@`aIMy5-S(N6C$PNWa}4-ui(w2AD0~&yy+#Ig(tZ0C%)A755Nfue7i&?}w>{pWVdGY7rnFuMzLslGM?* zB9Ur-i2sIRLx}C?SdU* z|K=g=y8kC%_%A)=VNd|k{=N={!$Qdr(}YH!-#p;u)~1GgO>NakwK(cTOoRi#-E&pC zXq*J(*KYG4x87y&4E&Htv=pxnE`F`my)~fyOPy^{?I1f(oC(Y@o7;yV5HJkAZ`cmC zR6-BJi_Xh9U;_O*;NGtB>5LBVa5eDvxkpI8>V~zy*}jSX(tpfF8Y702fe6}Ld9=8z z_wk4x_(A5_q~g^YHWfN0lhVuseM6ZAo=ZQT-Bm9Rvmh7k0(o=I)C~l zfDyEhiUrPpER?1{#?p0dwHcq6AHQ)S^Xd*JDa8VYj_refJ0pNwm*rT_u+AX*7-Krg z#1Frq%THg{BwjV_=f3GeKjXHxG{-$y=QmlX#pCXJBK004Lo5+8`A&Q}c7yvq0j?*$ zU5x2!Vx2Z)Xk;@{CC%d$BCzaOtX7Rdv#Mx%D~PK*RxeP%>11N+smL+jRM2cR@T39sgi2UA|21)rTxT-PQ&0V%8@%BZjWP| zNi=(S(=Y8lcB9Nr7qKXx`orl1dy|h_{hlU%N$oFAqO@w|HREiCm3rD>EiGEUMsK^p z#rT7k&##}OOk;i|+CcDEX~j}WzHdk8y)ek9-kPksm+O{GKED>7X~cbGX&xoS(LNIy zqu%1ZmA~_kry{@Gu+8IhT&SvZ?MEkuIRwqao%S|oiVQ{XauOpq9{i?Zd6F!Fp6qur zXmq=qYn9Gqg7Bj{>wbp-B7gkuj{}pT8H4&n^LSOGHEF`kD)=Rn(XB?a&U01)ckLKn zBf*FjeP0hGWhC|E4e%$vqYq*htG85`Ym_Vu*yo#(pmhxN{}xXRIR-F0bhx&M6|!DJg_ zj;=gVPQg=9N%=!;Pv>91Ax&Ldl;oOh)1yD=4*0%$$cttEoSie4F0N!DZEp|B{@=H4 zP6a(lULIGBhSxadA0#Qwdme_6OK9Yx$+tVW{eLdk^t7YK!@e|d`_lNwPtpShubdiW zmD!O6Gfmb^Ew9d~;ok39BO>2lvkWJH^m6&@^69oU2}%YSv~EZNtB!F*@*F=4bBudN z70O#T&?1MjgqMt=hR#QriCb{8ZQl9VfXW9zB3jPjAH7Ywl?}+GT=(@ySQf0N1|Y^` z+%Cvv)+{J&2!ot+L33PIuZr&xOgGeT47^6Gf}Gk5O~XOI!Irz?RQizEeC7cLi4IM; zPu6+%p=(yHpj4IF1n^JXaI5QXF{ak<9oANFGgv%$iT47o^{fPYCgP^IH>r9gZxJBZ zvkGdt1)YOd^u06So=|EK^;HzncHQG?Ek?jB4aU= z0POufWAZYqnT!gWe=q<>yZZef;24=m#Sb3a#8W+Z#lX*%Rb;NKGhE~gGfz5U2&=7Y zmIevYtKC!)Z~2suImxFF(Z`u`{3%}#%D#q~C^CksazHL^omALp4z;)nyGe}P0vOF> z^dd@#NG5R?*P{UdELc4Olqqd8^6589l^Fk;X?y1}F2z*+p zv%4&GSx0(kQ~D$P3q}AEdw)+s$g(W&$5@KlLt6gLt4Go%2E`mQ~C3o!n)C{421I{DF;oZgNymdX?T3th|>2C1#s;YrwjmhAC& zzvG16#X-Tzmft&w%ZSovDoz*tN#GjXlKp&ZtDz^_vPw!A-BljC$TV4OU#b3h!%)rc z%^e2YN?#Y`4(lFzyKylLfYX0kGFtn5BWnj*kP%AwcfMYOPzzib28+i4(A(fz5MX2o zn^^d>Ez@DBL><>W9z^zY-7ma*;Q!{IK_7W1_JGOwtVytOE!Fl(4>aN!h* z`u!jo2@^i4octC(#6Qq%_{Sym8T*HTb&A~0YH z=)vEu94&3q6&+F{Dj(|#$7&#@gj1T3Ml{9RjN4W(FKoa$u1dSZL7r+#Y|PyO6zlbWE&jRZ4u!Mn7J&;M~wNY3TG2Mot7Ns%BqdV%0f z%+fiNr2vP+HHREs{^9ndgB@sy@e4gJsf)u0CGEl&HO;`>a-NEHY zn>|Eu0Bb<>v_C7O2QlEL2zl+L&o2m009ZU&F0h6`2(m6$v2*)zuA?@ z;zw-Oysc6VD&pcW^8Wu=PRQ$K@iTiuCd++60*D|BWKehD%|_f=l_24`yI^+lBw_jG z-9$NZe1RjGsu4(mD0-Bl9+q29(M|+8MT}OB4%g7Fmi+TAHmSRbX*VRD*E02ngS-Y* za)?QWCahB1vkh6Ca)GHaxy3t-6idrHbV|BA{DUHKsEbmzA%>8oV4V-C5Mrtt5MF#n zDSSUAJVwbw{!Mgx$SiXQ5+SsRiyUPoHcAb6#d?*B$rCTH)X21ejh{%8KIwByd2~wp zyg`N8BR!HOCa&;nNotbv36$|=1a&V;(1AYNqX$%B>{;As?lKRO*DTIUlZgM3bu+T3 z*vC+Pl7|^)q2%(9QI4k`9?n~$4}i`ao0lpDLWN3>|3My8ufj#;&$5h-!O2s~C)bJp z^$&pSFsq)L!QqS5=b&FK-gWHGZBP}A^}Bz(N7s~pl^$`VEBhE_l>iFS_4r2y%>GUG zWOi>yii=0G5qeN8f=k7MqY^>lFWo@H6yo?d01*y9~Ljqj#^74E~s`W)gOv;ypXk){9Y!Y>aIL%;CtdBf7yA@kZdbn;> zl*xO3TS9|P?jxI3jdUpeMH`e{ zu&FsjVHI5zXZ**t9Uf2Aoc>wM0H!w-FYf*7hoZ9wPN@i$2m^dAq2v_OXlzpUZTH9V zq$)QGqee6MYpQ;xFC39&*~+7_^5L;*$m>}v8;Id?t*mo_bj!N&eLp6uHQ0QrIuh{K zw->)f7Gg%Id*sE{|H=Q_>Q=?-t_0fX(tFw3$ahEtK-U89mThT-9aaUfXdm0V(wTwhcMnD8XdG@!VAC-12v z3zU`PS?BwT`)o zE&OEc>m>(MJKKgXb4{Q6JP8yPdY+5}HK*5MlaGf-;&9}a>X*sLKA?i;rzzs}=-~vy zdu~>PFhzXz5BseVLmq>)eg~sH@9>5uQw!(_R&S=8YsG{*&Cer|T=#~Y--EeMq8#Gb z{hXJ4#B#=bW^TQ33igs2gOV*y=G64K(pn^EyRZIkrRD<37!iL*Qb-JD%#B&x9Vmj8 zxuamyn?`%C`H%#&UT}4jM)L=In4F!nvl699xbRjT=R?DH&XpySUl#kSe+Mw@bkLWo z+2nqjvg#C+mneyDQ3DB(_Abj;m^IT^r>akj{h-TrFuoQ7BCtITLLU1vihCKujFW4| z5PkL;5v!X3Bl!1rXkpbtxV!%ePzGev(Eu})#b2l~Ar*FBLwfs}ihAfGDkDKUsGesW zkB%=8DcKx`48$P+OD%Hw$i>Z}1YD$&*mGRuPwd1#OiLpA55b9?{{pm3f)_`+7bo6qF0NJMguo*5;@?XjncNe z-kOHxZ>zCI&rhz+2@V0$^Kqb~7Tyb+5ALopFV$c=ES2Ex86y~8;~Y`$jx#i?@UsHv zcjAkK=j7vc9FWzMW>9iR5>CPdZ@4on9Jw>czpg9$n=@Z=PE3C+C}1yAlR1#4KH00VDsW)%LcTr} zC$(M_x7_NH@4n{ZaNHK-H*k5}){)Z7c1xYi8(ZGSH>6MJ=?+I}$GH|oQf{@Kd;56d zcKg_xvhQ@Ck{>=qK0K}+!+3W_Y3|vR&j${)e7M%-?2l>6sdjlkY4kUw%cO5~7d>nn z_FlSyxvDo%aD3qtej=~&-HfD-tb?JtFn|NNVP2A;PU=071kZ|bhrv!xYnG; z04bfK`6p4Hf9aN{Q|sU1yR2@aRET}^CsWb|ZeQ^#AXG4=IjomgLMSZZm(gCEq~QG# zc?31oA?;ZHqKmi6=Txh}l5s`EAW2BTOA-U0bS1qT6}cf9@$O%#3tDclIO}7TDT&ax zfuW)LxMh+LWl|y1H(-5J>}4Sc&ZNb)x}E8q50ebsc|;D|NE;#1U2r7?@pl36J1?GRhO=<{ERhCP)D*5k*~9Zp2aVA4 ztM;=>YI0<~6N&>E!snW&J=KP zPK%2yP0S=+e5mxS&*psg>j&e8j%8r{N0Wa=)+qqAWdBcf`Sh0U__oaEh3z|WD%ol@ z96hcJ#$yd$qB5M%^)SC zb`SerKAWe1XwN@5?5ASp0w8RjQlc;IT*`@R&?W`N$m(&u+Adj6KKYIBWH^I?19;-rB! zEZYAT1wMir+qHNHP2>c{O%$5)W`&XjIt7@aBDUSI24bcg?o1 z(cb$Xn65I5jA9sX{>;k($1GvoD3`QS0X`2~ky2q2@!5UF(W(9S-S?8C!*+IR_2?@I zq)P$ztP_}ei8u8V4U+%9gf(vD3kWg?bO*x|18w=FvWEGXybDz}5}r)W9Lz7a)k-(p+JRKP}dj6zCCJJXui(M-&>UF}tc7_J| zKtKqUnT-8By9~+-3PhKt55^S?izLEFDUsqYb~e1|x-UklMh&`5Kin-NQqMg-y*&-RJ@q}o*+J*aX+~9@?AZoQppgi=i!|GY?=n9) z%ZY9_kKV@#GwtPgLWW2V!Q-?iilsEAwus^Wf%KW@ij~W+9x4 zM-r1Ev<*-$l-Qw`V>l`&=ga5hO41`>>q(GN6JwWdw%nta)~V4WGA+3!KV$gUSW}B@S^3M8-b^p!A3LMX3RBW0eY#ucb~}c6 z3T+LHmoP09wQxnkL9Js!o>W(Qx=72+ zXzJ7Kpa2FM{Lh0-adUlWkl!d%ws2L%-@{r7ZfB&VMAM4PZ z+M1-b0R*)upK)GOr*L1fKE05&{{2xre7BbTZG?^aC1-^VhT1G=;>=iNkmjne$oOJX z1l836+x`2NxC)GTtHX)BAMNLKzJd-XD&~av#;kvA6 zKg+x8K3n@iRFO;eEKfmbCXU?^;c4eKzC|~a{Ik6&9X#qw+OptMAS7_;P>X>Wy-8sTYpSs~Wp<+9P@))^DOU%T+H zST6z=!T5I|1|BC6cB5jd6DR<&Z1NXTl*^m6mkEr4MM{1MSR<{p|G;z67wbR#PHt3_ zyriIbb>M>xp4f|>E2ux8k&cYqiZF&BWi)odQ^DJl0Ja7{`XQVMw1E%gM52z072X(u zqSh|6;E!^g>kk7IeY#ZnpkdRXVMVf*TQmQ8&7x)c>#rS#Q{FW5y6iq{$4{i{`Sx-y z?@(H%t#6KXm8J{U?gYk#XC>g?G(yhvsXRWfj|;PIhiJO!Z6H34fAY6IJqFK7XPtpP zv97npze}K4e`ibYNXu}C5YxMnvp?YTf{u?Qew*CaC5|A!w&;la+QMraTq}&(50D$` z@nTxGJ$o)pi33E1e&sQ%$fo)(t9pJUt*@wIi^PL7%*6Gaz<&MOyDr~wnlKL+ahKtA|zpj`2@`4FA5BhOa)g~OuG+xdMR>jRjPq^kKC$go zOdla<0e-s}iM6GxOY~pV;}E@Ql*coS5i?66(8rHkZX46PkT-LhTD41T=ea0ul z*d&Fq?2%fK*ssUwNW1<*+ma#^%JkX#C+CkCletH2`Hoe>h{OplQDcY?ob}m)|oYQ;ozvS ze<=~W@~BhV253{I=En-WQ5pcQOzr_GWN2In-+cQ+D|Nn}NEt_!Kh^tc(3bdw&4$N8V~=J4;*z zwt(9e?r+P6tHG_dJBUA+GsGt6AadcK@%M%j=&IghTQ`^LB@AV4Z zSOc0{&;TatfVMDCV6u7l zB`w+l)kJmz?b%QH@e7F*FiL8|4hOXD=uvCdAjl9mv>wB7LzGQdh;-c&QcYe0aCW2)6WH((S-=X#YQUm5|R3509CrH`wdZ=NGMIY>Q#5-8*5hocV(AA~h z|3UFq^a)e3*30>#zT?V82^ecM6XeE=jB*#kDwJI~QuCsB%6A@Fuvw8m&j475CDIm_ z3RDu>(I^dl&@HTSHSH z^8zoX^9tr2qM;IA7I_9f?Pcyl>^@1q9SJl1K$pMC9EN;vwRt-N(d^gqcV0(KCweA?}nv5R_?)-#KV6n$9 z7O5^Gh%+M@t!7tP=#naqg!#j#go&S9ZeMmEB!w~~%QF5*$TVLK=Qdwj>FHlts)LMV z9WR>7LW66?EjCoi!Gb7-rrh-;sIr)_#TWcyj12ZQregkvkIuK@L3Zy(Fx(1WnWju( z(A=Zqzr->tPOKTmMrSyH2Bn&_idCOHT2IZO{8FOdKx5=RQ0Nw_XN0`d7gvC>(ER3Z zOl};1q-bPx$);0IT@(JuPAGna{w^jqtp~;ai3HZ@aeS3>D6&I1;@}tQf4Gf4n zF~LERyW$sR!Z}8j;dp=c7S;zzR&`DX&{V{c$SGW0Qoa(sdn65sQpHBWlG#%X3tt`x z;IM!tlW2df94s}1r~Rw}O+?Ze)_}%he=u<{xLK1tLSF3+{ChQlpgDuE+kP%Pn>W~Q zNjJBP_q1FX4CJG5oU)}4@Alz|YU3BgG^3cZsaW%x1;~3kP2b5qfJ--jNrKY zYiA0%RCL4H!AQK)+Koz9ql>8IIMm#<{N3RfD&V%=4}%6yILBCDDzNhUot(DsM_q5xG3L#8+isxq za328d3UbM$>83{aQR#o#lI@3fXFT%4o(FpIU9?P;ca{RS8x|j8v~fqFjx-OGUEDJ8 zk0$7Rzj|mKGPI1Yql=?Yzo`rX_AVOi_eReN+t8cKzw}T~MKbCRy|Qa;+L>Llok2tnv^+r;XI~?7|8|9_nW6gILh$rCT}GRF#1p zpQ5o8ozut=P(DvUnl<7%Tfeq&3-$JZ?uGw7T3M=eci5 zi-!S6DB1a79fv}*X0=zbL1J63^kGZuOMpF_n=?hKDkCz@g|utD2j4X*bivPd+@N@S zqFZZLyuPWRtV!IKBkPYZP>vn|9&6g-;kk0ZpqO*#=AUA2&VfB;jICXu!{O?PyXt2n zp03OkqlrAZZ&fy}8OaUQV#!4k7|4@mV#(v&4vcN5_cK6IrCND4zb=Hz*#(>EC;>Bc zui6U-4JuziM0IBBEvg@k(KW?{8~bmTFW(IUMP)I6VTI8wJ#@%#qJMP#R2wH;`;E08 zDDdeyUS?k+x+@YKXZN_U29S_4zpnS&y2zbrfk*d8tu9f~7+37U38Zd3?7g3XI}Wx8 z5OF{~Q!KEfFx%gZ1%m1@wqvK_#0)f%?tr{F&=5wq7Bo&T0RbDL<;mM@#x~1Eq`{FM z97lf=%`^-H_84D?o^kkLucbWja_6U@2yZ0mh{A)@^H*J32aY8WNc|QBe{5673Bl>R zh4(f^YjCShZ8+W8-Qrp8zXdaE(Bmm*d9-yD58d7HZgU~K7BGZml9#+8agz852z6Ez zPpS?v2Dd*)I;)!X+EDp|)Qi!d6$Xdwo^NB5%Fop6W09rU3NaJ%MvRgZPB>s$JsLO9 z{pEp>QoqgA+^?mS90aQPc`Ylx@9@nDz<-)!|FiZ$4@$<8IV#e62p?(Zcq4%)OUP~S zQ1EmhG8=tL*LE=R^CqMyaypHE9(qJLEka|YLMv(UBL0w9)PBlONZ9F4|aV{G82j(P_9INRjp(&?YjFkb25Bi1n9D@2zcI+3{(xcxOnfnv)1o% zZc&!<(S!iCJnlI63Us>U>Omr59jpxmBz51E@T%?q-2unr$QMtp?IUB)?~1usQeN+& zY3ZBSmKCQWnGsY$BtpNt^UPbf&r8nx91ju`blaCu)_NbrDrv#H)(6Dkbk$0lC%o!_ z2h!&vZ$YG=&AO5tA~o|Fr2<7H?9EH07)y1=hngBsc{dAPZ3Ds__TQA!p_>(hgZ?r$ zT8v)LIiJ#d94R>$X^bCUWMq}j-c?iD?|%W55e|b>k55*eT2=7)rO_h6aH0xIsqj~4 z(5$~ocGI-A@s@#)kr}SQ^IcxKTumhq+~WNcRrd#d8B_w%1jzMbDajhdS4!vF%5IJ# zqg2*>NG1fA*(%RtCtA>E&8WZ|a$Gj6A+q`U(fJ37E%$QOdlkBQw8!yyKsk-A_)8Ug z^7q+gbzemT_oe$1F>Op=ja)T+D*po|z#UZz5gA)gv&NF3SwbDoSBnulT)Juy9l#Z^+v5;2Qhyk@LzY4*K&-sDtdZX-;@M+~+}k%3q=@Ek zG^VXG-}pt@zuZ3`FB@*dci6GQbr5k{Rs@6WCD+G*AKNo>xfJto$~{dax)2NDH%$%0 z$aDwBlz##h(dOgzO})m=$st8px9clUaqQen@Xw#o0G#ezj>i|n*-cPpwlJqXkkU0E z6099IX-WXn#dm*wD~(-<7)Jz#|Iv&gA2Z z7$+^JIf@R@v`#Ksx6cBu_QEMQ6e3M8)!-AiWUk+~2n&`05Y~zxe>pX?vO^fdDQIMf zMm5rAj$X}%EHyhXdK04D51w~t*qA?Zdex|xN)?q|<3t1VmqpBEZZSG#j&|o_7f5Z~ zt%KYM&&Ri|G+-_jVxa(n-zW)GFZw^*n<_TcNG6tc9s2bh=eX|TTQqTJv?DVRsiMgB zu(zb)(J-R$T0IjnnFGj60Brlzn3b}YrMVPuuHMpq(@V%1vKt%PT)!LsZ;s4Is{z@} z_Tsews)!58CU9bZMm$0oIon2KYQdjG-1t#kk0tMEU)r@GwnA4yv-WS?ED&c;S_flN z&4?XDPXOHo3>*T@{9;7GeYDba3OT7IIH+(WejQsGC7tiUM|zsyb~To0_tRz&U8oIJ zU zni-?WEtjF6xpCxu%nMB%h|#|@ zH&db{{gtAnUsiR*1KIyNuP5@cLR7lB%9u=vJ$E(!a@TzmxfZFe3JYDbe=`j8#R$5H z6uf!>m$d<4r0?Ahz1?;viT?c$Z7g3A`xCYB)P&;Cl#~z2<%Y}2CHRBy4gp1#Q+uPj zM-`Pd#o;)lGfhCSa9J%o41Ye8&?}=m{+(aLmrDs)U)FBp_2zypX%(1S*(v2KTj2BO zGO6nga4Tx%D3<(LZ+HjPLShTDI7*#R3$CK;Mx4lte|Y;+e67_X**sN&6-B31Wf80? z+NpGN-hR@}9I0jX-9;PC2_*+(0J(3_8nat{`&KH8PKpi_=M}M5vS;Wu?u+g*T?`)5 zxm{VYH_rwdiDoe08*hg?-eo|8?QT1wrMllU0eP@t%J|YQn#da?H(A_i$F>HHgMAh1 zEw_LXoT;VhIqb#@(8%=>6maeiXJpb40BurKkHe48I1q-l<{C(<6A3*m&0n5#1X2Rb zuR1KI8^k#-2nt@nk)M3)TW&lZloWcDxW*u`rK*VDnbrNTiX z6EN{^m$NY_h8LzTo$8k1uG+l=P9`YLB_t|~sgcdRgs#+0S{1Z2fHkvpy4-M&jhIeO z3rb+S7o(2BFSuXLqq+`+N+G!R?npmmAmoo4Y@G;ZB3{@YWt z>wfegdRgKGO2csisT;_i-g$$KL4^oZT~2&*W&g|%ZIoE<8{t2!%5cBExo}9|zQi!H zGSB)cTErN&BO{?=m+iRb? zwRH^i(wv;&M?zT&gNKkCWsEzqgrxq6mj=9h%(<&j(k7T9S9FW**H z{S?YO)H}~lBt_*l1D^>=1Z4#g*2CQ4i@)0CXf#$f>Z8#$0pWmJnA9JE1G@Lu56;K? z2>1t|Pvy2_pwAk3k`GgI9{qTm1qN_va~Mn=ap(Q${xsfhjq_rh#{kz@Xs@t=7xSBe zAh%C-6@Uk^B|X^)_A(v22WA%K*A%hD0;nlLmTa0gq4Jxipjw_`HrS~r^ucEX6!!lHtZu0n2{`qN?8xe{EdnXBT2h8*7`JJlU$K3rh}S^WwBdNIVOj+E-2kp& z>6txy4OQ`5W;(03XJG;Xy$Vixn0xv4$ay7)>xHW{%~c8~p$7 zri{FS2&4ggrsA8#ZUliNfPsr92(fz)V8Iy;)F9|W9LGQ9$s!`NnYxEGs2(<(wCi;h z?J}n=RWOVqNLT4z?27}7`50o9wv<@-=^3L<;a^V44tsJ&dIF5CY`JWM z5gl+eDKvD2JNXE5H91A1Ht4?f#3E8#u?0}BNp|{_XQx>da(g?x2;2lcz&V#jKF}5V zMxpoL1IJRWc1OA79Kb6e^fx^nR#u&49~e*ze9Cl?$@V}`4RQc~Nvz;VOHR&+sc8YL zjxkP02#ve#bZ8g0QcluDFts9Ma^Ffo@U*;i^eS3e-fr$Spst9|?a>`(xw?Hfd{$cv zXpe$GVijcLkk!+D2eJ&|fe1pMfn=_N5QT08zhW4f+d%IGq0Q{Wb$#j& zaCtg8(K0d(fZ;8?`&@nwNF#8&g()TB$+OVfodHGupB4Z*1U`Nblrdyd-Rm!A8NG)Y zPSJ0I-Y^Cr<{R#S+Ip?zLW)ckl=q6IQxb`4USlJ+c@GmhV&9EFhF)Q@6{MO33XH7? zXyC+r-s4ZJDwXy78bkh$tS0RZOw=dB;|9wCTRiX}!cDK}wSi*zx2Q7vLlB4J#~1N( zJfIrTM~{5QD(>)#6zqgm+S%+65o_=$A1lShD)+tARiMic?Q)Mn(v8;ty;etY^-;u*F~ZTr^v=T1cP5y5SY`;L8>Ed`2x%Lol!Zb$0CF z^G!U4;moGFnbu;iL60Hk7rv2&_+EjKLN@yP4TPMi%#bGx|JvO=4Dr1guyexJA6d7$`vOPXKa*gaS^9}qC$k}Va8-t@_yFw}B5 zzQ}&IY#J$4FHwRh*o~NF)go8<9H4Dy-cRDNuIbS;MM1Gv7W&7L^Y{TPa30ien^ZA2 zZtrqdN|kuG@GxBGZokra+~_w?Q2?;$dqE-Q@LJ-V4J-7I4g5M|MJe~jDf=qH@kfQ0 zWVP>s*3Fs-&yxSm{$=xbP7nhd%gK{8JU2)LNiWf!w4VUmW6rpr2*f1=kq^c09R{Vs z^6(=h<199gwJo=Zt#KzT-Z`q?FIaU6(GG9>*I=$sqh)Cs*eg~Lxc(Q;P(Aip;+#u&-nD04Rz@|=ewTSH1h_AUTl>RId@g`r2=h6 z9*roLEzM&QVPVyrlSL7g91V?lB1SMHBo$qMc36wNHzCu@4^fSC^w;;-S{8rBb5h@c z>eW@dKOjj~OQ{da-0QFqd+{J+w)?*ilzhToABBXjmonjy+Y|e_k>t6#D31^1KKAsu zOFrw<57iTy4UF)6a@S`XpmRJu(3VOc>IC3GvClj|QR>d)QNRmROSaGFlXVpLj(thyx+1?w>PR1N3n5O^f{eCjzseRv(Y z0*K@aQ;RISJZ-9-0%)asSkV3d3j4}O5maBmyrGyWY`%*;C172}Dyk?(X{(1wt&fos zPV87j%sSH1_*vTA`E<zEgV+Y3B*S@$c8!xA2b|_u=eS@n+R~=CzV1IZsa?|oU0t;rRhv0brHzNIPuF+aTvg^|; z-FIuHTP{SlxQ8(U5yzG8iokG=ml=Hs4K-k48{m_~A-N@NRe4S zl%`FwTxEgA951$tBs*sayxv;vxZD4{C_I*AB$#BvL>lSOO=c>olpnW-q<9>(1=}khkIcX%xMEtE^UW?GcCMYUytY zF{hz&i_PSB4I!bX05?TyofRR|uZLgI2@1yn9%5g=W=zXq(8w=fK_as|t2yK=!7Okbxd zhidm!;D1e6r=n9KGh^|qM@j@$C4(B(9s`-;?KejSuDFV{_+=(eUBpc#S#9pXf;RU< zRdE|^=QPAuVlHfTRI|z-RY~Gx->ops_kIXt%75@oM)U|_6gHBtG_PvysieyCE05C@ zZ@$_mK)t&>mw^4-m;YN7M%#B!5^KRrGcLi3BMbfawC(JvfvU{_-GgA=iF}^FhyX-M zpH=ga&k?d4faMiY2kbcaPNeF)b%6A9U{r+G^ZO2Z%Axx40^|roiA|{ZMep(x$OFr8 z{d!nfT$7A=^_CtSavL)VcjCcxoHks->i|29ht;5Dxp4(1c zTa!jE|7fd}8`MQSBv%NB;{DNQfbZ9ZPY%Ru3h^dKFeQBARz?WhlugXBn(@*2pZUt; zgB<5Vl~k5#Mgl;UClSOy6v04A=MW&hNwnlg(QwBHQx+j|LC&3+^kGCYA#5~nK$|PH z(U6o5t^m=Dn3dFGX@#Mqk==v=(^oCJPV44j?K@ z(|Gqvp2JLS#thLOgigTZr=MkzkOI%v%tB%J8prz!`O{*7nVj+|Fq9xvf#+ngKQvy5UZN^-k*{k%Bj-Ot8`K`vMbe&SMo8%|QdqdlY3L0nJlSJMiIjI~cF?3M^!d&`SO zXj(!QLi5I@DE9q@QBlrVsvAVSAq%jy3}JYs_Tst89%DH*7pi}s-G(E;wr9BCHF>&4XZ?X5Lw zqH*?ttaRAG_%PGAA`s}BydVt%YrVYt4q}#ze1TN&uXpngm==+i%B}SSxIygiH#Wk5 zj;5P3L195xh=JyBz;}sJr%(2yCbJD+E94xDjgj$KRO?Oucnz~y*gDBG)l9Exade-V zEsA3J$UA$O411*%y*a?SN9;U=Q9XuVZcjLE&bcx#d5IlD2jQ)JGUxqZc5#(=j8=D- z1;n8-Vb-sSG?opK-WT(o3ss+#D&v^M^RGWu3L((q4pi<$%0fBrNh$6f22M~&CVp9lXCSQ`&|z2tnEOv@l&ChUYYjU053fe zHn(V`70`EYJGK%21qSS0LilA43UQ!-AB3|0{W64-xE-kD^#HoxpaeKVh8taN%^5a6 zBpOh6V`Us=^leNi5P=apxEKSt<ygs`!yFX$4UEAZL{gLk{Veg9^klo{eLsq~LfO>`w zMslO&<{?FZ$48hD_!EB519sK-KROjX5Pljy)cf)K-$v)zHC>zt-U%n;7}1c znOPfY5V{Al4^Op_6d2dhVw%l4Vy_OOBG2`NN;YLkBV_&ShE*bYoh^3n(P3meex-|g zUVix~#L-AP!&n3zjqJCHYC4q++E=)T^Iozg%j2^x`$g@73*Bh4v>of~SRDoiCJAq} z!UaXL)6O`o2$Bj~eci%otHZpz#n9pt(vd=N zJOx}2Lv&}Iv`uT?B!tdb@tlVn^s3s`FU;*XBt!SX)wI_OFw_phgP}%d-@B{IVW(4DZF>j);r#;=EPrpbmEuRet>a z1QmM>*$B#uGvL-|=OxQu%tCz)JAsl~-lrVBwpYgqPDK`4X@*VkO`O*h98cQfrwRjveBs?-Q9>3;c+!^_7 zpU1_elJDct``Y~eceAw3h#*bXLWOX%Iws8e)xz`Tr3*rhT_`6*_+ymG?clQF}c#LWT z$p8g8JbkaT) zlO^?m&E>>@q-QMcaG9~~OQ{@bFPy%`qK{@`!ojFBFyl(Gp^ibHthWcPwt^ugmWk;j z{a{3g_jvl2^hm6W&*vc-+Ee*TT5HZsx+P{vg9{K3{cO=W6D*QCV8 zj(t>pt;Z#o!M64^$$Mr<_W4hfhP|Blyl1BSQAn!{&amaky#WEqT)h#p=6{)fmeZCD z{@A_}qe=yp)zuHHXiQF=x^nG~woK=_}T0- zW^$x8Lo}`~skHR%XdSlJ6S5Z%MPkW0wav~KT}!vRx9de8Ga=+QfK^)fZ1Qs&%)-DT zST@9xt!on9fmUga4+A&eyPcY)9r7`m!i=fQ9*Au#tHgO)ma~6;FTDVGXMLn@k`g-= zc?|TUZrv`?0Wdn?0xbKTsCadmxXa&XnhNRR9E&0Nlhnvnl<{uIJBQ4vbt(ZrUy)` z2l#iva}ZFPi0@)7vIY~7%aD8W9X;Af>p$|rFnkgBGWMTbz;9;0M;S<6x(+Grz(Jlt zl3X$QC-%n@2H)(Gsu`r#SnSG$95+T%eYA#F#=X;w2|BXEIg`aD-P1XpW8$@AIMR$4 z4%Bgy%54;3yzud>$YG+gD@M_b_s}o7+YPIu$&$w4Y;gOnI@j_=eHj$eE=1IFl>~rg z-4*ddJvow+p2bkqsi~~pxASj8Z)0hyKrPr0(CCgwH}s!rHIODX;Kp>`3nj%dA{rGz zN0C_Gq~5?T)&Ee)>9b7}`YUp3wNk2?L(k#5wcLvGe=*;W8O{KyJgNMpzzT7wAF9ZG_SE0JhxM zXsthNHvJLgr8(|T?RqK+eTbJ2^@ix$;r)c|@KVP0=w;}Oh~>3$Gb{pJj%EfX>S67# z`$Te*Jj8@1Qu}M>PDS68rqr_6NlBUMOIYMqRBS;WX4Yonk6}rgE}3=US1OgJ7bpz- z8UC!s11&9zacm=Gia|z^!1p}eV%-`MRXdF|-CoA%QlyoO;-h4=Y^8e@4DE|&g}HR9r@#7|X>no9dE?ta}f{@ft6LBdToT(-KO_CHVYc@TH%Q-MEE zbWl#f@gR$H4}08zcXTrIg)-%bbp8Ybv$S$b5w#Lth-sew_g?U|75}%_R+adFf9U_l zYs9k=aOSGjM}y^r$LxshT3zx7lvfML<|+*p@CEUTd|u(YL+ws) z11fl)-LyW1?YBu<%uSV&O zO9QO`PQpVb@#>ZZo1F#UN4CpRUqV3CgnRG)i~kCPo~Lm#1pcn-hGB36W$)szClyZ5%{80DAgHd+e*NEC6Hq$lOeTHBl^N^!7=40nS zRQ54^PS@A}`=6n!q8=bB;~L#vbp)RW$R%>2JdvTJjdcz*@t-rfTZ}XZi}-NAis_r4 z9=hY7cukfHzLL>*pqpW|()r98d-6%03fG1HCo-LzJ)&aDKkTA)Coa{EKzd}t&4Vy|Lp4x5jrQmecK4HHoHc1{2*2*5a$+V z;+O9M^jE_m`0diO&lo{ip+C*p6pNrS$~q9=2PIDTjBd<_=i>w3^@=g*Tt_cmV#+>( z#w?B38mq_TTo?f<7MHH=|MVg0n_5avgYr9`3W4320h`cD{b&zPYGtVqs8^aW)d7OC`B^V0}aG=*KSy_@0xA#0;%=&Ii*47 z)Ja=$Tw4syWy_m-$}V|FCE)z0K3CyA&VvW|Nz`3vx^yz}^aL0_t!DY>w}}nlKd$gp zSyDSR#R(HfC88|40XD=rIL^5V#fqWe6MkN{U$hS;BTFStXZd6PR3UZUxn#dc6kk;Q z+jVwWi85Ghwu{(7(EJ~7Bj+#l99B#WW^wA)bAB?}n`s5%rjXd~gcXI?lP~3hVps-b zxxf5n(WPojD`hSTtBo? zSyp%m6+_|XIY)N4dRf*-sh9LjPIM+~F-LgH4c)InFxPOXo7fNQghN}qk&y{MWLk%x zf>C-#HwIhn(;MFBoXU-%!5v+$;3s@!ON%v(?3Bn*^54MwtGrtfhW?>wk zQ1AcM?*U_n=2)-ic|gM|3sb>&Z=*(|8{s`@1lYTxV4BwP z*#Tp2Xc20y7YvYZVQIyw$5^xS-0wmE?ZUG8;BkY#*I)YiN7WVZFwgxooAx}mDpqgo zttaO=<%_!7l8w6N351ntDluux?}BMV@t_(UqMNfKPt%Nl+07~IBSa*_d1=zyZf)Ci zu5sB}v3V{=M!!@LPVc?B3q!Z}Bs_kZ1?^R2?;_jZ>s9sa8P%{zr)+=Er*V(Mk9wS~&5&{vhvr^?94*KCgB6kr0XyI8qGS z5%6-fV6_JFIAkMSw zYuI+KlVf{f@EljiJAWJV`+tPN5n~`5+1gXbXZKZ3~?7lCXS}FL&KkO4jzjBYOjpY&6_JCVOUW^lx)d9 z|EAwWbVP@+S3T=+8ZX8?NWiLpm(D%otGhV2a72X=lc)Y*Q1!Ve>Gp5D@44yw((28kaoFVUv%&28flJBD>3OyZ%H;5z)9;kZyaJocuDID_GZ zg)X#e_J(C}X^Yf?DW{~k(uiCKO4N4&aV2TS_8Q(V`V;9wzH$d!QpXm%8a%|lpPNEs z+iq?w z+3cgQ6Q!LmMY`Vd;d4BQrQ8=uF@Bfu_Uk9b;Y}$-Vj{6vvRLTE%a;~<1F?z4s@r?8bf&FHy#8IVF1ZDnBW`k-O>xB zpiNUvH5Y;f+P%6N^Xa`1&P)FwPV^7RVF@#1B>aWu)x%Pn;T5Y5SS~U$UHVCf1yld~ zL1QccH#_**kWC+<6YlGHr=>rR@L~rcRleU%j05QntVIH4IPR0Utht!v^*$-;cJA`M zyac>UloPzE=q^9vgGjzAZvUa;dTxK!b#syOd%xKc5LjDy=$RsiuXp?2u@~|eTcC~p z5baPw|C^Lhr2$!fCykVov)(xw!^&WFm&$+4<&c~H$?0OcVMDD=0t@7h=eLY}s|ORn zpZK1q_kOZ9SJ?3hemPt2FI(k@$rZquUZ)~+t^B)@G9g)B_X9s;pRv=eGy)SaJ2;3d z3om^(qAAI%iEBzGv*QCz9=F||S5VMJ2R}SB$~G_g^eL4rLvH@&!3)Mk*w%w{^@wH2 zmeRVK9vtw!Z7=!>$&wR=)+J4i=xzzCyEqwu@~U%ZqV$)|B*hGSq@eoE0#972_GX3- zvw6~CpHfYulhxcXFIhp8*v!5+?K_R2$RAoQ(GCubVLDdZd%AD`L8R@bOzaIKTQcR? z`fu<^8cWDgHBr;fu5!?$B6x`sqH$9#33tI{Y9L-xf2_@4_PI8Ttluey#au_`QBXzh zg8OPrQdEP(W@G)ss!g8rG6R%=i*2E9Jgp@e(OsnJHzwKVFCnt2-cl_sqJ=MlJhrxf zFe3uj|5@xUqX_d_D_ayK(w5)%CEK`fPQG~Z(KfOrp1pvm|2jYK+(EnSt27^nUu$>< zFk7Wl^(~!ywk-LH;{K27^bK=Z#RADS>Erd6W(f92zkEsSU;lHG_!qV~`$Js5zmx63 z)Y`|_)b(%Bx)vwBlOIBdG$gjav*?yXZ_W8b^y8WwdY$SQ^D77^>9wI%ZC<2RrQD$g`$fAE%SE=LS5v6i|2Q0*c-%T0A%P_4 zSr>~7Z^<@=J2p6|%HHL#H^hPhlxt=w`Dp72(E{AV;2Gr=@j^1{${0DHchAh^=wC^f zq}b?Kxr-E+%K!FXRoMEwn>0#xc0#f%Y}uA@^yS#b;tmz$X630713u0c5XLema^H=GsvP9Ks zsUxVuTCi7zE%DaX>aW**$~Dyw%l26;Q~kL>@+9r)t*^d&s@AdF;vuCF zgr2vG7^1bO*mUjIk3$n)_j#g~yr>KV^`r9qO9{_?ng;9Ly6h3p+G76*6Uj~~Rb@8K z#yZOahN8L`o_aqa_Mb-c?>?C2BBpwH*OExgGJwp>Jb;}_#vAsa#V8}9GkK#kE!lWB zT$aE^D#^MTRkdGqXwb)yMZE~2OxyTzm^^x)=o4+0t-B(2jAOB4kl$@OO=aOv7O(GE z18n&7+FC^RYNDSpxNvgrktrm&%(^WpFW|`8(0Z3g+BI=Kw?ebLDmQM)sAz8E%w}j2 zi#L3EsAA&ebbfL@Q{TR-IhG}yT@z0uTx#jj8NDENMw86xY`GTdKoxQdBCpK>g3B@? z{zkTE{Qaxm#sNl<&C8GCg_D(lrTxTDL5e$6^hd25Dox_~#<#9%z zt!|x{tO=GLL)t(V`kh^fz%I9c4Ut{!_>)G-Sw}d|s;leP)iQGb9f$Mwh-~#)|ES>k zalk|J>o_T*s@cl(Y#GGHUfEX0`0SYERQAyewM3DW;b9>Ap*81`j!=W zVXk`b=w2W$jv(eD5_+v@DDPVcC>Bf;?mSzd-G{z>T$cQ>*8Umov`8_Tza#*ft8l@v znhj=~RnPPu+LKTOzLvL@XDR@X*&;5>?(ggITj(sU@l!tTChVhC?8J^K}_RpIW zYyVwaKGz?g3wy5G@Pp%Uq3$zYH~X{<~;=O+&T#%v{3Q09#;r{01HW^VzrzIq&a0_s0*^nm6VbS)j0B)K9#9(lvoN z8s@8n7vr*XQy*#yF+pm~)+jn->T5L2Jcd82JoP&XT`yzyZ#n@x;|~mAU2`iy=gG94!!eSWIriv`!iZApc@4)|ko&($^$4*}qv zU6IT2cb8RO!DkD9ptD2_v3pE2{VX(UbQdqnM}Scg%N?slY%t47l%VMK2L6qU{fFWT zRTk-P3BZa}!r0@1WEZvNP8g4oK3P!b@_8p$Niw$#2KXS&%v$#;jVu+%k+Ik=_OD0i zSpUp+`Ov%TIQu5v8u+P>Eyp&KN?VBSdpi(Oy8i>+0=%PSnd`l~a)Ft@3~%AAHa$RC z^u--K5ezuq3dO(qgVwS!z*@tAui{M5QU7|?vzE+KV&HdlH}Db_2n?>Vw#DW|5y)#K z96$FV%T~FLZ~Egbxr6sKb;bzurQkhimBI?^f?@%E%V7A)HDuNAUek&Wbf__EpfyDv zZXc^xYUMLYz(hmC(b6WG{<^8=riGY*|2pvtUaVRY`jQ`Z!H0d$;xWbhsS)@y z%^`82D~~#z7{HAd`y;|F^&}`vw;~ZH0C%{qfe2N~2^Dfr6!T=em%>l&^(Z>%T`fii zZr=l9p?et<7ZckoMT4uBXN^8-JG41_=T}K+8NirFJ3uA<&h&UW15Wxo2-B7~UZ8|= z_;Avu69Cn^pzqOhvKxr7w^?Bh28dwy~2V`J_GPDAD~>Rc`y0g2(8qdWu(^saY=~i9(A#s*+Cv1`pNYOw3r9>4R!fP4ete ztl`<4iZ73l9$DY(-CL@;m<;6-*M~Erk_!^~1(6=v)S&^|?tU_NaRL^r<5kuK{YyH( zYjwlldxea2Iq)@}d?P;Z zitmwNai;xJ2QP^9H1XL@=_%MvdA>BxV=i*qRr4xzQoA*Q{BS*e;o6l_^SklnCFHH=hie;HTT72Shbg z5{_IAPf`J76X)Lg#12$64Ike&7P%uy-0YML*{?Vk*Bbq`C1jPA4iDSkBux-m4R?_T zD~A;Vt$;|ybM;$K&2FDt(s2JBut2S*Z7q;e&N?N*6=b6Z$_h0+(8^%ZXFkn4?O3sxkpvW6J~my zrcBe>8({;fmxYZ_)g*zeI?s~Bg5K-3Alom05}C|&ARV??@Xzgve_NIhM9`>%V1+M0 zz^FRC5RZ$9O+~WAsvd_-@C#SOM+-#%URn7y6#X%$VPnlcUdn)}sHJZ#=C+AL{k}Tk zE*V}D*5Jv+4eWo+&pDNP`8~roYeQ9utg{PhzC_<>pJR=Y`-n{7ZGIKE|Ji{{Li-f# z{^JTcuxBabGpzdiREgn>9y*8c+jU=lVIp+;g5Rp|>#*>~pR=Mpjj*nApeFvIvemb( zN$JH;ptC%(r2~aYqx{Uv`j7(0Ko5{IYRmrj&;fLw8|rTIKOXwJMS9?M zWB5-02}KfyFN*TwzAP3s9c>i1SDeoZx&xJYfv1{zfqPYyf^WqtF(M?IfxHI2o8rI4 zK958l7pR!gwRAh1vl7adek)JcaN1&)-4FnWMft3w@`onRHdC2a93G4CE*N?^r!_8o z{A$IRPhs>m;p?Zuj8M9Z>bhbU8|mYs&dG<^MhY9sNy-Bjx1W<^3z02;fd_F)xxq#byT=*c5Rd9a~wW~wDJ z;pp>u(9gMrq~ea68P=2VKX@&BTPNP>PdC3vS}Yv0H#S2()7=kvS3wmn#C0n~ScPRlMxbJOWw7ap%rIb&i*Op|A*jK$e;fpAOJ<#tK& zqucWL)=7{5^5)6<#ho7_&nBxHt#2RYXIRt2LyR#K!_cdlkSWTV;)DN;EY*ca{i8gPY@TLa%u$gIRJGBr z4ML;`=}N=D6Ukl0BBIZWHGu^Wl=-YR^tu!^{KjsoUCh2VzZG z6qVBnCS{u=J3uJJhWRgL{jVua7WB$<#Mfn>*+6mJ=`|9U%C*O9DVF-<=T5(f&y0J4 zp&{I*A*LFKow+=}VmG_RYlzpPvqV`b)Z|zPe1%Qc^&d z@#SPTB*Cgx8r;0r|65y*Rlk|&~H#L*#!76Y+$lcDY2kgU?2GpTXB`5NQF zDTMNrF^@ASAGxJQ_NHj;@+7~L~1TFvShzp731{3 z3AmZ8A7hHwNXhg{UOzp)g{%Rpg?IKHP@-B#(gWNlEYFFF&>ALm^ZWst1yO#leqc9d zgcocY{%~YkwWlWPjC8m|KJ+3rX&)-nCrLf_Pq%lOVe=l3wr&|Mf36wQL+cv4pWRB$ z@-DTmPBEshiJ9WWWSM?mXd`YFw@}}~YT89<#q=C%UaL#IM~dK7xV`_;3%Ptf_dQ)p zYU}z-`!GD{!qs8`vU#;yN!sJUxO9Wm%aI5ly*8RH$ll>Rt4}=GzX?F(=!`oB?WceD zC_ye`zo3;X0^ZmC$F(8^fDx|1FZ6OK!IG_8RwHbjN<`JHKl`KY3&zt6c-1jnCkurp zEztk=m8$p{=)M23RB9P^2K!LLKkyF!e)o7QQR7(luK_9R8m=fTz8E_q<-r{JE?dmN zB^_LSTL`Oj$&2b?+|D%WO$tLI)&csg9~1@ORh$Vhla(F0RM|61dqbb9N&=i?dyyOz zy~(Ilfakpz`Hhas1>Vlrvdsa!K{O_ew|=#G1)19`~I(vWAw# zA|#XxeK=F?)mrt{{^^t6Y|~?p%WMRsMntd+Qa|jzA2OGwYOt(`%cl11Zx$8$&%eSR zQ61@4_!+#RE$e;Z1rh3m6jpxm9Z6Md<#n^XwzGDq7yiZfHrov2Zfsc~U4wzO4J@S* zf7*?^7XS4B3e|KQ;>Q5}X4?NyRrezr;W&siL$SNX(C+5nh1vq?W+bQA-lP5GOJm(f zr~G`O1fgoKX7@L}y0E~7uMaPL)Zvp|lOmmOCuMlxuI}R~hX`&H^JzcP#e@{=xyc;i zr>-q=%R+Sr=kb9K47_$u{;7KcDS>u7=pjJvsLL?p-sX(L{{2m9!YJNt!u8W^!Mv|c z#=Wv;Sc|aML2rdXFzP+Is5OeXJ}3R4bWagyqh-0MSk?oUOMd5y<#^7TRpRAo?JR${ zdaIQrTqDLTHuf8jA*{G7tzZ<4M7#9_&6lbdf)3Bkx;2TpAU)+0Pw5Gx)3QH5wR)nm zMEsD9;(;LA4~L#&tei<@tO4gjF~l1e=Q*ZQz(;eHO7avL;TbPPKb!c(olE2cxa6y> z?kRrpLs5bw^+3e>rIfXKFzOxQrw<@w2~v~_>aByIjgJyE#W5&T2LoHTjW2)yLpe$0 zV&4BO+D-R-4JO7B^cS6e8|^~DAgrG&?M&d*Ca?!0UO{-nHmpa=xgFtC40}mavrpc6 z=}I|cRdVxYcn|wwSS2<~EOxzo_Q6Hap45nwa<}XUJwCB?h=@uq8wo#VA)xSBY_$Wa zGVhHNPYgd|?Ld)B=I9XPx5K&Vd(a~Y(oT>EYZ;If=>ah0f&omSYjpgg!5S=1{u)h5 zA5Qi%@)*83gP-MaiphL~rnC~Nu-}_}2yZB|OIW!oB$xux9km{|nMlj0Q^7n1> z9GIX**j37S@;@VB7si)${f;X2L_7wg*6JRBqV2)y=;GR!ZXm@+^gwz>CDAb*#fF@) z?ob0iaXH7PL#ixFll%T7tZiz!FH_$M=W4v+jC;_=v;8aFRfF1s#PO4^0=)*a)0_^5 zs9gsehX{`(PM85ZaTSXhhc@}P@@iC?h^Q#n?7%_dLp(Cd37Dgi?b|UZw-i`F(upGH z!0NV(88}RC8eD`xVK0ewh$_S18jQQz=W#sMHd{&gy{|Va6a94#TfP&8k0h@YIRK9w z$v?>q3nL`bJYc`jd9Q7&PcGCt*wCcEqq~eo|9m6>i{q7sx|s&Sw?CdwXmNOrP5FF! z?y1#8M^y;^qkeYYv$uqsTU`v?Qpz_%;?Kuvg4l?UZPkYfbfIRc-y+VS4#Qh|TM>=@ z1b5u+w6h|w1o`1hi|xzBAC!v>ztbBbsVoMd+mp)V8sSFq`xaanK0XAsK8F#X`mdm% zA(iso5AZflwCM(j2z#WRUc(uA=D1B%7hAQyL7@~*nw?D~JPw?;vlFT`ooqZqBMLU= zB8tyE)St=B5d;R&3Ua35KH_okDt`mFQsSBgo3X^5PybZ61mB2t9kwm+*6$SQ*{dd( z$oRaNwGLRR2u?&PI$b>sq3da-+vAMX?LDG}X~LFLED&GixMw3`s1e;oJ*8*uG<)#P z!{cIwNW5u6;m_(s#ft{vG*p7-Ci91WU z+dN8^6f9EGX=W*JbGK9>BHV(1?n*)sWi*uTRn$wWQRzov;jmSBmWcA>_*DjYc9r1kjE;&ME=Nh{}|#T~4un1UUXD^){v=t8biAGJJ@CTz-j8JaQD z5k4>R*^`TS-%vqG#^#H+2D370g+JsbJ7@SplkS*Pd2$t-&I zIRGJz-~%LIdgW9Y=Dpp$s`qUMT0L{eA4G*#m=H4^RxKyrXhOn=3cb19t=prR5!v_3 z{T@W3r;A`2h=e@qQ|Z{+r!HH=&#g{7|P~k>I1WVvWgt>=-D_}WKdDHd}9wJ zUl8O|j6e8q_R!1fgHsmTv}7z#PEC_EBw9(!`_Xo#?T|B=cr=#vcLI34X?W>7C??oW zVP`jb?!e!ah26w&-Uiz7X#V@OS2r~B6`w`yWA};2Mk@XWUvOzvNnI6inta$ybM=Wt2YbOOd zCT19p7e>EIxKyF~U#T)T!`h})5X8j931Gc%V&b#LYL_pASw|j-A;Lr76Tg5xVEG%z z?%#AZL*tDg@w{jx+$mH%WP8H#ylDz3HkMNUhml09<3F8Ib z7dr%dQWDRF-Y&$-I9seKJ8m7?d2~6U6KNEsJLe{)Q<=nA$Pu*cLG{lnPup9)aRd>w zi+j0l6O}yj0gt~R_Vo<31}OfD2g&N(#(EAaxZYZ41AoH@_C8F?tD~+Zv<9@UrU<31 z6!k)GjPe4;s+?DvVcV24iK$gHE4@I8T7g!XZcz3)cuY^>tT`~$iw!-OG8!Ps%_IdP z-lHd*cfTIPliS?Qw3JBR5bD6zh-Wga|2h>YQ%(X8+}CEb8_}nf68j80vw2Q{I@Ns0 zZdd@USqbqhKx$`gx5}GaDiA$J8{UDpC0yb5aaKxK8Zbl!+!%Uvpha26)jLp;3MP@M z@m)RW+}2M&%;Np6f!@p~-N4~XU=wLd(t*t7>;Si*@P{3!Pj6(W6aJu;P%H}2>)-d* zzX_x5gSSHPwUAo2jb!{Uyjy4 zMYAWhNe{x4+%y|zyk3g1<%QAdilY1uGBD>azVFKjl~t-0p7s2HSpb#XE{hvSl`Oby zZ;(f{kRM_8_SU~)40>D1@2x1iv2E2hvv1S}y88h21i7UST_%#DH-qknoA)Q^M$`hv zVVY~#P=n> z$)Z|Yga%Css4JiLe;pJCDmu`-%T>?W5%6O_`%yi&)RI@*GMl30_j2qA#bV)mD|HVQ z>+Q*Wn4(8G^${W)QA!-IvPwkrMS*uJ3i zw*y%r@Y18+G0+>O)k$eY(1z1BXy;iE(bQ@50CGqtVC1;j@PZdnQ9u24V{Xa#{#^(! z)7V8~%MHb4SV*@6{SU}#e$YaJXM6f>;L+BVWBf-h>iZF#mdVN3E1%2%?bgFOyBU2N zq3+#`-}ryhMS~e=Jq!NCOeNUu#=iS9BqLsIP3bsAoV;#^YS~;+&!e$@-6Z}(v~*q% z%xqyHXrI0=A^CeSp>X29GQsYmN!BcwFjw&j*`YVPa5(qbQO@1@r*5+F zPtNmX#+6vaqR~{yS>ER2$EiWG(1&+)m_=Jp=62oheD^2^B&uWL&X2jiMButEDb?08 zO&=O{=ZL_$_#hf`V^IDo$m=)mQrnlpB-+_n-F&gI?fPZSfGE0Tk78eclxLVyVh6i zJ1Wd9OJ=d1>zCtvk+YfwX+~84= zybkYK_dV%1&r@|2WHjGBHFidXA-K5eYB`>!{pS@TUTojn8ci4T-d`?4WDdL z%}Z<$AD4e^hw`A-mOfgkFObkx&2@A(#qsku);%9~V`!~|GQCMng37uo8^nI9+owN% zjf_Y)5#wKYTao@_Pdu3eMk|8mV*OFUI{}RFr?YLFmY~&29u<^on)Ld0_MEL@tHE8ztG6x}d5=;PRpFi> zI{=%Imi2xGtFa#@qHQSZ<1foL^{kwQNvr)u9;ETjwbvwYhhE4OGLpX&lMOavL7b>i z?j?h+>LL%z4+-l>$p=s!FdQQbWcZT#Z@igu)ji%>RzXCMAm}V_nOjRwCcRBuqnU3~ z6D152OnP|9yOevvuD>*Qkgpr0-=)BigFQ2$kkDhoe!L`l)nzQuCN{gZ2X5pW{xGjT zW%_xDw4=2BY8SQa4LtB6=GqX9_6oSzM2vo3Fp3y=4Tt79?ig!B>y4cCWMUNdht-b!SB4$>`_M$Vr^jl|tnQqU7T>a8=%ef-^ zKm&ap-sZWin=k1DQA#mUG%UM`9%n(a%8AkjY?N!9qmDy_^$nsL#vwzV&+a*olsKK( zKh2(57;-!x)dMnUFtf=Sr1qkEaegiZ!v!o9;o zbGe!FB;lr}gcvxQN#guN`*dZd&kaZjx{Qn)(&62wL*@0^%NXklB1eqrEuD7fhM&a3nEtyp{Yw9E9Qz?nMGSaXZlv^~7>XvR zg@wG;K8A|>y*r#BK=p5%1(h#4JQ+BMww)cRICavR*lsHSK_+9uzLeBTw_BFy5S_<( zm;maR_IJU028G(0%MGr0my?aJSX$IVGbGb~I|)^@q_pa8V50&tX?@sEGC)m%CFbIv1JqVrp9+JLr=#oEc$p{?!Hz$U`SWDZn$o!19#JS4vTNwcSb@UrzFy<`fgeFOGV|!F zLBEP(!)t+nJn?Q9|^^g5A;P#5Q!9nmc zdC(9eEjsu04EvvK;t~07RZ9x?9n4Orw(Vf2E6MxGsq%Pvz0C=<6#dx{DTVHd1Q=Gj zjXt-Z`TWda=zj9OWdB$|jF8<-HfrSZeptP>%sAYfx(dF3Ny_*&>TmF0WPF&&B*!ub zh83t|F8UTv5Ccl8i0CaVQ0p#EbILz|L|C}<)o{&f@ihT4>$*p-sVkG-E}1N? z2mRrymgLQhcSB?*6IJ=)OWqmWyp-n}(f%@e&5;JvEml_|DAIr5lEo`8s zf1ANg&NfEry9x@$?4mU3O{aE>zYteE*7djdrt^e2JX9`{_mlX}XskBb#IczM9WQ$k z%1FSQZ@IjC7)#Rhf>V$FPu#WUjMI^YDsUFn1K@P5ZKR7E#?IX*(A{_pkJBp>fxup! zDF3yz=5udfuMiCfd=5|exc!&o5ow#ENcCwoJzG3Vyk+f@9Wh+o(6QHgLi2_Kz*x~l z!}e9B)xT!bdp#RpK3lMi1$keXbe+v#oNt3B$brV4Y~r;Z<)OqIc+Rk~p@Awq$b;$8 z%WZk@WyP|=8)%C&ISNSwshTcRosA@Y%!+!OZJh(S9Cs$UUeDcMt(f`u3;H1r+Qra= zY(Qqqq`%jM;W51yBYuK#-|az8p_)z!YBto~wVi0a(#iyuN;Z{+Tz~$2^#{JDvgLQr zd3GlIL)vC45BlD3$DYaH3&B$~y|gDuFhKglTr7neb>g=1vYO$E5`yiE#?adJ={<>q zoOtKCZ^sq$dg%9(4})TGwI9ckbR7&Y`DF2Z9#(yUIk1U&Cq@KgO_ITSmJ*{OiK$P4 z?ZGj_6~g@{LLx%3`YJp6&9p4(UBE6}S7fM$UinV?aShRjM8rG50znFcU z$}pv;vAOHH;2r&g+mChbccTY+uBC#t1oySw{b$T#sb7oRs=^)&OX{~d?G?!eVo-v~ zUMCt4yhpGROXNrVUDQ~hWnRqq`%F>^+{=HLu%hLU&Ou8rrB;z6PrS5)h{!lMyK0|a z1P1HO1djv#9_%{$a~^+L#Q`hUcX{M%s{R_{`j$M{hbH35Ht#oj55ZpQU@@*XJZ1bq zv{qcI>;@3G?cTyJT{cCbtFiaSSFu)Oa~){EmYB}3A}Nk1sjk{*wqiS;Q2^Hbu5ITk z^WR&HJsFu@3=arFvjkonh{z>y#cLJ6&+2Ley89KjA!yRUm}ua@#lc>N9&6Uh|VJA z6RqP{&jwWpoJ@l+1?La|Iz?6Yy~<|t8(hJT^JM3t=7#cj!$o=l|9GmqZ>CwF_y)($ zz&^L*IBUyqskFfK@K!FQgi9wfAzL@C|CmGcdnw`EiT)IOAbj_*s}MWmx^qn_|a@@b+O?ivNhSC zKBFu9o^u~z8gcZ!ak%8ER|;KktSKKI-kE~5w-6;D1X@3TgqUXjgEZA}MXys_Hnh!g zH90&-owX9>ubBbv7fBaV3u~Xp-`Xc$Tk0M>FYuRPPlhjChrJ z-Pe9b)8!@26-R>3saGy#KqgScYq4=fT**MZ!oZ)79GD-^F;h_F|h@{YrL z4Mv8MpPr8NeQq+lPpkduq*zxi`D4ONRWhBf4|hV!RqwC9WVXHViJbO>S=W|W6U4uI zqz75{a4w4RWncb#wbKqr5Qpbq(hn!NtIB#JETESM1&!vySuv^W`>#B&-lCF`^)#MPds0GX`vnf3G9Y+w%kqky0{g5{5e!SUAgEawus8m~~) z+FO0t2(SmIoRAL{tpsfK#w}s)I7p;?&rJG*ZqM`ZsiKS#s?{ziMDmM+k;IpmFQHpq z>5I?i4jY1r2$7z^5SI-*>{n99*g5B|!0m1z$VvXVF777Duf_wKE z(aGaHmYu0I!q(3xN))!Ut*qWBs1ov>SCwj5!e0`%0S~<69K%I0@H~@8FN;4FHv>Fg zB;J4T6YG#V^r96v(y4lpWpDjZ4$FJ$?;Ew7JEF4@GVsJvHeaXcBKA@6*o z`0Odwo;uAM@7eZ;J`3$lVd7H;E$6i=Hp;cF4nKS5X4eE|4Vo9NAbYUTCM4GFq(x8+ zW%WxdyeOKrD1fw=>E^j0@N;2%Y%7n}xaBBP)j)KB>1;orZ64beAs;EVzOkEMAt=%@ zDk^B%$7SEY-(Qsx#V*WUC^i}KAZ_YUa;X0o&dx&+1Dtfls_Se{*lK*0wl%+s!n1ah z-Pt8&KUTFhR;Is_-Zi*GJLmLy)Ep&yCQoGGn{N4wo%=Fha+hp3KHM{?FRc z+0qa}=0H6>aTBp0TL|6>PNm6UN8XPPHp_yGBTNlne<$=RN9Jyhq;-AYI*CASv@?Hm z8g;xUYkdoGCk1xe4`@o^W&&&nYf~7!Rqcy^k#}}AT3-x33pn!#KBm5q^ac`)az3c!=1X7>gszTAJih?i6 z#NQgaitWd)w0x)C1JQBrg!9kJD^*ilmu9u$i1XY5dK}r$zs)414o*nR+B@w<_(=l2eore7Nbn6-LCG9!YTGJ`yoq8}*poW>ZdP^WNQ4Qt z@qMmqf7=6muok3pdaYj+&D5IxWAkdyF3dY^6kN5?6RUN=5iod7gb+&(a_W)rjqR^b zzP7Do?uOWKF3AUZ;rd-~phoG~caQrtb{SsQ13f*Tc($;NLe5f|*9Oo{X=SnDOz^Mg z-Pd?gv-!La&|XYLD3qDft?Bw=K}y4l15hOmODO498MvH4ENg2WZC#DljUtt{jvK8H ziH(rqv20wBjl!(Jy1kL>?P7QUhn2}}{l!O%0VBAd?14EV;}CV-SIFAT;l+-sXrHy) zBr))K8z8jnH&W2RrZY>!@tlX%gjsDB5+~YFyIzIixZy&n=o4g)+WSeT!9Go zLV`nhya2)I=@+fKB|~^HzcuwWOt+>$r0WBAN7*Q7?KArHC;(Lgu@0f8z_dVX#J%vs zp^VY5=1JQKH)wT6+X;xd`d&Y>6l(q;Yx|_w_Q_uv2};%HtbN)9w>^z*2cpZh{AE~B z=}0U;Qt!^8y$=a|lSy`f6`CP;){Am4j_OBzL9`zh`F66%oIYc@!=weAmMV$5y(pug zm0dC9RG?|@3Z~pYjla-MrNt}#51F~KM1wzSzqmSCcp~{GJm-!%9e>5%Su&ebOx)Di zr0n%Z#9YJKIql4B%94q2+BIa_}!FVH2^-RZCL9?k~go?LyGI0uvhjcc^#_eh$vI$^xOwF<_(R=&x-!2 zKw6S+)I4GnOBGbpk6TnD)7&_y3MVaw7cZT6l_*nT1a%2l!;xp~@3x6(iuGV&-=nB*0zs-8&LpG2#0K@Ud5-hvqhdi(^*^+@D zRQh4nQ6w)4Uk^kCbhh3}D(IK~PL)2nBYEuog5@DQ$MpC)^t|fRi$c1~Eo19m+Dk69 zr67BDZQ7Uz65Ps@X@zfhWZsKKh8x0XY}@YjbL>_MqbRK1Kzz$3-d;3@(Q)p^mEQMo zUBic0*D62F@;LoH0i&m5#ZHpHyg4-!b!xC?BO?@%bJ0G-WX5d)O^I_me@ieWj)y>$Q9kl8 z)6(-~)UB>45Nw8e7$i!9=ceU;BSSbvv2f~+=$5C5sZ4}O4WVM6>SwDk_|u^cs>XV2#~cu>_7~G$XC!;BeGz4Va$&f z_<=VrrYPg`DQ^6-cKh5rC`@b#<&^dpvXhDZBYvDIBwL48KjIm=!xRG&Y(FSQbEm&T zVTMp=CMc{(X24Y+s3i92L#p4Ty8Wm-}Rv zkJA>^JJ7A@{hjE=gMrfF(E>wYPb{uN$%%VT1G#jJsKK!`T^Lkv8Z>NsCs{`DGjEm{ z@qpIHJ#`*=^|qZ$&(GX?&KgTd)M~iSq%`y8HQVr6Zj_!0RYuP&VJ`SUeRev0_+z5f zk>|~I`1()Hx=8#)MU2v#1glayQtK;xU0Ocq{FsWe_vWe8djtk&?KxWaHPpM))UWNq zY<1IT9Hxj8^YQ^MLyXL(7X|EiPmLh(>s&m*sHt8Yo%iEl;XK$xY&aG?qYD3m#BLnw?u*^Bv)Po1V$B+P2z;X#TVS^yfl07Ju=I0{^Ney$^zILtHX)7iI9@pR}+| zkYOZ=?QjOeDMQgOnCWF;Xh~`V=eRnrWrnrzlJz=CmD`>oaayC1Bb}smCN3u9kZTudtFn~g5_QZbt_?7Wr z?*)tfKJlZ%%mvxmzfz|-UH&tHF8eI0K+&c99xP;Ko$d%eF(ZU2&(LTp#xkn)YRR4B zv1N0g9KcTId>Q$r^%t)8%|ISr!FG%YRGAaFa1)PG^`Wf)khQ^f3m&=?r9;`aQmfbT z!5Qg4ENf9VB$Q3QyeVQnWZwV?0ie8BzNBh5_I~a~7lMNxxX_^=sgY^^Vw3E++ zi4f?46I`SDF!btALcpkwmWJ%#3$U1jOmwCfM|9SYg!{Ys2Y6^WL>NTCag-a^h3Jl6 zyPA#43?z)TDL6hftc~(RzSUmrOmojWWq=qzJ@T89wm(RFa;`i7+)beSCc?^C-F zpB}}eXK!G$SUT2RrORsaY8r+FFEW06*F8h`aHAcdLZLkteq>uDoLt8PE9TC+YyK?L z^VqA{xl{Skq9eQp;isY7JLxL@JG?%vQP$DMDRO}08O8~2NU z{t$}hGZ86k-g{%W!D*Lgt=1;l-p1SwGicx>=1+-boqcxuW@q_)X)yC0L4)iIivci% zUU~VO%%_nA&bMkfw)5*>mwXCOnGwL}+jiif9#i9fh)A>j#XHJwi#r{dipXa%Z#EHb zYszh4sv4r5}oxSccnG9j2?Y6Cuak2*h%1^|Ff}O=%y)G z=<+VdQiI^#p?uKb8Swe;W4hf>WNaD} zZ8qg(qwqa~k1PYGa2JABvUDi&X|vf)62;2I)ntKWIwGL;3US+a`3OzA!8iPEg9v_6 zE#K{tMcCSj6UTu4eMa~?Z6l|EpxHimBA^9&4oafFWWcEycuT%bx@Z$NY?Claa6oZw zp=04G!!{9Ju|7BZZ>V2bvS^aopbdXv%E-uHAPpTpy|5y_E#9e57@Jm?EpO5w*c%pf zs?^so|JRS^GN?&y>L-EhA? zE2VoM7GIeH+xk~%up$yljrK-uROK)T>1`zHk!jxn*-Dx^ipNS zJAO5l>;L%Jg(0~s*@1uYTxQv?{Z0ri0qw~ps5?(PP@~D9wfMaTc*1_$&f?HKpm!F! zsPdtmP~>@v$=yd~zhOLX!~3pAeO zz1xfJN!*Vcibi`A65T>E>E3u(cakmkjxpMWS$VJih?BT7<|pPCPJ90Xgdu`^jTbf! zHk*CJnt7kT_?Enzr~1_^V$)QKY33NPgj>R^??cDm@!m~vEK(bI*t3yWu`+3mFU=&j zqykf)R`~Q~09;>yPiSm43wA^j5>zt`ZaJAto8!wGbUn*xKn*Y|^ z`S|f>Axhuvb6?B7wLE=TnW^9FTz+(-ZO@5CDd|V^#5UXNWqAk3iLJ_nl+tK2N*O-0 z0_D50=W54c0l~jycw_?P)Q~QlRbsM#kCqhVNxMdpV1u&jWcXg@HzX=OxOQCW%}`tz z?jr-$wSM~zDhE0=$fd{h-^sWx;WdEQ%R986um~d!3{E%Dm5c@ftX@_5-=4Y!b4U@u z2TOG=u9;(@W^+Zm;}h~2Nd4-s$mJoUBQdY95gy&9V+u?+N1i8qI#62WT)r3kQKCnm z>6UoX_xriN;QUbkjDe4nURi0IpWHR&yA8Hk?rO6dc9@o=d4D5gpL6*;R7;b1H~lf>+>5)EaoB zoe*xL?xdBdeD#W}DzooH_O%as2HNyRVymGysIS4gWFyh*YS|c^ z0im!Mc*37Nt=Ew($U%xbr1GT57iv7p{8O0HEAUc~{u^V?)0pQ) zd7^D4{I5D5C4H%4C&4f5aA-AD={^QzS|Bx0y7%l`lV|y^+5~)j+ooprqu7VgW8g#B zDg)j!abZB^>=?-WhkwUW;8QB?hU(ta`)P6TO5Td^8U~5oj8@oaY{ahKJ~U?X2&$Y0 zc#|g$SrzLE_Yv5nfqE@oZXnjl`Ip+#T`9Q7^tJ9ZeF6;O;AlXIRnwcDOKxAAG`_L~-! zGXptv^a+B}fZ{`%dC>+0w^9$}V-KZGRuGIDG z7Wcdn1rRuXL1{n7M`B-zd_r+djLw>t@D;cPqr`&?LWY@$ln6@zj1%Wv6PO%U2m=UI z{vEvn4~}GM;lxx0Q{xPRBQLrz0__AuZcXwrfswu`{}Kbbv=#Lz`-m#pJZQND`&srE zYpkW<`3<%jT!I}Vd!=}s-+hes1n}EdEIpnWg7uOi%c25Hl(~Q6zx(&7?*1x6?>9}w z@06WV2{r8R+kt##WL-B&iDt(4!+RxqBr$P`p9Km>v(I1HB#ho)hq?DWtg}1en5}c; z3_N%XEAE3JGByV@)j@Jd_65%|&CxxbUT*?LApi!S;IqHnpTQ60a6m6oiVwf6YDjye znenVI>G9eS1Mp0V*;(;E7+D{~sGzS6zolu2q-emgf^aEPV9c!xuOmq-l#@tIzP)X8 zg0eO==F%}JREiCG|G?B=d$;}%&iW015zo-CC}mBv=l(EaC~HFNmFIe4P zEIh5i zmp|dBpnuV(Q;Ul*2n$+KyL<6hF-;=x5q>oWUnIZ<8-)+wBw!&9Fgo)ZtI^L2f ziKBCO5Tpvn=(6xjUR(hokMICy6E*$RzQkgdHDHLj+Uc+u-T@kglYj>ADpnR<1*sc^Dk z#nBO>9ax)D!ulvW__);0O{*af8G$M9Vf6W&klVaGrXt^<9<4EYgb2%ms; zyT@t!W*c~L)ZkM5qc05ZW^r|($>X>7Y?cb|hIK8hG5Xi4W_Ot0{Q)A#3VUT5ineLye08XD0yS`8&=J8#2! zOvC==9EQqB*x46ftR>-m7^X9x1!1k6sAQ@tQjAYBzOp_bZGrpQ>nvZ}O0?!`JLa^U zxHlw{8M*pl=63~M2h>UrhKZ=o!e3S0x>{b;MT;5X)TewKcz(_keMMAQGoSs?*`lKA zbk!nc%-Gp~w)_Ef6kogTQN7_0d@39;A_k){b941V`%U8wtOP}OXJeKrhVnu}L?qT7 zrZIvst$*R2wN(XfU74!V;A{E?{{#B*T5s{;e0u--F_A@ok!aW{f0`?%w!~vXTj)-! zZ_X)KHipoFRV?G@`~|Du`rD(e&BxcSBW$8BI@ml@_KPYS$ zv*DSO0oW=fTj@i9KvQaiWL(TwAlk&8%8MV!?S@^pGW6)Yk8c0aUsr3cZ2M=gtj+^_ zd)Hx!J2;~O;`90Zq6P6M5nl{r{d%#?P?dWo=L!0unW8E(g!shPh{{gws$3H)1?=-e z0{EnawP^I{Hv28XK zKW$-0^#^bp$WIpdXBsitI67BAz`h(G^vfAtf~UEA3{TVz=nde2Th`71OVHcSmN_I= zLW(pg;yndvu2~P8s1ppw8=pzt52$&u43khSjyxo)6hJkJ(0FGIf)x-T9i!QTgUHBY%<00AyXBE$PCK zrS1#b^BrqI=+2hn6$L$(y>S*=H*)i9LqgQpGIR;NFxoOJ&wihes@wODm-OoFjfLBK zkyfyiQH#CPdgN+R5PM-crj2MLNHzPm4n#`5!iE0+S()hk29K}#;@X6&_m(DdW0QVp zW_5AgkFR1`dN?NK&T=*P)GU)ZjMTKTUI=16EEeXQ`iaQ zbfUG}DFc$8{E2;qn`;d9Li-wYOTWI9!3mPRZgzV7@h zRRzeO$J!Q<4XF#s23(V)-qWN_8v<(SGM4p9MPBA zD{x9?)#(pv8!LIUFUp~}wJFPv5h~u;uh&)*?D<;JUh!-9F>|ylU*E+3D-WFRLKpAQ zK9w&DJF@r+k^kt)O}5?RaGDbOmx~3d@YuUq0%razk-&Bh52(%adr|62gbw(U3Ba-F z3(q+xXwHwflWJTbSO7N3;bS&V?8HnkMW!Bt6ycuZsoCCS! zM`LKLSwJ$!H=-ThuDy?6BKaFYf{W+U&cg#UP8dU-vOl(4)?k3K-dzJf1+Y?a1?sRX z)2z{S8bklKQ)a)z=IyxgKDle>(E{*<=#s?2KhXe_9aI`73!Y^As#U2048!Cle zFC;YJbvHO@+i(;NN=kzt(%*L=1+^^UrF=!ua1HwEJUU!N>rEitOdSdSK~)QW9128V zM9_0gE)`FpKNs6o7Y^f#nqQFvyslJ-+!Kl{yYu*}Hpy$lS5?mD*q zbC_h*4L4ZOg;kok{ey)%cj*Q6u@<`J^Var!xx$=a-jG?%m%$9#@X2?cV+=>L%FOlN zVjIN?ToDwie!{%j5jxB2v$2E2CCtcw?`s~%HcX`$MD};H%jo|c-R-b z2gZiY`0Xz9w2OF)Yd>+H);$(OEg*wGOr z*(U0)%HOx|L=+p}>u$K*^S`0#Gm2ypq~ibSZZUirvdC@TKH(7XE1lF!??_{GdRQ>+ zw-cWs{d9sAu@>F6nhL$V$ACpoSGTeKPQusoOP8ubm!%~I{Vs~+oG41Ib;J>>_91)7 zjUJak)cx7!dX+Z~`DGE6Qh_vEZYz<_#y>L6FI>tBF%Sd(9G?8}G3I8p;K6oVx7T^u z&x6FD5>0C#m_%Kym>xdD0{Lsg#6NU`jeq$_JNAI@s`8#fm zIJ7yn8QB3Db?bVZH|MhD-Lx#BfstnWrP(QdQQjwE=Pra;+jw+OZjpVMFMGc5J|&OG%^R5xZJE|9WhuH}B((WYVksCB-W^nsU4mF^6`_ z{mNqa0kXYVqg24ZnT+FTIiDWL&UNa;CHq|+7FgzYo~XlZO?2K^Ag|w(3B%<*&o97t zrb%w0f)Uf7O;Xb$>?7#hHMgPF5(xn1wE^pGz`#)V>q~!OLar4c7c$eA^P=VDcQD14zY z`jykpQ{7GY$q6lS9OAdH>_PSWsL7KVLIZA>nIG9dPr*gst0IQ@m$iaSOY-fAi8sp*iki@-M{k|I)iWOrw%(;Yo zD|MI%*RpNCHlZ0G9x|YE($c4ML;zdfaAf2M>e%NuY$PxPh60p#IOB+ zzZ+eA{MLRyLx20PI6Uq0Xht>t2$^Qp?sO7XM7xOL2^!yFs*45t?&9ZC`)U`(!?!#z zmFbyviLkrnl~S>JUdZQC^sSt@(92T52Xx@)C~5Ep70KO$_;7hx{E;g|+XIHj43GT$ zwh@b6M?aYQ6u5ACw6#|kmkAZ4FFs|J%W001>L%!m)yHLwi5ShY?OaR|_-vV~&G2)t zi}1&&hd(@K@Dh?Q{bUwgLutw>QdEiTjF~PMS{MX%T+h& zd1g6f7m#$jMd>kgK;f^9Qg^=pe!>6g zo{9Zx2?MDfTN4PyKl(>F;$uggD?l?U4Gb=rOe zo)f_iFnivRusK#Qx8h=csh0E50pAo*xe5T&mI%162+ z{|>A`kcZpy){B+I_%r5ZAV7^VABN!j-FKzz(RQtvQjy}}m$q6@Fid32L#+K-@2~n9 zeNrj zHAV>1v>GT1Y#ilEVlMKrn1{vwa(2xe;>j zDBp;oIhaUrZewibW_1Q`u%~#o}%F>FN8|8a9kiS^rG(LD3%Z-oJ@y9JAP7JP%asyx#nf zV-XL&jp8Td+%KUh;05YZF*Xk$IW6RSR~6IL5 zf#&q^Y}Y(ID#GYAT?0Asd9&vnsG-)YC#_}!iv(C(d&i7g2+2WE!g zBFQFpATpcLRt!-St~RUvDB3c&41qDHYQ{YK{p$)`nNtg3#C%bZ=H2z|*{q9IGIYq-44NzB~#rW@D9k7H2$R>)CyS}X@o-#mTVv|NEHPA;`R_QTP4LoVWDEs z4{Srmm!X>yj2T7zbQ8Cg#9;Zu2=}m(@+VPK^4M73AVOIMx%Iu+&lK1pKdL})(>CC> zX&bKA`~mANfB^^b$7Wd9{&U?+HMr}ssRl#fOe#4*`gup5!E2lQclN_40Zv?QFcTYj z(9oH-3hE#d9K)zht3s`6pGU9WTAVGYxkT6V-qgp5rBs_<{99WJEKM-v*yq}v``a*; zTIqV3H;GVuJ>N zCXh2f05kodr3pTQy*y3II9DgP}+F~G`{ zF}jb|{eE3{-lxy*%2Hc-;_CK$3+M}uoezAW#iQBP_F?Z@jyzITt=~M}_;i;lJV3gq zOBy!0gc%YB@Tl%rv3#V+wA0vK;R;CL?|Td9?~ZI1hk7|gEl(tGGa2MKkE$}98e|lW zR#Jir8l4IV6W=XU-MiU#v3oG92?{#Nd^J`KGqdvJI!n+W*$l~r%iY!lkpXHTndeN! z0|;R|+rP`7QPNEI-H;KBFPJXn<;WTd`^3yybVZrzaD^GiVE{F zn#w*#*z*uRt-*2M#@Bx@+fasZYwXK09qo+KHg=R?&QflcK@9A4HF+3} z!GVWWxw82KRkdd`snk0k&3p;~yeiAdk`T+^p?PkYi^9smXw1tZNaWyn6|lPG1I@h1 z0t$P$}Q6=H_rBezE=3_zqs##Gm3 zRfyY(Ss>eg(EBwxK&0YPeu!AOwaOa?kORejcdm!rH$Gp0jNQhk;ERo`SH=6IuD7Nm zb{Ea7$ncFN`H^=h%5OQJDIXWd9{p=_J3-u-GaOgVX(8icOiDVBT2U3SNznZqkQ9@s zYT`q5ykfz2HxIK|+_N>Cn@}~1RFSjA*O=Qc1JAJ&ndf;AX}4VjveaFq{O>(ZmC{?Z zy{-W}<#|KB9}R2`*_)6Fb9(x$h0N`g&sgtZF}?@!Z=#A`HRnK#rL@dRF{hAnnr3aR zqe$iu1li;|B7t5K=Px`unM$9%Iv?f{Q65pkG&ucf-+Y7P|4DJ@@#_qtF8JWQujfpk zId8JX=sM4NFz63#eV1g+Q3RQNItee-9b?eDJ_SEtwmR(@Do!10j`Q>Pvztg>RBXD& z^yvl3n%J#=9Lf#D3^E4nIwGf4@k7pKxHQQ)r-vYW3qSW8MGyMb?R#9X(SP>6yLMs2 z3AF-+JjG`G3T>27F z@kD%Mn>}=mv*Mffdtu3Px-<1~Xa#CAVqIjq783CIV6OS=<-snyjMzjk?89usA=|8b zmv~wyOxcZM4?%eRcLonu5e5Ua8-OD46lnVoM?JyDIY+&Yb@4CAorg#K2dj!>j)eB$ zsL^u{u@A7A;|R=DFJkMQLBc@nzu(+E;S-MyX)dfy!nAoU7PAwJ2!>`UnHxd{|qt0NOA}A2!{#KQw zEan2S+LhMaks}y(ZGua!KkkDgD_Qz}xi#;ByrOFoY>A6sk)hQY43+m~U8jva*~vTysLUTH>3}RA$v4OZmI+ zLEpQ6p7bTS)xot=P!J052fx3;`oImF-H(I*PeIi0{216BbtAo7gX5vPmDoNFXWP35 zj)4`R9f$zDvyYkuQ1HQ)gPvf2abn&oufyQN$5UqBnWA9EMzN!}aL5u!UaF=AZg3?Z-eOAiw8 zXFr__uOD^8*zbMB$fePzUyWY&Zq;~z+9f4C?~(=jF#SmQb=&5-CEsoi8t=+Z5Qvq+V{X~(N743( zqq|fzE3#5S>!>xt*mVDU(W(Btlwc7pHpSV7O=rBRB7bBwhNp%X*LY|b;qya}d%n9+?+wqfpt&KQ^m#8x`ftB7qoR&NWVHAP+2mNaI?x`!R zJ5Ga>0*DBY>8Xn4dxI$f{V?veHj6NQE+Pl4!&^4-tfr|3>Y76K z05Z;1qM(`YdTcHK`jvX$KX1@gdCegZg6w~Cw4S3;BhhWq`<+(sd69`8>l?+q?+Gs{ z&mK~1?%HrMHo?5w#dsUdU;flYCDe#rxOdxHoQ55dX|ui#8HtZWST;Wp+wWs6{pej~ z-xQnov)myC^6@@&zp4^s2{_VQ0#BZB%TU-}?`TvCl-=7@=SZ9A(-QPU?1no%ZRXTj zoe+f4Fk9JEO#E$}s#{diHF@=D2Mu(Y_EHlydqeRiI%>7?^Ox z@XNEXCD9)%1X8tjc3nOXsq>!b{+_PMD)%o`XXuQ}*Hae6eObB_Xp~F{ z3?r(cJ|Y)PyKNHL0ZAwtRne-$fm2t@P8wWSaP_#5rr{(;2MHJghA;nx^|ydBIgv?l zIrS=?V@>ssXEXy{=(mh+GzhpAK!2_6Mc>trOUEWV`p%fOTC)n`a@ysV8}Pd`zenb@ z{dS{VO5KZ^F@}PtP_Bi4VK0-U9>uNca-V;<>Fbw-%J}s^cAP}Zr(^p~O-1gP_toI$ z;8XfbJjH6rQ7NuXt_?>QOqhHOeIH723+R*hi>BSHauTota+^ml-J3ylQ%u*8c2d=v z=Gosg*PxCEm%tOOYlV=kg3u*6Tz4OuLwRz2m4e2C6qS6Q>p!siZSQhpfpvPsQ->7d zcwh~h?S;WUBrj*EmX9*Q6q)fXjM*se@zAn`RVU4S8M5Qf zOH1%2>E-^Y-4_fmQC=lx&HcBUZc^3MKa+l!Bz&U9byalE>mb3pvHPA2(p(vB0AcQL z-JMU6>Hm+S;~4rl&zV;c47I{qKIorO)7zwfkpDpL@st83K=h0_{TQ(VZwJ0VNl{9W zdu56rOD0J#mRJOe{YLRCchNm+ywOeeW$$brwl~t;y z!Ljc@v^eT-p<*I)J5-cgTauoicc+8_Ue7f0Z{%`v75vNg=J(_c zUTABW{K|0R!GNN;jABi6+bFhoz6y~8Ymq6+1W#48@SKP&HJl2OAcpuW%(@v9;g+xQ zd!U1&^kZn^?bQo;2Vb_Z^undZ44#jC^=oh1V&eg$yYq|5qQ}+o)O=o(oI0+4-3AYY zIf4;y%S*|V|M}+}3PF0H))ARK>LJLz0%szYa}2I|W*-!D(Y2ylZ;)(Ehnu1&`48$! zlRo)TylSG>7yLWr;)Rb|;A+6XOtpySbdNc7LDOtuXAPhfVZN5Wo*U)!25zi4xWRB0H#dBWp zP~11rM=ba*-LFXZeDhxvVX8wlxW8!T>)2`dPEl{YVGW??%_Da@y$CnPgjA(;DlcDJ z4%?3x)PU0E|}CW98dixO0R&-#&AC7ccmf~W1Nt231>7FbL7oJ2M>^<~BYF%UTA}0D6Y6CA`NT%xxc?Somd6=O|)nhR5LjN1NEe_(;=|iy(o9e+%rT@r3hS+wplz z_w<9tRgLNF{9I%LTgTfrfRTnGW_4|grsCh5QyZ&0a1-E5;t5p8{-x@$}9Q`ZKBb?dv{%D&2tE~Q=j-49t%4eSPCl&DR; zb#$JHUg*1&vxEPFj1Qq*>WgQkxE0sdkL)p z^xKcU@B>H{knLL z1x^_79F}`Qc1cnZ=0<;>-9B|a+`ucsp?DHD1n&8OF!qFUUNoDpbqk+q2@e?GB$=pa zj~MBayL5A&S805An0I;k4!siVoIeM@6xqva_@#BUxI!90Q54XC?Jlxve{w&g+XBA< zU^K&J*I-MA0TO(*O?s1SSNekgMMi(Fl=yMHlv~A5V@43K3_c;Fm!QQ#ClRY!3)Rqi z?%JZ)(hj0eJ9-?u8~)K0Q#z}8Ljn3TLFSJaTn*$#K?~kDpG@ML#;mc4W_(fkg|Sfh zYq9$TOx~pql0;JA&P?I`5<|he9*kU=yIHy4GkEPZ>tfVVg}s@qc!iR$$i%TSe}BK7 zO4y=mUvgE>g8#d*KO|>6yJhBz`o$WxcYpg>aQhv9%VGba$P=L4C1HBQ7W4=)S|wU1 zpqKvz^5s!C5#ApbP`nXpo}t8t8~PHu`tj>(g=!yrWVv3(O(;u@FLkH({WHm*?nOFV zcu@iAQJsQ#pBQ;Ovp}jBf;XIc@x*E$xJvYpu!yJF3O>DZ=%3vOMkc!;%rq>Y5!t}}|M?(LM8ag*N6%l?_ce_2RT=%_sa2azkKF8f8vvtp9jjkZt z&L%Lk6@|Yr-T!xC|JScrlZY#elJl`^kS2AVms;V30=ecAPsk!hb1QDk#OwTcTEc9)@*u$J~`CAg|_H3 zATUzHdmu&NFP$VQ{bjPOB0l6n{0l7JmJzXp0Ig=FZrr!hZ%VhgS7WvJp*LP!;z{m$ zFKJ#_VIPaOYx3`de&@z?>Ls)TH%V9H+JUE>>yZ}`6C97beh$)|M1O=qM4Y~O5Lm;4Jdt?@f6J_+-V zBB5dLz;RxJYk){BS%AVmf`$0vGYyZ<#2xKaB5Kp@ZTXm3Vy9~4#EdfB}ZzC0u+e>iTMiLsYwHm*A1v|V&X3!v9eNNL0BR}OSr4_ z3Y>*_``N`!d{;D=eQ3o9J}9N`d@9PB?Z}Wctd?4!5XS?I@Z*WgcyC~ZeF=|aQT~d* zE#IMO0Gc@o>raHpHmg_MYiVU#^jZEPFu4^&l>7u{otn826`v*V=|#5kBDKoCl` zd-f&xGW1gh-a>ZO%bG5>!ZB@V$e_#`KTbMCOLF6dF~UvuV7^AA_O9mjg-7Tq32X)Mr7{6Z4ic)G=)^lzDFE{ki0f+Pkz004> zk9`*zNY4`1WYpEUkne~$|O9CcBF02agSmMYh0rV z-INb~_3Hi)V{aK1Rk+5Ff~15XpmcW#Qj#)sH%JMLl(e*n0wdjB(jC&JlrVHRNFyL! z(#_1in{&?n-*wlzAMWA})>4pJA8&01%&!$4&8hJU@5R;9AxuM%E*FZ^O;L2@SE(ek>I=wu zOzyK;!b?^pY3Xw$7F*-M8&ga2%f4QQN*m{ym19V`^%@L4@EG#mXbraJ1A1SOP|#su zaR5V=KY(P(-w`u4*xF$PE~UiEpvc))*J-^9po@U)Iqm;Y*D!YBlWEy3A#- zksuYO^C~$Xbm*NxGozZs5BJ>vz96%n)FDX3(>vHl);5s{g#H2C(jyGPDjq7)*bR5H z)atQl^UjX+_6sXZlxoCuwYybMy+6aLz4mvG#bl?kn(UI#q0iqV>yC{Y3lP(Eq|dc3 zQ>g&;nk&q19FR)%EGM6{^m?nI=X-~oj9Q~&0;g7rgdNMQk#R~vu~jJ}DC8UawAcKP zazT5FgXzE~T>{R-DWah2gdW37pKPY8F&*-zEx{Cp{xj5iF{ebRf(_ss9ezoW5Xn+F zd-&}^78>6!>JT;z;wQ*EeG;~rY>SVGxa$yOZT#=`u{|slH&PdvSmHv|i6@k~^kr2s z=@IHDHpYz@*1xbxtjdc5`&E)}ax8WUSvthyv@s)BNpocnsi_xOksi7mtm$6%n9~?Fea#p0@&W=M_#PxZ*Pm z0CUIChpTE16yEVHIx9K{^A5yC*1Lw^QT0DSP?!qSG;h7Py8_xLq2Vbm1K0xBljiAi z<1g&j>-1(Moq|jCa;Jx)et!7F!M8P%ZB04Bg&{7(4rNY7SFfi!^=qN^gEOw(`kk)s zz;@$S%YzJdl1(1(Ica*qw{D<-BrMUv{d7Ti@Cz;fQ!AVY(C9xxC#>2mm^0MIW# zVq-b->2o=p28fNtCh zUQn1FSl2$=9s!l;{6%;_ys@9fNmRyG&326X!P#X6pSn|gkF52Ik}(9u1)OOc8Ce4? zUD&^wHuxV!(dm5q#d55Vjw7!9zaJG@$d|C_6}P6S2^?kG`m|{qtG@wN0slLwd#@g- z4cltvuiy!MKEI^=AU%+gU?fDYkmRL(`%vPW#F6i%&r-pYSlPd&7k|c*>c9u852Pg+ z$Fcc>2J9cft?KfWMt4&kMBfM6nR_gJnU_8LlRC4_*|Vve1WF9RpFA8?u73AF z$%3>^+(-q}wi=%Zc+P8p8hvTlZt$M|cfK@FtI7X}AV7_QQ~dw?V{P>xEAUJbi~fM@ z!ark$p{Al;@uDPXf zKa7~wmUBsBTQ&Ua#1Oj0kaV=H#JejIr5KPs_uRxmSR}mMFJ&@=RWcltufe+AXp#Yf z2Ww6_yqb1#y!)ZVwKam@sw!)MSh*RW!ZPg88i3Ho9B?6n!z}=hRfPU$JM6ulssz8x z0jSCp{c}6yzDnNIeGlV2p`@rD8jXV!y|Gd!y9}{Ljv1LJj>Ky-bKi6QT*DszF|m|j zd`kJLBK3T?F%g9lPCc%wixD}>5JBRa!EPb~oi_9)%bIm=@72lgq`!_pD3??j-0Aa1 z8kmzzYXGVterm6yTc}U1Qga#aRJ^;9 z3NGVyVixK;Kb=M8ULB0_;yl#HFUuJg5jYQ@IA8_PD7qj$A$UCe?sa=B2Ngx!58{Ms zLEYJCnQQ`nwyu9cv{`@6cFghfJG*q-$etPEp{{ou>ag!9MaJ1TO7Hz@tyzswsrqub zUr*%Wz4Ya%wcd48d4Tazh7j&jzyl$j*hV1JhCR_6Uy&{SFuiW;X_1-4$vMtt=Z%kn zGFksc@mPS^@=lPb6vXHrP|o$s_F$rYxai^|oSb~_f*V8%9VN2wSviyf^nilSBcX`S zT@u6TU_guHwrO$>cx`nFXGi*}yg(&4c5G>{<(2Abf6zN%_pU;djD(p2QjY%4({ZUI zG1z>@LxoUkrQ(V8KO0e!2zmPQn#>xV5BOYNo{twxAlNB*z0nUBTGK@r7j1`rR?Iwp zBrV~>;$m93SIu=|AxL_jS-l@t+Kq>|a@Zw{JhtOcqHA5&24VBe5K6 z02FK-g9Es-Pbk9r0Ac}<-)UTi|0S~k3d_o~VvxuH9<)Ar=dy6wG~wWhzJPWc(9if} zP*D;y{c#&a!Sr^h>v%4-pv|9;fM7_uxs=0LygRYO8P_Tv_Ud{3mGscjl|s_EYH`U( zt42c1dueS^Q8K(6TRJk1jp9{}etp?Tu-`2YfT)4&HEj+d7!;Fj0E_Vk*8j;ma6B|{ z;fUgU9Ooe-+I5x60#ob<%i<4N4+g}6D*1AWP23p1FDw}Nodg0+bnT+9bimM?R-!;N zlYr(EXc@Y#=GS2Sdp1*a{$u&p*bcO>gDr}H8Aoe>1;6MkYC@q^K=8iPP(WM0aOhjA zO=hk&l{7cs8)D+;PI(xR5N|1ld@_)qcnGo4iUIHG3viC8R_=#$m@$K9lXLn@TCZ)o zWOK@zIT$SSy--JkK|HTn*t8<0S>3;SD2z}otx(8H(zMzrRD1jUvtEm$t_}(uGYp=(HQjc?s2ge8DzQ zCCS5=>Sp{`xuLk5mHdZrb%2^m8Y=8HGHy?Yb<$O`7<_0Mx}vhG1Zq!<%qY3y1)fl+ z;>p^|vk@IBe;X(A_>NZi*<_FVw;QI~F9$qRfsKNuNt_PVXIf$84#tFe0^c(a9#N$0 z@j=o)(b7ZTxd=Z3%B91VcCzWT+X*kTJ(%tZGT7JSs1%=3>ZIpokxz8rM0G^0!T5Z` zmCQaFGi$O|w+~^^Z+#RY-OtVi4MXn1{F>xEl#-@+cbpYiUT7tX=7=G(Ai$58muBE= z>D;#kl8fO`mQg1>Q+E#;9%W9F7+VGoUdj~0xGLH;0RJ^s0;>7(HPF7|-h-mdk%Z#b zAF0Wt!46ozTs7hIN8K`f_wILyD){K{d@(V)Zf&zGI3-L72@~(OWKq;##u4ktY+;r`Qh--PE1UN`%EG{ zE%cb}o5k~AzNl>;$Rr|vNo;T)_`!Cv=fjzTd;$^dk1)8`U?`8#h>$5Rp&)(>T{P}S z%J>u>ZhF(QRq|g#gYo0deSUZ_U($vv9RT*XYep8I{ml;`c=>ZMNy@)hN4ytzw87yo z%Ze1c-KYMbG>cW|-&FC`#F{1-IX&+sG;*X%`Yog~8|RYB|L!T>>naE7B_~Zy>P|ZTOImzbfv*xr({96VD?WdWcba|Ku7U4 zhhyp0yVTWK9&B`^QWd5QAb0eD`x}%^%hbpR0=(9XbPoYkeXT*l8gH9k`1Njp|BPxM z_B+iSAijgo0pU(yyY}0<7n#4uF$9`hPjNVV^ULgWCFS(?&+jeY!g%cyiN z*vEssyBoK8c=J`3w(z!FdPi~$jQ+C5%P3k8i|7>LkB+Q-TJ$1=37?2)9|wTW78;K> zGa2W?9+yRGjfyPf!h!?8YkYUJGEL+;=h;nsYd%u~;-rP(Py&Jo2^E%<15L+pNxHkp zIiOMgTXcJ%aX?_VLC@`a=u3m}gxoh1g~xEstb*5wmpW=)A_rqN*g(D_Q-vSM;e^KF zR{|4rOc1FJzMQD}Z-`ndK1ZYu5#68>%g@$JV;KpR&Vy^EE2Eu`>DmzGJ>{oep|H24E^i8<~9W^*%{`Bur$G+z0 zhK!d6WDu;YlON(sk>IB~%VXx7)TkGsM93Dtg)&8f?s2c6Kk?OjdNpGU@Ng zWgBn!FkdPs^2K^kF!A(EShhNnS%YN*EvX&00|rWI9FF3FzU$R@6@)$inZ)m%9!}#L za*Th8Fd$K%4N2gvP&ut((d9$1w{;^MT6I{mNs2~!f9lN2wi3|o@rt|kr) z-8A2boO^M{2CKI{VTq}rlI-^scm$)R@M0LzZt=Sh}p3OB%x zt+ASn-*|)>ZwpQ({x=0^Umd!G!#@-}avw5a2srU8=C$a@KDG%`P<;LSPmo-ir>BQf zReoP&?u=f-0KytMEJkw5JM63QK(27A@vE-L0C?Cc=$VZ5KsDU=j{=p;HC%cCgej)M zw8BtnL5K9U%FwB;hjtXbc`ppK%IdJCT3H~3z%++Wq-E0+z#su(=LZs z{JRqFIm(;_-sq2_C5PJ#qI%gqi%qmJG>HA;QXENN6eE=T*d}eK@f_ql9IAcC@aHNp zihmZ|1U5dJ$K`I66kV!5;oUn-vMwr!TWakR6b{yIQ~pXg=7PDNe8c%-LrnOi;NgOZ z4akJdr8Oa=n;VkU8>`x(n$JE-gUX|6byZejE!l^^-ie$x_5N+9icVQXV}sB#=Kr_` zGYI?owj5?CIQe?0NG&4}ftqy;k(8=`RD2Bo8erD{(HvYeBEOb|>|)cMmiw`UX*O}+ zSJ^*dBtp)*cfC|<&Zl6~%}~wlMDnR8i>U$uGY$>okkQXMk8eQZ7rZTy4zI1WJD04j z`qGJsh_>U+mZ-zH9ohs#c89-zG23%5r*DeGV%DQnpFusCx=xX5(R{{AlLZ!{F9n(K z_OIr4k`pzx_YDVDX<1!tO`%kXcaMw~MK}lyp!tDS62wXE9v@tE0emFmArB~+-|Kch z=We8R^;P!c**PFJI0&>F^}%u<23wFDZAR9z9Jke12_8+Yz0~rL7H|{rDUSSrQCDKB zsH#1$=%E^xSo)HqGNIO?^z~8K50sc%kvNt}T8-kYkEQ6=)pv7^w#2WI*G0NcCWc#eR`a}K6UgZt;(j@c){Vsc z{enOY|Na?X-?C1~i(_jhX+V}*msA&8P3dYfFthcxOm)Io>r%exof#~=xa;rtj;V8` z&LZijFA5yJZ{}6j06dO|L)8Y&fJY(bW~IcJv`8MWr?X+8?g)}ag>1OTLZxjey7~Ns zN$6lwg$FU@_cB@hwvhN)2&_y0_ip}v74U(t{M3xYc`rG@4U5_e7<}=zVKPd{JI41U z0#wU=*V)-fP%qk@DxNU$e8Cx#c=|o$uNn9F6MYHM(M4wBgg}EPMeR5J8YN&wl8Kbn zjz!mqvo$8a)$c0Q<3bre4n{B=py*$NaT1)0{>A+Qdgaw{3hp1~sPBS>4tP59(u%k7 zG)uYpqWtg?Woz1;&r#lgk^zXgO1(ahq7?2iOp(ov|DOZS|NkA}x3f~1V#)x_ZB!-h zTHI4!>4l0({shs$jciQe$xL(oWTzS_%g=*`#N20)^&R-ejx$D)`G#DT_>%F&)T~Up zkW-P9?^!zE$&~u*C<}?-N-|gz3`!$c=QK6<=fg#KVHzy5;g}Bp!NB8fommXc=V*;F zsaDKx!H2N03yetFkKt~vK`v|sB+SA7*N7>$RL;Sew?irG9`r0@xy!J#?PyE;(&uxN z5dwx5lRbWxU?7H#uAB_ZbzBEpT+i3d6d9BkL2CcS<*UZ5_cXPlkgfyRGnIAu2~lPG zz8ij6y;}!6eJu)^;nhaE*U(A_qc)s=?f*=oSOMl|IN%JIUrM)q3_p$nF&)0^g?*J` z4ux{~me8^T%2>w(AB>`1DO&?X{CAN1{)hiE`{Yij3U7}z`X6#gpQTPw$!G|ct|v#` z{-CxwD7L(6Z#~1cA_*mW!cU}r5B+52{Yr05mPF_QjgR?(eY_Q2?)vB6>;B~M`NHY- z`wx{q1t1#Vi4QUd3VnRAu^mFqzl<^6D)dlZ^74HGV>H-eC`#x!ymPM;`Ht2XCF%i{ ze_&&%(ccylxB+V*RLJMjagj>uma*IUFDCJo#dCbs=Sxrs4GV$v+6j{u56M4J@-KP<~)O z66!lIZEBEw43R-L@)EWpeo6dF0Za*3D-Udf!U4qm;e0QO=Pis<5zHSbw19yQa??-8 zX-VMH2)arhJX!DMkgU2W&RQ_AdTNCJcGjgR$MDT#IuOGDqGm)SN-0< zKPhjwKLmQQZ4Ti^%bD`t#yZUoS0=sw6Ra&gP;3Qg&^Csv%dL@(aZHFn|x&6i+~NQeiM*GvINkudmCkYjJ??ZfV#&P8t! z99?Pr*LPuN+Lr@ZEe6{T(WtoIN0YZ2kU8rpfay5P9nK`7Sh-qsk@CTe{=Zqf?%sXH zkL<_f0OeQdTn<@D!Fx@U{>2_Iz)kyb;ynI%jTH=;ekOl?XE;`5o%JQ_Rn3!NZQrb- z5hyG9sh{L3&u7Bh6cAoNgdD`w1eI+jTtf$%*K*t6vt20T-eY+p9wRI;a1q3Wok)j) zSreOb;9qbTVE*hcvDe9ey`*H+(-v1Dz6Ex?&RBA?143&r3mV$x{)*;tq3ud$>u zy-CDSiq6}&l&u@gDgVhXF}-V^J$@TQKeV9CCveIcVEt57JyIN>FUo^$i}n+Lf*>@}mvq z1M|s1g~m2F|9y-o7>^SP2FI1+)gXIshkg>?#T*b#zbv4-<2g&H0W5t`p5L>^GL1Mp zPBiC{+&N(~Uarjl=tb&Ops@tDSfUdwW%!eYt&~4ncg;yeXl{e=0hktF`;O}jH; zoHK$O@Ve8gnzUjZ&{Lbi9?2oq_^v@*?SGH)!w?;y_N5$dd-W6!zLU@Hc;r`Y8-VV> zr@QYEvs^QnR9SYmblY3BQ1jgD7l9D36Ow}CPt_MZJ=O{p>Xe>SWMzGh1sRx*_yXhF z6{jD=NKb>9Rit<~aM=VcAHi&tcA!7W_~mq-*HQ2nR>M0ZNDPDeurn+L>PDU&^vDYy z5Euj@tfC&@4ZTXxa|{YOEUM09DElqH%9Nja$1&H1B;o?sKF&2*ZBHPe)QdVY?%xT{ zp(iLDK{EewKF+WNRrS&!g*rgxT=S{!6$r>z&qb1jHYFB3MjLs^m>Kest5$TbDg9(C zljJBA)g^)}CX{|fVf|u|{lO&%LfHAd(t_V3>mU4XTpOH^FlgA*wGu#QpUAN_y7d1r zY`gzq*q@>QIHSUs{pwFxtgM&lj)f#kl`sa0_(sIO`N0`9SL15Q1s@E1_!f-13GLZW zZO~IYHw43dx40;R5MsjNfill;Q=Fw(?qR=A689z)tvZpq_8iKI;z?|YZ>*S@XR%ey zgxc&Fd<5+B984|pq}$N6xG*r;W)(;2hb+71uz!QV{^I`!uz&1+3Dej-@{ea7^fjByl{lFU*jG!X<(`7wotj&W0*FX!+HWt7;3A z7;>lsy*s4Lu~LfR-OrHaBXO7)D^4`MdB35_!kZsH^7u4)R(saP4H@(m8XZs&JPO*Yv5k zutF7>;H)7r&>HK&)heeSoO(GdL#)<0w(8yJ^*D&L^v4X*;dm%efXjR~uaa@w`t8*B zu>~83pZ;7Kk#w6y$+g~u78S+rvglxERm4oD;{94_mYR~*Tq4$I|PDl80dD3ER-{W}z4C!ybUY~t=9=RaC zaTO3JMU(-;)sfN ztb5l5mH2A+fHAE|0Pjl5^u1?i-$;WCnXelx`Z{ z`7-M0jndJlIMz_U6-if6W_K^P^n&UM7&y0Crrao+F>7CHjR=u}4`$5-2VNGkov6eKT$=2pp5x%=hWbv z5IDX^Q%(bzURAxqMxLMKtDH_kpC2|D?y`);{*ba$8Y9cv(8jcw&K)uo)njp7!*34> zpsXcy{O6PAUFoQYWKJ=bjv(bJilTfqKHG-GZ@!;}O1W(h7h=&GD+w*T=POR5+JAhx zIYtffNB*1intZ(#(5COSr~+K|UObwd_y!*>jqzO%=d|e^HmrC39pJux^`T(a7(tOH z?DA;YYum*A?hx|kl?VYhlAHDnc2QPUq@=?-fw)@MfHYoUo%agC!{mQN6=eel;Kosz zo(p8b^2iNh?i`F1fVK@iQuM1e^~%SUsQQ1mu<=@@KEX8izd`OxLw_vNxhJp}T*vUw zckr`qjDY&Lv({N}mOW`(PokXi%({$rdnug? zz{mu?h!yIhOlRUZ+lf-yA*?H3o|C`oeSb(W`LJKfUjH@=2-l1`-X72XXD)mog@XY> z&d>`i$^LA|-THD|jBG<4%#*8>kCYFXx8RrfBjD3@YiLya*WqBJ`RpBuXZoL39~vC@ zWzOrGPr|&Q>E>@`s{1N5dhSz_C0ZxSW;OwtZ>6FKpYw+>s5_nViWf&`2zP;z@{C@g zVFHdCa?=jw)Oz@v5^I(_k%y;e#Mc|Q?WxDCnRHSV=O4^LzO|92q>*0-91lS9cAKu#=HIWTddmUr&)!okaqykSAgY2?CC+4?S)~O@OgChq z_Xa6fhJxGnXugO23?I4=71vv7Vpi20tD%1sME5E;U97741FWz0b*ruBUV>p!>L%3t zl%_x&anV#@LbgIhqkM0R=e}sqz?gyzV2F$_RIwS};dKXHC|VjC1eu@r*!ldAR=n#9 zY@^wz11?!fFCW(fu~nBmpF3}vMimtm`T$I%AN-p6y7&R87S20{DENSuPzYFYSLT3j z!tH`l^ycVO^vp;?!1Zv?J}N*jvWEQ{D5=*MnPqc zLAt0W#<^fM^{qk&Z}5eS4VmT}#yk=TScxlt5=O=zD=BZ3P31nwqZqmZXilq+#OZ#` zVTRyyMdg!~OoBwjpQMlN#w9A$Y`^!lJ-=u1+x)e%IL?c~I!w~Tes6U5^P?}T2CbvQ zOaGWd?B16Q*m&m-NA(>JDWv(A$DMO>?pW% zBP&7Vj!m$-#O+G&?4z^&r4EbZnjD9Y)Z7fn#(sy}hLo;HZOM?~*yAJOLg4Ul@w_>; zjp17`BgRyGXX7AQu41WM5RofZ#yKST^0w?3$T`-r1R^hl;PmH!p}|A`7uY&yA3SyC zo&oAJmG_CQSNU2&Qiud1tf_lei!r%@PrBuEPhmNNOlbM+4h$ao~T$S49x(SUNv z@Gw+erW#<3jJgJ4sQ-yU@fdS7*n@pj^QMRvIvJAWETcr*$3qwASucA_6Q0dwKU-&7S1y`Nm%WJ|c=U5TY_sZ&WcE^ZaudrmYzIZxk)L{{|$ zMf6T0vm|aO(lQ17v%${0&l}l!GTjOf@x7U&xn+;(J8{|;v6vu^JPIz(r$}sP2FFa4{H%K(w0;`GTqC6(qyl6LJL1n74SYMSvcvZ zu6OF2@tuV`o_bS=U0H%*Vv;R1t@;^)IUlJ1$R}K%6oj#w$SzY;mLS^FZLfNBrp24?yskV>OJ@K>-TH!Cj42rBw~VNGG)Qw$Joy;mwbgWEZM%iF@Vd1sdATe z7VA{3;VAYMHj8?ycv5rou`tcm{%N6ZhUGB;`Qr2_$69M6YIZ3>i6wRE%ExVh{^|v1 zab9OQ=^#ThN67(4S?y{MN%i~mEG3T3^RGNtf2-O>v}#``Y3m1A%GvqU=Tem z)nw2bOTt&{PR&G0;@DkSp-$!Fpth&X)o(v(fcIgpI_o)?cj8RBA){l3ag+aZiJxEh z_V()WD*Z73pq{}@g|hzm{8ell+ODZP!Ce08W#{9@nt5{c2~dt9la%mS`_#OasP!%X zCBNKs2WC8vxVDNX*Mh%t&GOv3qym3}y&{iw*Pu1hT$<o3+~p?Dg!$(8wqL3Qk_59QA~dEoarNlD53 z>`4XCV4y@Re@BM)SDYDJk%-&YxR6teV6+0oTm%?3?;!HRxbf>x2QBa8zYC+IPweI= z^3+Z}7APf@7&W}n91WbYUfg68T%`eqNB1~UA{QJ+mx!1!Eld+y-vbQydj&8;eXye@ zGi&st(djaQ&Y^|pmnZ74e>P|>^FypHMzKXtlA+^i zSU^-VaGc zjVrFM9b2bgy;uns^^svRPet<$CXT0uIg>H|%sz+Ns1bVJqXxL-OXiU(O}cMGwjn8y zSx64heD`b(B=4JmG3)*1o;tCM!tVMf=4}A_{cPja(PVn!YV~8 zgMa?;m~f17DzX-;ACG+c%=OlCBjUKw=a9C$W2t5Ov`umAm*FKsZO1+P?8fcrlFwMCyc^<_EyakLG+AY8TL5u#DAX`{DP_xiE>sR36J8qGT}S}8 z8$Km1Nw#bHG;++dWg&PUN1GZmS$irRZ6JVufC;$Ym+4jHy(!akQ_EZ=g&Ge-NsKb; zb!E%`-Qh%u?&1sl%kZ4q%Z9~$oT=LO{>MKC^BNJR@EJ@mvETl z?{9cV{mlUF1dA{2aLKH()cTl@&`8riJ)H&(4kPo6rZ1sFX}cfXx%w}$kd99^d$6%`|q=ynw*3>IVpAF`&Y`A!UY z`*Y^wSWQ{vQ%fJa&EM5amnBV$wij< zmo%{Qx|GwDQJBNfE|#zRJ^vq>{u?J)6^t7;XjXcW*k=qhA@zNo5oMER`m^v#SilGD zyRk;=Geq`dB`2sP4rk;iTZ4!Yl4u*ns!Et^hxqgb!TS-a5E+uZxGjUQnR3 z8U@+Im?npHfx;!KO|UJv*CxY4^R*d;%aWYHP54`zc@x->B}v`mZRl8mitQ9JByUvD z7cXMD+|xT%nKNYIaUv<)EwjMUXG@}#0umBD3NDk`ZqyZR0QB^lXS2_NOPVzXko5Ar zhh)Gf1x~M33WwdGE%EsLRXCziDlm;Ci}#u%8E&?>P~TuvWX%42dwp_guWE5#ymqO` zmh>(sljDXxw-tljq;V=eSzo^=W%)+oNfTP>Ki~H0UyzcDNyXMBblJXu3e9Mck z{0oxOMu2f%%tDOj<#8HEh|5Lb`Ru)AHGk@Lwzq0^VT1$%!ik|QkYdKhI z^{qc%Pq~UeFu$)Nhsr&(lDm)o_Tg1!wG>;f)8Qz!iPG<9%o!;;BZ%viAj%(4h#fxc z7tuWm>k7thMJKx5y{^#w)&W{uX)$za@nxHxrM3 z;dyhsOV*h8mnhA-1D}ikbv<(J$VSH-P0)QNHGbvSDLKVx@RR#@$2Jvj2dqAqxE|Dp z!Y4@0;w5s5A1B*QKUeY2(eRE&EbT@a!({N4+|Zh&3g6l8T$alE+W;pAx*|x7)vxPY_}r( z^?iyR@~Q35Pk$xiPc@&L($EtH()31x72oic7~f126H9*WD?6P|-kZF3MwjStss?`+D3VuwZHkH2 zMEw~fi_TO$WIXyuL=aHQGF)6cm^<09>x2My3N$1XS$+Saik>789ItB}#dGUF$?m=g zz+G2R_2)1nQr}gvB_Rx<%Cch5DV#hZpb=8p5&Cs5#%)!h_{?r21wa2pD!-^dBJ}Od z*<-RTYVl?Phks4?46A)5$R?~nB%8zw9YJ4i_|hkSO8e`ee!sTQOaHicitkf2AiGgd zFrrSXc#w6qTVe=2KGc;H{i5C^FSaFI8NNgzk%=1~WsP3GL3wiiru!zO8O>Mlg7=DS zy)8;!(;XN${%`qz6YP!X@b5IZzTLkgFkw=CIr*)~j2E?KC(m3ZvI;^-E5~+=87-@MFJ~sR{1UBesizaV|29 zpQl^=h+*@I_5Im4?7|1SMY@j6U@^UxFghEmss(2GkRAj;$SRin&cXm|63U|%(l*~` z7w#TgGJQ}nBgPvMw~nX3n3d2u-eqb)hPh_t)Q|%z*+Q}IFS1V=)PVC?AKVWz6qD?)_xtWO%T9e@F#cW((+NUga&;4fk)DHSoSme z+g4zsY_0f4x{f5_&~B<#nUm$*Y>vqbnf>i4SU7|h|0>u^@YLTTY{Ntnc!QJ`q~T5N z&MwR9Db~~Wd;(7?LWfrTb>*a3xGkuX5B#$ZZF{4!Gfee{-m&;FOUx&fZG&4vvMzk_ z$4P*?D93k;#|QS~mC1hEt-F1%3cvm3JY-Js>xN`Yn2xtN{?7j1_$wSbcjt7^upDu% zGm&2MVPdQR*wI^@`EeQ`y=zmsUPXmqxqE@c7j*t*g$93@l9`6e-2XI^R_}RK8ENmY zh?8_FS$i8p62~>tYk%ai1+>qtJMZ~IAjBWy6eaFe{+%+0xpmkjPm2{U1-?`FY_Qu~ z47+vD5nT;PDy@B*l9-)YqR932zOY*rmMhYY-F|qNl7k#DR6Zw0PJtH&jhVpbCT3mf zkpzGlJO+tX6j_K33(K(0sIr=x90erXGZ={f5)GV|<9Vk*WV$v96bp!~`nzREr@dQ> z3Qds4NIvTPjI~<@OVI0G9p>7DItvf(?U;ZY@OgZerc>29E_Xwm;=UThHftk;N&0Pg zSIP5L{~+*NRdOm{r#BOKB$bD^_HU*I_-L!k-siCt6iL#MUX}!3syKQ!m#PpQfN7 zKKru2#A9)*Y>9$|jT~Vp_d;xz97^bX+ENY!cGkaW@(`?Z^X%k z!n6E}mMs}GnveSgPfXj_ifFr(FW_4TCq~EXDnDyii=Lf3A8t`XeU<{&UBfXoaWeEW zEZC?e<&)*-hbE=*mEsOGgNe(9^@sPAInuGe#3zWNNzrDfBl~^qci!r&7hYwH#&c(g z1ZFLca|rz_R;7~NwCZv1ZGb+{@87<5`wd(qe?MR2SD2#m^&CFE&2-=E?r>k&pr4+Z zSIb`Wj_kt>Jc+P4BJHkzu_3Y zSy8uEC6_K%EzhIQG&yft*~RtTJmLF5Sn^0hpz7t`o02u6>SfA%R*h8Elv*v!>RG(9 zTpsUTTxqNg%twF&UQT=To$1x^*iFF@r>>w2jfaOPc>h1lmIngKz-oek`E|?A&xwqVM)VWdu3LC&k;2IBHk9=H z2U0TM>P;;`ebn|mJ~(YmNl<<-f6w*%EMG+$%#-D(8S{4@`eLmqI=L;03hwMaZ#|XB zu4Ad1V)BuF+4qimX*!n&h9dFAi?%n$Z_)T|fCLhcxFh&PaGCykQ_Gw zvJH=%#nViI;}NGop7G2=%o-dbvi6}mq=R(9xZ1d&;uSgK9)-GhE7a8uHoH)|YW@9~ zKZeH$9%Rngi*^>Gi^RVREA}1okbO8$D{%R2c3uvP%cuX^otu8ICltd|oklF?+ zy$%UPZB`<8zFNz2 zgMKl~oh_R(Os-5irMbI4`J&={4O*US_4Xr6`ezzcf*dqf}z8}P8BQWCTlZK4(^>y-FeiquVdJ8)d z25t(*H|ARj`tSWI&mcF}zTS2b-nXCcgJufZo5>RDPH!{12oBzfUg>QTN+NwVtNqw!~OqM?R&Dg`8Dp8#- z%mx4HKtvKwe$}dyTg~AdNq>PrEn7%N+j`aT&V9qx>Cq{vuBxtcq!rOeL_+_!eW(T2 z!=iA3&}bHlP@cMiHPial1`f3X;{rO2D;c(ZY3*$S)oq3wigTEa}5<12t`l^5Ta z&K3_|Okuo^&iL^dl?lg&<>w)PVotT0n9+;;snMUr$mO6VXWwdnZFlo?d!H6y};t@Vw9O9p5e1 zyc(sR?#%A~=U^N8%kDK#VB3XgRUFyjZvv!)P+N|!u{KNg#=i|>e!VTp@dl*&W&$5A zeDmm9XKR0#6N+^06h&;q>{afUq`G+xYj5-v)^`Pm$QAGTIS5IMvvXtV*RK~RoxYvV zKn>NgH+dW7&V0&JT(goU#8W_oY8!6J$!H$O$;cuXmaX6ZaDm3p&(k)A|AUdHikCRK zCZ?x#pW+w@tTa%hWtrAdr9e{PU2l+c(F|AGs}91O&XK*^Oij=fe~rPMH@}Ky)V!&Z z8Oaxd63q!l|E-b{460ztKKZRlN`JXwN1Aw;Pd)nYhlyIm<}33k-b}xIc&0|5xKnmt zG>IEp4m=wF)qa}$y=brxEhM-lc+q6)n+gx)RqT47!0+F`2Y9k8d$8htpJvNTP{2>d)l0fu_Ys{pwGy z;_$>5?P*%#P$qnu z5H2^-q6vM}vGId*?G^)KfyJ&%TI+@ z|56DPmxw^+KH|D2I}VKLO||lU>eTf&#AY7wjTCJ-5p$foxj#w;I5|0X2UxQUps$Zn ze*6eg7$s^#O}G5}{2Pl3_TMDlgrV$x+F3Zq^GeudIZRe-JujjT$=iNGfR-ov`=Y7} zGVi*-U$ql~N4Nq5CE;yfXWqTu+pnsEuVSyjs16VzHk@sNBT=7jC!rYz@r6gJ0ivd;F<;$5|rL>qK`v-!j#XOQ! zkFPzePc~1|i?s}`1P_;*lbc0vf(Ar>#Sx#}90dSJtyh0^Wu@mf#~zTGx1Pf>{_$mc z-U!|b`UvGxe>cDQZ&h%G;amIDueKpW^JBK*#)p5;#uSACF`$l)>hYaZf_(~1uJeL+ zz5UmV&!%(((xJ)+C6h2zg2+^6(~W{q_}2nSlz3mUZ+bYc*W=ow>$0KwxMu1H8<7GO zlaYQu^82+WX37$Wo4VZ}@2KTJZy$(}P!>fQcWL@wTLc@4#vR!Hs zcqj2`UyJGm;e8|y&o8+knuN9YIIjkGlCcU>c{;P7F{|-Uza!QRN5R0X9YGc5*isV9 zl|C=$RjY=Z4&nx*)o4n84gD=lhnXKsXe;a^)qR2$fP%9PXQKqO!Leeswoh4wzx}~( z+o#3syx^&mXL#*GuRU;b!K%aZlsSR%9kbai{3)emyi}2Df%J25PdgLfrDi4Un*z~4 z7X-1T{OehGDqol}QM@-WCe8p3fW%&Cv6fuKmh5cL*3(z-Zo4E8>=0}2?M!?uxeUDH z=#sdn59g0p`z%x}SC8&ozL_y_^IUySH`ITaHgMCW&jZC6-*MA@u~Cv(Fa}U296-PA z|0yqxrcRr~Mivd>kCcon&G{O21|^|Rfh3UiKgrmq_3LoA3vEOS&KzGT%)pL=s^ARN zKmAS+SgXefEX`v?$`RZf_Nr(bpy=-lIusEeYFKCJ9zXITj@~#U{(B zeKd0;8)A5dQ9y_m$agTwlHnU1x_)%OeOkQG;V#FM8P7q$U9f2kU~^T%tb9%`uwF{? zedAmWi@m-rYwo>tH9e~B~n7#E$=a&<9Z^=ChNg4PF5+1Sp@?np7h7fRAY z^gJ_z5sZWDk+orxkp}azIh?)@N{@`0CY^6lDN%#EqG20R{erzZPid=67UO zjmW3AE(ppWig*tLebu3hHxT!tG*8qASi2*5E2Czy)$??7Q?R_6BJ?R3V^o#1y4dc^ZN(w%npB8@Quhk|#`IaW>iI*27 z?gfB)A5-NNV{cxyEP*gn(^H(*n-QnH2vg6e_>`|A^~w$61bcJ6m0R+F9u=0!FHo^? znzuEXMxyUn#N7Lw(0<+SmF;%UnkWhi3f9N>`5dF?Rusk=Xbujpa@RLS?6IEtS$SZuc;aMX;Ebo%eUzRkU7I(4Fk(Nm;cx8o3U zBPyJ)R*jn*MjutDU0XP)(-VRV6Q@WIz6MFUplm={hyE{~&N?iL_YL<7QW8r_mvl=v zD%A->&=@=(-hOO$s(xW52SvCE~H1$JG0Q`@i$sAKO!oBecW-a^-{{fvkm4% z3tY9x`cLW~-yG^ZJ5$2a0(DNb>hj@hNX3?a)CkRHB%h!D@HurUxu-t&^)$1rHxaN( zQ9(ok0}ruwu2|N#`%ho{%Qw^DcSEEyF23Sv8D={^THr|a-IHJj*kr+gYUM|d?MYn; z)nIhv-ZV|dM?+Ji%4hJZl_eOQJ^*gOsbl$XXEL!h=myF~kE>gUoIt6J>U8{~ar_uv^IM$PV>Jmv1~JWaN3$WylX_9&nex+HY*!!*iv zJfG*>Q114@#|Jhk55UdxUr9m)lm3C)9(&NXPoF&_%ekwBEne*SL4}zv-zm8AnIGdg_AQh!D*AF;B~vrJWlg&>zit zN;Bf9F)-Eew$hv%RUV;=Ta%NWlU>?@ke?aYD^k3qP+egQpu|T#|1oErA-?L4Rq4rV z{qlEm7{9zG$qF$+>zje;t7%@kz7O=J}@keXpobox1*en=T zdDiR)4R16D+HyH=;k3a@bKnB#w>aUHZ@Ta0Y;9t1v-RDQ4QjHW?EH6^jkZg3158#D~Dh%y&CiKsUo5}}i@okHebve?=*vA^9jbuT0% zcbBgi$G^bI>Ut|3DT$^Dk9`pO5KIfH!CAy@eFX!M1f|dYo}VMXY-WMldf-%TZNHW?89nO^X;989sq^b>g?uxs ziWMnfIPwTqgREs|&(mNtN09Y3NYki4Akx1w#^e98R6a*J4D>&5jh=*RB(N%=S^ zWD5#8^+AkyN@x_bU=>UMDXPUh?%u+2vd2@xY$c_Co|ZJc(!$tDEoKvWeS{xC@APzY z%upBGZ2|X62RdrQkj5Wq_qrU|r;!lqw12~&Jkq(+2^Jr%#?ben?4QL&LhPfL>Rts7ld@4PT4lU*9WtBzuEzrWp5bu8 z-Ge=%j?>jX+SN;0J5v6U`(WDiaq+pN3t$SHY z5V~8OHQQKTnZoqukIE}E8ELBadSTZvLJ|R?GLLfNa(~%R4ecp%#&A6Gx;47sZmXXe>jmI)sxBh<`S!ZT` zYw6Vd(H3%=y3$9`NS;Vqr>-nZuJw>EDtT!5Ou~P*0^(!r-o=aoH1#^G=d{GNFrm;> zW&bD;ZK?iL_&}MBeyFWgM}%wnjY2@9oYNJpp*)JR>NBmHtOS1<~k4!U1NYPRJ_peS2;2=FfYT3eU zoIR%-OOPeb@gQlMtt~=O2WnR57@HYgH66#rIlZv9c+l_!%BC7y_}#lCj@MjbYW%Y; zt6w&-)cu_HCde2R8O z2|WqZG}+l$92)FE1KA~93lG(^kHItpWZW6-_@&4YWMgtD%EeMn*( z#q>AqTjYe^;Z0kHD(xc{1=`R#B%SLNt3h88Gj1K?hQA`O?>>DatIgNIMVIQ_@}4LB zg$uU9gk~uAsIEm77X-bdX76ExUkl70f1G=xmsJQWg7Xunw= zmyA9euGMvLFl||wE8g>(8PL1vqzCu(69~ZY?{&sQqrUCmokX|N+eL;{<5+)kY21=53;v6<@qKQXXMTl9e^X|Mur>rLg4y)r0FB3_an%r5Rm5Wv%YI>`n5v<=g=6D{Pu?HCx zMe1uG81W2yqCL=|M=$&DZx*me$q8(nQ5QXoxC?ZKN_3Wln9E36~AExVZy>iX%+)?wo;bou*=iw*h z{l6{3p}S@h13`bNshvunz4MufsuGb&CuS~L`26^uD-*Y-oz%(7yYgxHzB}SZllZP# z>baR!;^3$y9kA9od9fEMp*}d2Y=t=fQZY@i$!l+HhSwvSOdJIKG` zsxn^sRP8%|lP-LA5=vGDUCKGUe6t_4zkvnHuLO**C}C66sHY3Ot~w3tcyOaXf)W(u zO}Y`{8)t-#DnU=?c#N^W7}q{V_M9SN7aK8W)2*XzT`qNHo0#qQbTXTsj+L)8-Z8^D zop&fiW({uoG^J?w?bi@hBpaLT>GNvKPe z5JWOHIWN615QIJBeY+`CG3Sq@HWWXlaa?GOWsYl0GlPeXO=Q)UWq+hT*-Q6Y2ieI; z*yxG{f7m$N1?8d5WVSI_z|L%+ZA zKjlETGvvI!xR@R(d0wK61Vtdr&W|rZKhYk@PA|@qcraXX`Mw$S4k$23n_~tRYlncw z2&pT|@97cdPI$4yRD(%hA=mHszx}}0D-!Eh_fuA3*2S;oky9#JDA84|zrtPQ&kE@+ zfq}8?^ZA7$$Uq9o?reHN3y9=n_L#9Sy~ktfIXb#@D|fxeW`7omF7ynOm9(y|s8JMs zpk%?h_Xouo^yZ`equ*{QTUsW+A@k?VToxS{ySRvJuFDxMHgNI<#3gG8mkM2+L=uD^ zf3~>?cT2laa^`D4jO258B@15cLA_t65O$I8Q0=FPz~+@lk`!30f{JsXbrDAaNz4LP z%_Z$IH9ILH)T0c~3!tTs%647GnKU=?GA7UIU+p4(7#Gp3z)F+)&a91Hav^M7f#^NS z0}jTmCRzVOAObE&ayri^Fri#K@41e`=>r)~=d#UyDIi9tsN^5jWEkP9PIq~M>fuuJ zga;%5`*69Dq4cxEAhZ37OGg^jR?ni^apKP+QEjS{7r9@8V2^&EYP!?`OSl-2K_hOn z#`F6V9=AVb(`gBdu7RuAXYie|a6x=UiSs>)n#6xkonzdko8G_XyNT1pJblO1B7Rj= zd#Y*6d@&hgdW@E#$^aEFhWngV=EBm8y`XIgRTa5C5a;aSzN~llsFLPL;NlLC!0i?@ zd24ZkM|RjT-Ty!uja>_UM*6q-YzK)~eR#HW_TNZyu=)*kflA;f=)j~@V|7o=pvlidq!sP4oTylxkYPUaQjk{lV6V<9`eB=()Azm9Dg*Gu0`|60si1 zX4ipf61QAT{}N<$LatQPO`9lg@RyQSqlL8yie}&$6uM^AS$5m_BUB9mGUsF4&cg`!Ieh@cSYY~e? zStB$5Jc)f0Skps=IY{uDWC@iB96$baKU|}Gh>Xf-KeaPtuRyZ##Luy++Xa92jEBKO zDo*F$X9_F7a7^*DnB9E8qoPZC34GLqh5aLWeW%9rU~O)P%?!CQ-nVEqhHL6BC_Pha zs9C6@Y9)_D>s2;XdrRr+L>F>_bN(btbDjk&lxWfU3q+?0hGBxuZOw%+E;5e=tl?MR z9ya%~G}s}`m3B+m$DK0)@{q$RmUgHjK==J^m7P6YnEGt6fUwtPp+#liC_azmjD_*_ zu6wLz;T*hG4-IV@DtPe#^v_}tHf?<6jx;(0G;Oa3Oa0q>COp!WR^c{133F%q5hQ!{>eM3w!hnYB$KH@gVSYV>0z8T?MH?~3IE2T*f z1@%ufXvJ_x!YKit24sMsO>C;OM2&XS5kGofe_F0Fh1OFlqAfYV9uxLomuzqe?ATbHVfzFLL-@%;Jeu`4?@MX^6JJ$(gI9xvO+6UB9nW0H$X8IN1x0=m3v*wZ6WG3PU7LxX<)rJXc*}yl z^ztMIx^N5%I4KzW=`8*9aS22|j#z|4&c*-XyDKmM#XcDag}E9U1+p}!d9xh)BcXtl z==rxwUt3|Q>-F`9)lJaq>-t}tJx4Qh-rars%dZQ zF>W`6G5OU|f&hIf2<0cPfwJJ&KsQCOpM5l}0e6y6^$ST7czX<3=|}Ma4{6+$=R#MvU?J6?V@6Xl)FaL_LN{@)JP9u%d>WdAiz=ZC6AG)>t zGj#0QdeuWFR#Y?O7 zTJytRZBOIaTZPLIEyJ1vR=JfKj`>$4;OC+B{ty0|Do|mQJLk#Ibh`Z%gImMQG+)69 zwX+PK{v*^SA1+E++WE?)ghvf6S*>f&$BoOuy#ZK%kLhP|gbe&>qg2MhYDQiZO6HF!(@UpEGI$Gl%`z65KLj^^* zJPLu{YsG*l!x~0d{(+VE2+(4BfyGiu-RXWaY{QuWGk;)?QSlG-BjP`L-#qyu z#8VJUc(&hxpw&Yb>V{nGtpFlV2CF;F^-Fw+8a9K7{(HwZf_?7HYlvZJrf6y(#vl0#Zqu7rjUXt~f&Di; zf2^mm@tYtfH#GLcfEIUe@uGj`e$qCeFV`(es<>BdS6o7j|n=Y4Y_Y-1Z{HVS#A6iPFcwye;X zP|LgGc4=6}J9j-ByP=lbm?Y=%f(8?*&8$p)l98Q#6Ceg3N?FIu4>^+~XAb(NxdU5W zw&Cqkvo`u%?~HwUE~*1x{>h#Z*@FwUU%0oO_JO9CTRkX_rrm$X_grD4e>3e$ehbDb z1Q2yCF*K6C@ynvHHW%*~CY!vmZsvhkn6K(CXbSr#qxR=i)pnb;5ag3hqZiiW{&<)_ z>7s!@k!@ei;ym^FXkk+zf}+=(n4_cjjvw~O9NrxfuM%(t*9UIYRa=T`Plr9hgr8yN z>#TRv6IPWZSN%n`a)Z>0d=nsedFIOCB&$vE1i+QU!mizszvE*CK^SFIj0ubpI>Mln zI}R>A4XTC$V<5jdX2ERj|IRCp@3&#jF8k-0{~<{ZQ9|4J*Vp^qDW=ofCATQ=Jw`tm z?|OsI2NAV9e*$G>JiAYUgXW^B_WHf(D3(_ygwN|Ah?g2ye#TK^de6#{a9rrVzsqQ( zFF|mGhcIR~?uJOxsg66%D~_LAE4_LpyVp_|y4#gCD}t8I|C3CX+EM7!`3xbW;msE3 z)5*VPzz;`W8VhEr9Lsu%jWXyBCUAL8SHo6SpdMo;*$j{Y!dPX;?%1!6UZTj^BMMwN&N7IYsIAF)1`=4()h(TdI+=8$B$PH2*Ez@}gJBpS9wxHhX*lwi37QaMU9e*m`fI zL+?sKQI;`AbhI74B!&*5x5tB}Hkba4227VE&X98~`Rk?=I7o&(a#GnSC82E7rLO|! z_xUKRV5)Bw1KHzkD<-ivY{;V3f5UTcDdna~tmN1C~{TYOKwpGCgUBnWwS9{sEl(NWuTDug;x`J#rnbNflHJ7Q`qXUAtp8 z0pQ~pF@C-3&h>ru7(7uZO%lmHa^E37Z9Wh3O^@@3L+@jPkaicQw-W=Kf9xx|1R^}2 z5Ni4?41|j814h%TXAN@iN$K@lzP@-g6%zDx8mKfPGh9k4yLoq0KZWk45+DR=CLGr@ znt}Qz?!wStPY8DYjC4;6#+blYcku5w^;vODfxoN#3Od7JPbv^htiAO0{X9=W6S{k! z(JGbJ$f&PR=;QU5d!{2vgtjNtIrHL2K%yT2^7v6p)+dGQ^r;xDFgjJXuIJBQH1Tmx zew>b&@ZvgW(>|+>LXSk0708WOIF`mN!{4l}&d(2swN(O3%zb~qK*#gW0<&3r=pNaP ztnE0~oLTuE+L!0UNSqf~kJK%<_QO8>+?x?Svw*zzJga2SQYbGR5ZKADKQId~q! zG1|8}-D@+?f@|SI+=6No6fc0t=5E1PUg`=(#Tat zgs!kBdz{S8^P)-Yd<*hE%;9LxO@N3?X)E;7xhl(plepub_432($dBa!_3Uuq0qW_n z2^djQ65DHtgETj&@ELzCB^;McaCkKRPujnWz~?^* zf8uRJvpKzsC_SwXV|!iF|E` z-|;}h)~kJMSIA`6EyPx{W1w)O?b_38&U_)D=`SejJ7Z4=e$OCa z+LpSws02&OQiDo1(Bv%BBP>W}_~<1fcvW8%U-iY!{QkBcG>wO*65p)!hkv;7_x3w4 z57}mBxe!NBMR$t5MexkbPN`IT@m&Upauab;6<0WTZ~a_3T?NRv-Oc7@r6wfLxe)Yb z81PUdg2R&Pf6uPsAzFz!MvJsOP;1~E=vu*MOWsNxxWXxFz%@4zH*S;p=FJB-WmRQX zH{*|EP_=CY^TMwk2$Fz1;|Hk)!PYK=ahx8M=`nlnmHtpVkO4su_=Q{6>$O!k*p z3^#vYNZg>gr2|j7D&fLL4)YbDv7a8D?q#Clps!yuu2*c@>2T7WGla^e2Nz(j%4NC; zQbGrz&RR_~eX6Xkjjl!Y8wzo-6df$_j(Xj4+R@H%TSe7e-`wn={0FzCVCO|K2m8I` ze=2%YCZ%NR_&g==&>a)hX1{Gdg=wGQjV7^gVxRUgsyDt;YA*{DT5U8gzoA2`sw|3k-TNwqF08FLp*4o-F zEY*gD3>7-Qeb!?!x|gm-d1B`?ou{B$ozTjVw>j6^JKGPU z6yX|K5kkX|(ZhRHUuufAn&|h8uUDCK@HZa24I~T~oMs|wphS4zqAacdO+(QQbX5t~ zFD^Z!WH5JL17W~&Aj+&{^^p@S2-Rg#L!dzo)d!8^Ft-lG7$EftVrnpkvP@rZq4VGg z>;>3{D^b@?m5j05p~%Z`dgW>_a=+nq;#4Kuin-r$?g#9*bd6tZ3TbdFoLS1HSp}2$ zK{wko7QypL8c;?sZ&TnaHHLz?B_vw_Qe>>;1Nyoj&d0}h$Lkck1l+!w5lqOf^t6#w zEZhKk5M0xBHBckYt4QR6JHaYD=&%jRLl;taz^wSR?uo)FDq)S)DR~cwk?%N$62-B3 zVE9VTZ}2LXRCeHF7~IHnfD|`2ROaM#FW+7g7dX7dv@c+k`Ej1%KgLpg5lUTA2o4Tm zhLCspPm(-wmKdNshe;()u%Zs!-{Vzp?tb=uWGwxbmw1s)V!qVTuV{9{_H(MN;04F= zBzLOp)Na8|p0Rtsb6v?>q{#J^22|NaODz_FtC^|z$9)nYb|0$qd zm!Z#^f--s@zUtmFdRpKZy?`R1^w(GAjwq2~xp(h}o4%@V7qBonoONWSKiezu}h(l>gEA3o))yxsk+KwNDWkUh4pz@c;6iJ zG(!g(j(C^-_?5BPv)bfnP44Xjmk0y=8w5a1)WYWN*{ga&)Z_Q?zfJ5S2=~@+ZRf#> z5rn*~txt`=>EWuZhrBL*>Oh$g`6>Gj@8aa? zqbPTjUg^ONE{Y;g)H~hJ9m1;as4pLAK#Ze^j3kR6QM(WlTL!E7i&Y_@EZ?T&(`8vA-v5m~ zCY%$+ktOtcV~8A-t=s+ERQTFNSd&OAM?G^{!l$1J{Mn@#K7?A@5 z%lbjWlaK>QIO_&!Pxl=2J>c(ep|#*OoZt|l4)mfv9V?k(kWPAW5&Qcz-GAIL40Y&> zAXQ5ORoTvROa=hb*f0LM;9rMFR5}$WzAp$-;+6T#57Ny3yOI2&sSiOH@_Rh%qqDBr z?rc<<4C;hOupeM7{)eBXVFBY@^=Qraw|$W>1r+@uP%R(!Z>39Q_hur`Q3)Y`Z$Yb2 zIJ(<2Y83-V#Pljr$1Rt2&#iXfq6_R&FiXFmD#S2a2RM;>rx>>A;p+Fo26S1?dsOdv za%(2A3is^RG2LpWdo#{mi2l*|GVp07UQLAKlTgv#*Rb!QA4=)so=v?z!rnR2!6cW8 zyLlnVY*poo@!ncRY!-+xY$mH>KVM^Gc|_)k)`a7U3=FgYBOBR$y_JwJ2dmtiz!iH) zFc$R-jz|%diq)he=Dq=#A0c+mZ@73?1J|phw0Gw|d|l9ip=|o>M`(V%if)LyV1!lq z#I&v3$w=`}qs|_p5&D@%DwlK!_<@BBbu7Qz*u=DaCja4|x7P0b0%kzM~LRZ6{8T<9ZgevAD=TcR= zu`)kabWgG`DM^{1tEli4;x+rq9@#?Bh@9QJIDlZX|J;oE=xb>a%U|z+rp+<6=|vHjcULgffE!^gd`!;NniSpGuNNtUSEW_0GHa7f`<@n zIs)FHSv8%O=dl}|i5Ek#pLvwwX-Zt(;=PzW(!7kMr=y2x`{|pQja7fgLs<94m3%zk z(N$B+naL4zcs!aXn<3#ePqQ>w0iC8T*<&8F!^ZacJ1gKkv#_Gkpk@T9OXO9R{ACU0 zB-?GztTK6Q4n|JQep252N`Q9td=j%8bE^8X#D4*-c&uvu@uy~n;MQ2F2{8+Lgl%*D zhA$g+C1fy|xZb$60GT9QZQ1`dx!R39Ui%IhL`;IhE*f@gzDqUzfM z?gn5xX88w<9BUF`dagGfz$Sa|3NL5`!|E~OW>xWvI+1ji1`Fj5IHFIAIDkz5qxvwB zU3adq7H>7}iXeaW26_?7xo=^mzT6>GlMaGv9EpF#B4Pf8Zy{7=&yPiZ6tB)q1mzoe zcu<(Vg_&kMJ36I)P(V3!^X*aq($&?``?kAEVj$XCzlNV7Zf|$LXaN$Cv}930EDnOX z2>yyDa%1UV{bk*~SHv0ni9qr!voC>BjaWqDnMtk8%mv*v$2T9iaa@j;2YP==%pd(x zBtbrwHrwDuno?;BdGq7Ce}5)3I6-dc^V4gAJ~Ca=))Bs5)&8y z*+LTY3h%B||?i1*lC3MC!3sL(0lJ$a~&N3Bnz%I?xbh8SZxEAV7aS(P# zT||PcT3SF~=)JE}0-IBn3H|6W6KCWyc8jERonmx8-cwgs?-!@0G-4#bt0E-ORrQZ$ z{LIAT==D_rAf>UoJtljxZFk{PfDD=&wYR=$pymEBN(Xz8Ad5*PG-X7U3Ei+WQj{fX zH#rUUkN)no;)s3x46>8nK$`;>ESN}Nhgo+IH~zhaD$_$T0dz7b!)*7#(W!XxMe2a} zf-R)=64F$1Hk&}pU4UXyTIELQ9$z8@5!wgQWfBh_&N^oni;$iJhlCwKEFXq<-p!%3 zl>Zf=Du5;9&_l%lwRsFSY0C8e#0r6e3NEP|`Z1T<5Uw#Mo9CRrB{F|p5=suuf6N_F zL7GID7O^c0?SbZFuq(-)xpRnLO}<|frjz{7{mUj(94bt_tA%DF)?A$Xson&MxhR zYsr=g)z$iI;~Xz{(s=os$uVM`^%-SMR~u^=8*q^ni3A3S=D3xz3<2U|mcq%j5!tk5 z==0t0k}t?MwWPr!WgJwk6?07!Myn8};Tp51>_-X+8t1RQw{E_>X&joLf7XlSrV<3K z<6`+5iuylT@!Zt%M^{CyHi#y4oL<&?lwV22^Bn%1c_tgM3EQ`WB+HeR=FnV7I&WBv z!=@7&xEg3|bGkbZyOGQ!XUFHq=Pn4HChij{*Mo%fg1fC+W`3*4sL~3p%1Y- zFu$o3AK|7ye9e+7Emh?{b&c8y?!bJ*%jhBPKK~uMWB8Zw#q#TmANTGibi4)`IulsB zPvkBVC+C=0r!X&$ZF&GvHU&uCS*vLY6CPWeq=9vl0p54+pYI8B z{=Y1M(yohxgM+;zzoU4Z-(O!V!)>&e{BH@^cDrb2r}+2T_)njpb z%fD?;ei2`K!ME_u{dU%1FU&3UFQ3*b)SJ(F`M1W7PHp)+ZJIHo`bCcARm_KJLj_jR zObM6cVvK2H_-~2k$w3Od>052utlYIIWEL=jbFr4YqPVeXRvMi?*!t<&XN2-5z+ zr(9CWPuaZ2m0aP{1;edKo|pGwK`#U?G+wxR-wc}!-{`cmog}E5qe&vrojm%V#c1rF zGWYX|-A}QOjYi7<0G_>*EZvQ5Th$!%BTw|WEv57t>1HWs)uNEDyvegE}HY){Pke+d=^ z%H}{YX6SL_4f<7Rrm)nx`0s){ci-~G^$DAxtGhn#{onc@!gxgDIawp~=pe4yxI;wX zc9wh8jvBc2$uE-&Z6hCC&0LZ4Iw(7ghV^tzL)vf>IFo+%0o@!5z!LE^Zzst6nAO5@Lw~s1itkWPW-u+NzcQ0muF`*sLpfSe z8;$^@?eafHXy*|-@*Nt6#HM_cre=p z_1lLjfFF(LKMGek`@fGP_lVrRJ+Y#?!br?1&LL33fFZ%uRDi(LH=V&gEX-W!ufy$s z=aXGPsugngLK^?Vo+wra8Yg1l63c}fTE<^uY0WvRlPO4WceY0Lf1k1e|4+MsY?lyN zYR;X+1u6WHmH?M3P^7~Z<5F^v05q*tS&1s7eOua=9U9Wq$NoJC@{s#$^P0eP`S`Dj zdU_tk(0*2%-loparbh;b_U2?0h)D8)KqoGGwZ7ci^$Z;Aj_=<+w_<6N2F16MZ7;Xu zYglM(y-$qO&17#(#YF{9;QgSjdO7cBtafXPq$I@1Nzq$NSG7^3b!qT3;iD(Y3W2J> zzTFcHXeDayHbMW-eO>Y)XXFRk2W9t@G>c7W4Y7Lf^m6>Fc}P^Th>7GD2tWuxU0<$J znl7I+I~>3k!Cg;o9x?hp5A?@CKJ)#I&|MP}41NrCHyy95t1Fdt;I&lR%eL2lp}alv z^D$3uQqGsHo`JCE$P`X1ub4WQbZ%~Y4~-Lxsf_o9(5aPWvaXg8L7i%zlKr7%DYPlu z-CQ?rI%%L-xv@cWl1~54i|Ghs*Zg>>zZXxyUNV9HORyH>Jt>twX57ggctXU@^(l66 z$Ia>v#Kz=9*p|4l?1M2yvH=lH@>H&c@D<1sMXgHKmLscF0L@X(TQ&E@a_8PSKSmy( zF^j*M;URYgY;EA(No7|I^GBn$%rEN!D8h5xL=)InF-4*>83cfzWQl&m>@oMoH@-f+ z?P~iDHcmg96R#`1_~Osq1KqN$daSPay+=Rn&9870ho1MW?lXzDZXYYVw#sO~xKORL zDT_?25ZggD6mtnpQS3DC>@Z_dKP?EsVSb0cvIg;1JhKp2x0(>*5 zGX1mWYCP$3ET8-sL9iwE?Z1#;irZ#3@@cGW;d z_`^bDp_y6yQRKWnfM6c^K=h8o4hdp7LP#!xS>R_+G}pYP+mlcH!687K)HqhyDNWGI zLs#~vyrhnYnt6)`nt)r>aB_9 zbC0KcG1)5=0hz4P_UKGSEBj9TyO6R~q!J}W(K?Pw{OkUNeg37kG_W1RQMFg>2E8k zb@*%oS^ZeA-EOwzh@Xl1_uwOtI|^K=D{KV+;~~Pn2H=TpC@J2?g?;BpJ>*{9bqK%0E#{c{%Uz z%=HFjjHZx2J!KZV@j(Ka78r(~mvjHOBGow}`{2U0^aHyE;{#|YcUeva45-khmo#q< zGl`DI5i%I6V+9{tZg}YnGW<{a8)}&*v_p~cWINv$_1F!L8d_fke?v^ljR8U)V2lGjMznmCQ)5#Ghf+h(RAMJ>R)zy8Hk-7Pzz1%GD>ifeh5hX_3T^zeB58!9XQ!LR5#E#oo z{kCAIj*7OlmO6|R+fU_l7@?ih)zhG@usetOjymrDJ4$woWt5DMFg%~Dyh`o>EFoW* zEt(04tcP|ZKT&0WW^MXPz_Wrml@0jiv{rcx$4ifS%5sFPa6OrIwe-Hv{kv+wiY~&6rMSYU zc*G<3#^ZdH`I&^B)oH!07Xcxal!1$qSjPEGS4rISl?jRLq$!7cIKDqj#_CDf5WP-~ zS;EC3tAolHjsZDDX5Y5zdfdYA{mep+WewF^`MOzu8R@>Ph%Fv(55z+K4aY?+LH2lZ z+k2ripY_Cobw>CDYzPjW-W@z!T^qf&1`Aj-pD@e4eG-6fC@2}L5k&X}##VlzPk-`$ zetyuNJ+Ss)Kq1KNM;Dkii^3D}ae5Oj%F_33jl{d^iS!ymC?$i%=@(b<@RrVclvMA% zp#4K%n;*zKae*KNYtLc_kzu1G{;XU`>Vf$h(0C=ePyUO{E&9GdGW0O*@IOEFDhp>K ziMLt{8ns>BJm}mUZ?pixaMSb&(V~9LE5@SJNXiO5{&GPe`mYmOr2SLmJ@C)tqSzgL z)9KOA87NxFNQM_#o0RyH3&?fDd5jG;>UB3=i$R~$T^tNTiPD1=`oKkPvFIBw3j2#h zeZXZAr!&|1@X2(f@l@m(gTN-#fAs3!?>`C5TyOKCM;{j##`;*jvHXbGSv+*D>E;XI zI{9K*&xfAdFPv>TCQARhxb1=jOFh~2L1f7>69MonBXrts4657l?*aZC^dT<9Ya!sTt)_4jz*IVZQ`l>oOqnA3mQZ-P}M^ugrW@06|rsBKP z#hef_Pb5e!R`5llfB^oPCFu3QBt=-9ZxmaV11syL)w(W_=rj7c02wa*d;K0J!AOb4 zwm-Hz2mQH9-xuRhvfE~$Iu+xTXj*T>#d^5xFl+e6OvMMh%EDzs6xHp8w95^Yd42x9 zdFs2f>~238p?7p~uF}63i~Sck*q+)hlKBvM49q&mFnVLJ(MIfr$h)aF_2DmS!0F9Y z>>Kq^IaxGFsqI7E6BS-6&K`pugk%@3@aEHprre|r);RqTVS=F2HxCGZriWymbS-BW@viWwj&hW--ktbivBeKPyI_rS>fA`C~=)ZYf z7H$lad&2v+8)+-|cebARPf?Y6*bo^kHQZOX;*R>g@TtPmSs^TmDw^9o*EMVkGC84$ zLCmX~tuAYG#n%=$7d#0W%a+N^H*3!8xUd&MtzaJn&sc)dibh5kU4$`v-(R_K{M=Lp zD3xwk&vRJ9>JD?;n*A)GdHp}#iv>rKnx#~+HR0)4QX3}0I{g#@x2d|>I0vz39)`Y< z!r+CIo=B}-;g$1of{t)~>opM~?|yVpqP1yt1#CCgjhGF4?(ZpqfFK;n>+-NaheJ}+ zKRlDCeptN-7VDFcCKXNIf3*BMKW%UN__c63g9?JGtXC|8*=})Src_R2O6_DZf-XosP3<% zTdc-0M~`xT7Pn4*cD8m0Ud~xNJi}w^Rt(9FyT`w4L1SXOVVN}W{0A{*pnk-sHG{_9 zCw(joFi;rN#kz`#Qa%v*IBX{_UOMN`W5AdCS2!T9h^XQ(wbl=}ut}HATA6AGd&1*a z(uh7Npcf_-gx_+fLkoay2UFsM^11on1~xkej8?5^S+UCkS56(0yUfU1AD$U1r_^AX z2l56nRSf#|raKn8VKFu>p@4~{;PRESsoXnFexc>Ut*q6h$0@UJ2mlg*)QmhMAir;A zx{kT2Pwf>ob-%GT1Sq^WgCE!lv%c#=){-rTJRD3i$8UtJ9FsFy_s{Hp{{8P+xcXV% zZ!h+Rwn*OkE#w(TF)o?NUzI_TmmO%D$3*Eha=tj;v_h?DoO6|z<#eWrP-m1 zZm40FZ-j&|PQ*rQfOC=?5scOydR7CC(*xY)n+GnsT;H$$?xq{M{}NR6bss84_E_G{ zo3J!n(3h8ZUlSe4Aka|PsAljSMAdYj*d7mu5tX`~-wm{&o%HKgrv|r!E>v?i#90-T zI9>{0=sbFOz`bz>ZuYUygnkB5%bix2-=tUCd=(z`0={YaE`S0Lwz34iUz*}8(ih2@ zyY!PhL44f#Ypv+}x7br`O4zY1b>}K-w1NV0^ceOHe%YtOgRU=Pvfy?^>5# zekv4*Gq=Mc)ssyjRzanjdB?CAmEqFyJ@hfqE)XVMi;g73FktRIoL4=0`t)^jx2cIj z9)^+@n2W9<`r-HNGo4t7D!Tq6jGLkWnt@rd=>2V9)SQGi38eT=*kU$66bB^$^Cy-dMWhqa3^YDYSfwe-kR~9y_pccEH zKpY>DTz0U56#k|VM-@$|Z=*z`{uF)Xm?|${t(({!Ga}=SukdK5aE#+S$q60km4WYh znoBv5^EFXlHoV&mLZ#CWmx14_)2{d(@;e^xmJh>zq%O*M+zK!*fi?>ieugOcoIddN zdPg6CC?ckfxc!I}(Tlw_GKPis#nY<|X9!lTBCjMp4}a8@?OQ7EjgKp6>d2k;1Wn(0 zo~hDO`#z3rLrAF*fU8g6$B&OHBYirNr?zN+kIP`TMS7;S;gk2*z~KG-8)-gOQN1e{ zv@=pEi!Zx5-`4kgl|xz}1~B^wzh*7STl3KwzLX8CJLL|ZXVqo*k3 zqT1eGQMkM7*+^+aDdR@LxNDiTk?cb zdL}7bULxg&9L>->!TQXYGG9QV*A=wZkm57M@>X)TwWkR(IH0o8^dk4er-)!T6D7JW zlb>FXd=W3*-r{a$rKjZhI`F>{%c)hBgvSxbDOFUqY79v z(1V*&qB=#}ikYPHt7HYb`B`|G+ZykCi@t<%MObh@;oP!QU;~X!P(oX987yGM%F(69 zTK^$Ck;us0MpZ@LzzMaUTFg~h!$;9-zmuiLt=8L04>fF{+*8o{xf?2G|L;Y%$4c|A z4n%4-dlJ{`%d$o0^)B1^RHJ5=)BUP;;E0O7Puo z%;SHitg(!*5#F^cDIw-s&E)79qE{Z3opaF#)7w}K^+#ZCcYH_j=lsjsV0}WW1f2Og zP-r}4aT}LD2pd!?9ZUb=*CHO~=>!!0&V?N5j3!>o1_C7pF(>aFt08Iv^cfmw9;+=w z^}Va#5vGf+UIL7M)0i`Y>^Xf62M#Z?kNH{wsqssB z?ErZ_ukz3OyZ7H+hL2@|=j1Jj3eSLW+jCHbt;}nK1XfiqWp6UI=0BCbW;XmkRJ~p^ z64G4)A~_P$B@NO@gGfm;G)Si)Ae{ozFbu=2cYOZu-pAhG=EEFo)|z#%dtGr}zw?!f zqb{B1PK{Po)G?a8tGq2$3F(w%z)OmJ89(fQ)7~RXZX9`=LK2x9K_Z^oWeLX(8Iuc> zD)>Od;%H4#(pP%eK=o-j-=99thyZ7|74}I{@kXJjqbFGTkag(vXOXP(>1;(^xf}Au zr332f8Flcv?g$a15EZ7Aw<+6X&+TzAc1=v?#!W*^j;|mOWt^+h$oIO1-#?Pmi!%m3 z0PiG1pP>);L3|Nx-Am9q-+d&h;0v1|Jayw-o#6&h<$Yk(onv z77+d?&Kavt2+955gnbv|>9OszD*}-%sWgu8tU)Q*T zT-dy1E(LBR&L2!w4d;%}Of-SFzf{D>@P7s-OmvhJ2JZN0&1Yuvdssd9IxHgXxFJaU zHTv?!UfI*vjFWYxSYF}?sZyS!5zj&m7G!74ruXkLQbFD--=py-Y4>h@Ep$<|nv<(! zwP0Dr%A!rUQ@u0&(1hgI|Q1f*KR>eW|sjbuKP-m~;7ioo|-+5rIpg0Jka z{d%8^x*%&xn~4%*dDGTA6LqbjKK17ku#idM#1*2b%+8?Jf(KFan_lO56ow58R$7_K zrIvSXQI=b2-%Nu>O~cS8sNi}Q^F(Zj)!$G9MAQA5E8M#Ifeu`e{7c`L4m^yahs_#{ z)0n|DXv$;*cd}QxOhE>y#CFBsC$oC{sSJ#;0v~-~*~G}SRaYg=6h$IxpOKE*=W$x{ z32qoGSvEe?5|Zdt)uwVUR2FV0sF}jH0Y<~gpbh&dfSGYzIA99oJ}Oh#f69vzEW<&Z zL3q|U$tFN!dT#`9aBQE4*}-zDmw6`@Hbf0_^jTlwjS@@h=7<`Ge;4_h@g-$yvZxwY zDz0djmq>^>)p;tFZSl}^kBr`bBSfIWIZVuTX>P^Ol|_nc;u>-Tb)YsiQnF_oy8gAK zn__&(Snmnbyq|I{zpBc5i$ow0To3*^y)G6Ro>|!1^W8y;N}7`0(#zx9S%BN&D&MUH zre^0LtjB4Q*Us(+H2IPqg55x~{z|f7XqO!{2rOlRFPvPvtO^S3DbOh}c@FlQbJ+G%_8PIwqEa>O9M$t=!9zWf; zY#w1ZzISqW%U;e$b7hzDH~~kdF}t*dS^i7`;RBP^ zk6l}V%OE!29Ds@#aTT92k3qg%m3cnawDSYK)_2E+$A!Hria*VPFWdVtHPP65pwf3?vk%8qqfZY*v&kWgWmPdhlqRyUX2K+qo!sI^$cNqIfJn;%PGSZuR)UN$$>#Upkm4V>8v4I7^SEpJkt#}L7s z&n(YJbB79r*Y z-49<#u76;?{vwYrUUA8y;~6xG4P!4{yI(K-KDR2hw!EUj0J}$45aT?FDc5j^ARbo^ z9ampvod4`rT@R+gf4F&zBUryvL5-6N6n*MD69YS>56gh}M1Cz%BZH_E6X3~{CZ{#2 zr6?-xh_9D=_cOB#4Iwq@>FXyLA**2Yw@2t&bA6kTWhz3+kmoxJW00LfrcF39+d?-- zJW=Y9Jt;(PkqjC2?-z0s%e=!78$Ro&f}~1+aDB(WmMuQ9akGJdXy4L%7}9$7x2SX!_pEc+(0_IOg*j#{dnlt zLYdkP@n6Z25`hHmPpqZ2`!oO_4}Ury4>F?Ro?DGaQ7t!A-}@{T+rIsYe-2|mGZ%`$ zKh(F(%U*5<1REJ0*E{HZw->^~J~+*P7a#77EXO~se=dm+Z+N}`O=!{gFk2G_)v&EB zEsfys^b@Od-xYC>MAO8`iEVLaEY~Uuf-?kN3-#B}bf-L6y);wB0`DFezLHAG+_*Gy zF&EOUo=#9*X&sUQyhqLF0a3#wAp`{kS%D7(6N~*~BJ8m`=P`u}% zeH{`DSzP@5FwOk4E{N%FgWDGo%YT6LMGt|&F|skpcF+kw{e6$b^}XPhYKSNK$G7Yk zn#($#?(Znw{P+QRH?4{j+Ta(PZ(8_{$4)N83&6pTuPXyY5six=6UuLHTSr#L*s{0* zn?G2B@APi6aq$%O35DxwO{XG;H0DGj2#Bp``wiO^x0O=4uo6p41K~&5onk|14mCply(q?yVav;UDr+A%&S}6zu+J(vX-BoCGIr^ zMFe*n3Rj3n@|6aJ6gPux?r`CS0Ld7qZ82O+5pmlJmjTBZr`Lvj1=E5@Huk1RtjymH ze$WXL2M$zYr@^R6(*XVeN*BTa=hcrznsTm>|6D7+0wpW)VT?Qi7YDjlKvif=s~qO- z)#JfCg_bc|7N*sL;#2N@vumAa0ZOW9(28mllJAn=u%d;+)I!a7P{U$HM3hIB2gEpg zGSj%f)J7`x1e!-UJ66e@H|G3wy5k0m5_BtX1a1lt2$a2(Kjc^fuL)h7u0JqKJK2G& zk=;(Q7T>vd2u%a0o^*O7Z3)#zJz`)f)vT>YQ@k?-b}QCQ-)WHm(es<53>CxS9|Dv| zlF6mdWuqXdep}W9hx--hzdW;(2zlY-W86+FG?2klzTz^8P(@2CTnjwQ={rbwfQU&44fL6#0tHR>h2jnuVYdBbHyI)&e$>(Abe8CZci@@rs@3 zN%6=l!xGI3txbjWStU)ynI*V8h;(U{4;XF!04iBy;OR;8Z!7|gy6_zKV{rLDu4fU; zJ3me~acF{W&do_9Cg6Un7&gI}4<7P|cYn(gBhkQT`@aS5z5xrcd^6R}lP|6GLgDJpnoc$1jpdv=cBrMZ{q8;6j6oRhrvpn^)mq<8G<|`!5 z6kY?P@mg>z0dB)Jtnbn1Ih_|Z3Wp{F7PG23ZUICnj`}t{5pV&$wIR|Jyu|SqlHV9lds=$Z~B7w##{OG%u}mE8Nb@69_d(C?Ju9c)%k3FFp)mvhVZ>L zo~Gpp$hzRs&O$hg$u$Pj7-eM5wRq-fqj`Ou#2W-onx@OakB5-C6RD;$t}S+#h?LZ3 zIbv)Lq~Zn6qo!+%E?w#T$UGb)!#(x4YFJZq%&B)!x$!lj!u?V*C|(Y+K&1Zuc-|j# zyY>W$5IjoNl2g?NuLz~VjP@gA3AZX|XoV?hcrckG6Rzvok) zP)==JNZfnfYhjiqgDCKjVn3ufa-KA2TA6i92;&Me4Uz{`f5nj6N{g{VVFOE6J&5a@ zilb;Wr$?^oo5t(e1Az2bZ9l=O2i=>~vpxaX4O{k`&E6UoT2~gp*mfeq8<?s?RAx z!^HAY(Hb4kP_TLrwGSUK>A>fs3iH)ko}8mEfaz18l);xAZ?va)89p**@7 zZXfP1O2sa#+`M|A$*zaDcaysoQjbTg@b;5yh8pWY{2uD_h-S12GbS&Yz@sH?jlP258fGum@?YgBniL?j>-&)d270OW2x_h`v(S2(p3Fg!0^LxRScO~^3-39DKbwy;$%fhxM81BpKnj77oWPBzNiv(dl)zOw_ z;SD0dgCgYk1jqN!gyQv7>9P~q8rkvZLkZmlTwogFzzcrY8Gh`9JXA{oS2|EWObI(= zcr`0<|6$X|fv8M|$o0$T!u_RO{Fa%`^-U{ds}ad&5kmXsGKU(m0hiSG)_{KyFyPp+ z`uekNi1WwF`qH`#vp*7ZMbAcN--Q0=k{)(=43U^=+z2j^HXCp?7ivn&tT$1lJ3S4q z*K{HU4|kT7q`v!W*dccWS}AK~KW1A#b-$0N&4cU+lpI`AMYks-CuMoj#F-~r?>$?u zbU9}}Bf}2JG*})`zH%tV7qSBEV(dn*e_yGoEH8nPdp^qemkFfX1le2VybSlgA|SAhWFm)VfA|{(kd-6#9%L5a7|Ucg}!RQz3$_s7JXaqL5~2!gR;QjK@r!+0 zhMX=!)|AWvbPQ`3ra$p1DR(yfsLr26^H~0n3XK)qOfN2(v-oN0v#6o}3<`DN8>Z+s zP{mL(QpV|FwNtAcP5Q*hFO@9Q9{>a4!JHy6DShi##Y+Xurs#{@6{0LZb7@LX8IcP% ze5XHz7jD?7Cd%T=-7pj`g$ADzDhg?aE2N^yKP9>)M0}R;ET8=BYB)A~5;6#hIP)Hu z8-dFl922O<7!!#FNfv#z)SOPn^A-u}5yhV}%gT-2=Y{kC5F+Fh(4 zMK0SlIgCn)fiH0;Yc`cKku12H3>x{sI6aW2E1k3c&~vA68-n&bc>V=5H9uH9%C`#& z)oMv|AzA`)(|iSoAT*jW@IDSL-`z`a#;br?75g+d$6QSc!P-%VBfGOWDdFfQmjcE6 z=lTX37P!NfnZBMvL$Df}T~jF~8lG#c4-?O(*_eY3td)z(Wch=7mVUC6ZO%F(>)ek_wd? z?o1+gPj5K$x;mm~WuOkXSGhIKeSuzQL%~@P#aE$a@IL);Sd=R)M*1ren~#xiY?HP6 zVGg&6WBO;yd{B`guP}piY*5Z7&+fiS=6WOu2OzpkARcdu_&sB9}O)r^dR0> z)q+eiZ^YORl_}r;jCEPn3rUH4{M-MW#$MB8wUQ*p%GxHhtfMh2>X3D)E+Re=pXAo& z%0}Tzbj(;QtB=}Ev{+h?n~Y^1ABEYCd@NR1yc-L@k#aOb%4F`3g2Hyfi{%R!X7$L{G+~oU-#3j1q;q zb49eXd6k?%SO{+P4%@nD3`E$KEi+}BBw!7P`H#oAvmWA*q*z+UiH{Yn6FS*@JP{uZ zgQ$=QQt=+-Mw%lotnv`d?&?@LE=nD&_H3V6@Ryqi-Z!*;8FJIB_CbUzN7?jBJ#m() zL0z^sCNn7gurp0;H;R+OT*wcWM;P*7S68#+KTBL*yh&#Kl*qgUnyHZos+e!?Ik<6i zJa52@0nO<4+gG~fQs`WT;0Spm^XqD1a+P6p&5%Mcs^vMOEPMyF1d&cL2jbq_y=D4# zu8te=Nv&{XpU`4MXo3*j!~ zd^To+q0&UDcmhRu6uP*pPI4OZ3zA<{64g|I}0^&J`S3MY%K+l6moJ3pM98x zut-*1(JeKYU4^8S2%S>QTbVC66PvyQr$(K&l9gmj2`N-9a(pAKfKQJ!C02Zes-XXc z`3TGSP{0S zu=dw&XOoI0VoX0qo8MoMcI+g{=rfYfz73gV$ao!ZW0mgujv~B!8Ym*kxIS)uQ9;o%>AMB+C!Wsr zt{;GBpL>=f?ILGIrg^_09d4u7?~pGcBO^As>ltNH&vn^8TdPg0mp_v+U&!P}O-L5} z13Kg*{aTX}wUAzEpvtB)jlU+&&&3Gxe9;LC-r*Z17U;OY@LOmLreEZ3jk-{EjZgN4M-aA z4Z`J)AfoKu>TG6bJ#7G&D~=2}s_!D2w+*gHYC;KfLJ+hZ32F`Jur9M{_#>5TS)hL} z!}n~%Hk-!++N4j3p0GsPucySY?`1aR7JQuvJU`=K`&#<WLEYo~|^ zwRvj>fR7+Qpv#Vlz&#@9WSm29CoX^#^!GB_skbd68`C|!&dT0?q~rPZ?j3(Z6d@O< zDT>?0+&4Y-d`23{Jx=M9Qb>`D_%&k^LuIRc2$tMUw}b%}jWTgX>PumAQDE#~u_Zt_L*dGuK^-xY$hD@F3o09+DAM);}i zLalCe0Q&lTaY^rYYP6ng=283uk>wocSEJ*foCQzIBaCpCzDcRoARS&-Ndc-52^p;e)aLU_%I`kEeyp=HG znCB7laeu_@!`KfanKAjC4YO_V`sd7_`lrig#?L-U{+ZN2!AI;UYN~z|I1Ty!)iPIa zV}|iL&7b4J`Z^=4t!CIm0kHlTsL*|;9Px|uYFE=kO6_9<6= zo%)MGz0rCH8iI7WVAEagJygEkB^Q#ey+0O1vgVPzDvvKLb3A-6aI zkhzEasbBbB8Wu$tNc}=~hs99LgK#o%>FzN0tV{9J8%|$6hwQsZu<4$H^!D86N*gHp z3Uu_$=}`_;c8S7rSmYo2If~((G#xw)DF3+B^Lm#7TcY-Tczsm2^;D=c7eQXIc;n{5wkjc1$jdM0E7shx%xAd0I$kpZ0U19774C4uO%obf!GTe?10!o9M`N#B#j zj#BxA%icKu(U!O1tpp$H)C9W;N*|!5_Gj**`y(#x-S(qD0>$>07My`OOGHATI zdtlY)4?+qR3vX(61g`RtKyyI+>K=Y@Rmi+~tV=_-{Qz@BdeR5{9JnF_6Up>sV%eh# zaraZWr^otq5Y9^}}w znRy7>2Hrct6hEEZ!Jc8ZhU7DF91tlYP(G$_P-%TsYGW9th&K20+peOS->Uz|Zi{^@ z?@V$r!=Voiby53WfEl&)1A6E?gB^XLOVC9^{Jmclj$!Bd+4Tg`#*k{pyDh6%>&g4U z=M|!VpmiSfSc}(;x-+E;3Ay<*hZ#cgJVl zNw3!5WkeoRf)qGH!5B9T(mL<>( zCB>;BqKJI3ID!sL_U6_C(NC=FNVtibILeP7%m6TR$HiJ$0NqYMkws|>K+S^4-eKwn zatzM=2v6f74MwCfZC^pO>F#fc>N9q?a9r69*aL741Uj$c#m5wQKW3Z{eFU3^>x?47 zIq_osCs|&MCsZ@c(hQ6S7MANd;#!1@Tr{lF+BcHMwF;UU=>FpjGB$d+s!tb8qv?dt z1N>FrFoljmO1jc5#R8tZ*j+-Zc)lCh`e2EDzf`{bLpS%$cH}C6CBxo#dQLU=HK6wD zrgUKV)m%r^E3+ce>nehDwIU(43tInD!Vp~rQ_bv_dUh8#i#UeDw%xI@tmU@u*JG7jZk|v zSMKiK?3G4M_~(10epH4f+B<=U8j1lEj>XIF!z7Rsq1=gJKaV4k9Gr1+$r?*d5s>nL zR>1X(Zy0XUZ|h4m9D}u?0uPf^mB=qD(!-X?0CV78Ouj7>mbl5iWwQ%Dzc$7O2=0C> zMnLlL!`pY3j3I3hcKD)`#N!EhW}X3D78dv+dq#0O*uxCD_!E|`OcZ;r>h zv!e0BVxBr=9# zem9Hgp9zyIG8}NqG$m(aOIePnZjPH*YJ6^Mt8dwd_3`5bR!)>H%EBO6@)$E}!UkIZ zx;5!<`<*(07Ps;Os ze*(Oe2q0+Im%2CVbJa#*+)9h$%cV7Mqw6aP-7*l!SQof_$Y=m|FmFn0rgK#4vn4-_ zy|0MT_NdI|@_4A4%o zR2a|48epnlVSX#dN|5h$9B*zANP1NJ=~i)n{6>Wtc7b7l?Jn5rriItNKN8>e6xZ%i z?ZHYa7HO^#$0)`iADT{S`*OYI`Ca|8s;>L827|l@dA`p%amP`WS;xtA%}4fbpfKo0 zvSTx)_`0QYDPA8luK*m1V+&?*|N5(+R?}%~9H$YBI& zp|~IS;~}J;4~8feZ~JqBMTSrP;&Z0{sn4AdRzTh!?T)K_rC35rhmL%_1OAK9#}SN% z-1}CX{ZVDeHL9+S`ln`AcB%L7IDQgK9-FSnS+eAmyz;ZB zo}=C<@4}x zWw~F2&Pf9*8t_LAr2lx+9O8g#N49A=Ovskmo@yTm8Pe*)IyS&MP zsF<%SXb+3Xqu3svQKCFzI0xx@+w9AJsrKYii>Kim8*||g?y>Ph4l13pcH0`~fK#0g zYXs#=Z>O5h7M+NvoK1GR63KIw<8B0>f%DuZ!uM*v#m4-8xn_7K-TLt`!VUZWXE)7Z zTddLb(EKnLzWGz9;LPa{VFH-4l-WGl9w;>S9{`EJ>k4QO8FQ6kd%i~+rT60DG?k0b zz$b(-)FqzBUAMKr0tI8igBqv4_xZ=mob!WFw=X{X_{9?R(&=A2z$|suuCW;e^}H1l zUY1%&t;xQ|I^6&vwBDrQWvHflv)7gqLXJgp_*UJv*?n)1*n*WfEF7k zr5fQ#t7T6S;j|M0p^U)h7J2ou!GgEp0|*8QxtSOB`lBxjj}fW7{nc5EPLTVS)hIEK z*IR6j6Hq5cO28IoxJhIy@pb->-W`ks@O(Hu4@I`yLsS! zvd^5OBxb?O_4@-s0+NvpJ#W_E7tsHQ1#pi>D!zbEaltn`Vx$7sz9UOf&XFM z0$HcQM(c?odUMb8H60j==C)(~fX8HpITAXWIc%0z#`|ZNBP6ov`O8W%EA`_>*Oxk} zsC6jx&zOCP?!lWBEJwAb%1&~SK;QM7>G?o;e5$`Wi4?vUHLBj70iVOA0_yQ=m6U5w zM;#-uOT0epYE>kcu`Dw-y?J~WxayfX|2>~BZ(ZXBU;cF_OB7y)0>?*aKS?m#(YSwY zX`x(sXF%?X^x=bNwvvdNVUZc^Y8x|j&zU1y^AJ;f6MxgVfFHIeEFP}@q905GkuPh| z>9A)aoICx3(}j1?m^Q2#>JJ4FInsf_b$`F!6M&^VtxRz&dJCsiQ93=R-5q*p!BPH% zkBL?r(h*kmutS{Eqxsf4#rZFfg5oy^%HiM#JG!%zzM2<(j42EAbYSOi;%3$T#<`(4 z<5siFIJQS&5A-Rb?Ot+4r<7nFqF*obiQj4tsfX4@i@=Cz71h8OXA7R2oGU$lO~q|8 zX0ypQbXbz*vI^i+0fwzm#HizPUwyg$NS6=?z}96^wvnR$w#Y*W?mg{F^;^qUH&h}~ z=7O#{hY03wf_O?}w?D^3wb8r!rpinM4nRd&2o?19^tiOXl-VI&9%~|V3J1objoat5jjy#_mhFpdc!H-wq#`F{UYDJ&QRV?)CiwiV=v)H<<8VW zPl4Jr;#xU!spc(zIv$G{s<|5w2Kk}y`4{Y_{8DF5lCU-p{Dk>^_zR*-fjj=b*$W94 z`xKXfl#AnS(lu6rnGQGxBfiXsoy((eMiJ<3dz^BLJFczAOIgj6;FA$rxsVqiOuE3FW#y4%GD`SgZR?6c&t`8lhB`rU6W8H4kJ9_ zBLYr`wQ0^LTxaE__dI%Q#N0H+*~zJ)qN0q;9a9H zY!E1`*b+M0Q)#4nAA+KMZ?M#QQS-vKvfWw)j2k4w;3Aum1l?sgjOCdshaE6bN~fDZ z3(wMRoaj9jZEPp*;Zmp5SB{ND<-g7zbzRJFv!B*B2bQm3?GSaLn$Lab-A2A$yX%qN zlVIdDnq{UmWrKeD3yZ=X6jJrF1alV$9{I8b(;%t2rZgSStDyI=W*pG;#XTT6T2 z{>^o}IJ7_!8WOaX)wX@x4`)5obLMm``bOPivGoHtmXn-19&2O5*=B-Jl=F=uQ}V}! z_rxNKSx?n#E&0ZccPO5DiSWLN$q;t%A&;tW5BB0)v*>zI9<^oKso(pO|AfWZ@ud1Y zK>(a)2n&{UfaZC8U$m)qpFrjJ3>^Eqg|qh&b(II|S6Vxpzc3~9rneFN%)?$0$e}lK z5)0mIlY|!kU8eXkgGBH-eX-=LGV)@o8-pfz;JsxLuq#RMDW+A>Az16TG@E0B@y4y3*l1*UjVB~`-2bv&r0G|i zknAnPL0$8LXOTM()eNi?h^B|Y?c~!O%7PVf>aof^{NW!dJS_tLIx>_y)`tkV!$$}f zzMbfs-A8-Q?I6RzKUuP@A=9G!L$z~ z6Ge>i0TaNlkp;YVB!hrNu>0q$B^k1)lnp@A(vJ11WXimJ0oWYz;X^WrOejMFS&HWm zM#6OlQr|=j{8Qt|1Jy3tU!`TCF7udhL5J;^I)`FH4p`KM;GibNn}s(iVQ_Ear~S{d z#a3$mHP8k7l&c#~pZL3?RIFxyW4$U9Te1AAV6aF1+MNh?pTud;ikq*!je!r#1r~}a zL{t2W-^}9>&KXSw4xzNq0oYF}Tr;2g%s9HPkD}}~)~K$GJdU_(jjlFYSban-o7JHn zlVMeo%N>rvnpl}3whbr7u4SyKc#Iz6cMy6Or_rSb&rtvr_;ki2Dx@PDO*TDqFyQq8 zZ_>^?W2}a#$4$B)IDfPGJnnSFtE}35Y(iAr_>X|x6%RElSvSC}F8A5L-2v}?+z*2@ zH9Jc&FA;Ta2~I2DR9vcQ<@k2($%i5CYIN>_yQueFh5HJ48CeS_c z(u7mz|j~Bcig|`e3|++XPU8?(4$#*LH7_VwRlmu7Ez+A0Gb)@+x(~<4$0U z3X1;HfUUuf8&LN}M3Fz>mu}APK#f=M-3J7;X7xw~o-AJ&;}cL`v1M5Mz?q`s;%tiF zqdXhnPUFu44Y4Y#AO|WG@KE=6boYL|5d!t@><}qHp=92~zhabs+$1Odf546uq$-_X zL3oWJa1;(?3ZK=mr4h}k=2h{5su8!J7oyL)2!Wn-FtGH+%I9KukgbFv@U~vA^GU? z@ae+)m1ks!zM&R1nJBQGrodiL#dwTD6Gd#hN8Pt`;`=YZG!XF@TXKo_**`Aq<^D!Bi%Dy=tV z#?`UbvPM(LX;UuM*Pp5187IBZ_n`P61>xi=HPI|DBTS~aL#|~O- zBIMg2G6t1VXO_rJOicEmp^Mz`!f zDAN}q@`9^yD5;^6GKhk6oioBT1N_u&Td6IwaCxSPS1xK-QLpvpyqV?4im&-akt2T< zg;eImp0Y*iV3sI#r5;fui}9*UxG1?I9h@f<7uX&zZ!edcj?59kqH8CgD6Z%6Dt=7S zo|BYfRh)eV4t@NgOOY0mBRbVnH(-+tdbY^S3MgJ6iNYyWn(vm?fK?IdGx;5N!ukM$ zdhX+J&{QUhisKZ$ioIJ<$3?7}@PH8$VDlFQ3tDeKm>Xhf&o0+3q`yd>6xc@CW@$~9 zLTm?RoKJAhu#21kj_$uZ$iyw&zgG4K*3r*P9$5-_`=QjFdzl_OcXVBYH`_+JZnN2&vOVAB!L!MWbUyN6Cp7jS6IB;mN5ur zj3jUhHwn}Yo&!f?$pS4tMXnNp6LWx*@B^x{1JRNdY8n5EVQ=a^Qpp;*d_#nXwu>~N zO~F|Ld3&`X_y5kj0|vLX4+wn%!_*f%`zl>o=S_@Jyej3^dFTy`i)BTLADw*abQ*5=wiIJ^6)m^-ytq zD2q^Omh@PoMx@UF9;ZG^caAvvT>n`e2wqdq73xX_%`7MyU-Y$Q<%_C9pE4fm5>gG$ zf^Yc*j=Rer{eFn&idDybm2_pM6DrRI^;z^s;}Mlm1WTU34sCCyfonOfZN3%9fARd( z7l=E(ZVCuytmk@fJ);4(m}4|CzmJOb<)v}(8a;OoetKDw%O1!9evV7%-hXozOgOEC z(7r9Ut=^^hcC26M@NS^6Nm5{Gniu7TO+|N}ln;A;=qI1FjM zZ2cp!QA(m#sD;Ksr|ko}SCiM;Q>7j(>?-hD!P=`al~kdseITMy8v)y*oaqFlxa@Ce zPJT8fv2@KHwG!uM5KOQF!>}O3*Q@++HF`fnu*-uD_n!2d=OKTpuR5>6e;om$RX1qb z^4$eh-XG^dl6vH?74Tuf`S15C-ae`^@Th7NcMYDWCX_Y!B6R<&|;7>*el(qjM8rXiw7Hm3h2pRvqKtL2Sf=hh2SEs4{7Ev6_j48V`1!M zA2FndA!oBIq7kU`Hs;7srK)gs$Z=)!=p}V|-K0-uc{C*p7M%i!?Kk~pS()4NmaLYr zRioD@R3Qh8sU?nI0ZOqqB!K5e>!)&p`l6+C#g_SBo8iAjHo#6IzeiLv?s_>{5?>*p z<~Oza8KPPKV|j9pf^{{XpL9(;w|}$Qq?6F5--@)>7Z;jKek44&vL~e0*Whved{pD_ zo`Uw)I{jH+Jr>Ty8Yp;{`uVBj`|s%S<~1k#KfF+*&)~LlG?AKz7Hh*q-xP5iCz{_r z2M2$b?=!j>;b^+R*8g3vjjvmYBV*Gs0MM)rqrk@&pGOl_5PcKEQCWVx+=a1|lX1x5 zLxKDDK=7rzQP#@lxE>bw*#;GZ&{ zqh2;E2|9S@4Bc`ZC0cM_J%%P^5ydrN`1xO=K-}Sfrc+EgW>RuE4lC_CbVAEqPxC?B zK5u$>t+Z3$v0g4U2jr~DthFK`PigxOj{-Hcob{vxGS@A|H2KXwSDJx;{z%MzH_~;< z$Q-!wy_8c1$(Y?6?8@B~Le`tlK^v;k!MlOfl6&gZ;6GSO1gusuW=K@w1%KXs>d#+4 zm1J6L%TSQ5$HJecnx~ViPK$;0Uns!Pj%$=bcJL-7_?NKsMI@P2eWb&rwEA(s*b!Kh z0V}9Tc4h=3Dq_y4>eY^LiZefbSqslm&-J_^U;F8CVQjXQEwB%b#~z=_iq~u&x8ml> zL4=*R!H1Z>gpqUWAPGlrG)B@`_rg-M|7q=bk>*&Y_;VMj28~Gl*JIXXr_}5R%gGv} zLa;CFM{)(44PrK^taEJO6-98E8b|-kpY?$M^o)J(8-9w!J6m$E3plMNAX&k1(kVPZ zCi@i``OES=F(%f71Yu5xBg#=s_X!Qx>5q5pz)@EkhAQDxh7Y~?;tOk!#Zt&xH@oze zV|*DMa`U{|=FK>06&)eeIBtsfB?|f6cQCq{omuueC)47@9=mG>8GGJ~OD{Cp)R*q#E>i?Z3a&l=^Z zDKx!&CLB>g|AHboNn2|G6QMa9jEMBL?N#I9=HlC-W35lAr_8vm`BI)s(Ht_VmKh(Ef!axbai?&21C_4`0znx7GoMP_g)iL3M-%VUj zZ|4kv03SMn+(2?8-RyzF>A$*yr0xezzGeYxIxAqql|ugs{LO(lq-ebCl&5gp$L=ZG zx_%Q6;{C^yIW2)QBOc>f|F3YJ9(UZ&-$Ny!rEeIM!)il>IIO^=$5p`7Z_ixoMqI}K zEXDEurcT`($&0j=KZIZHSk2&ki_NmYU+2H1(*OSUq$V^@Dqtopd*=*VQzgwo&Z{7g zu)nsWVgU0pXTK78{3=Y=qK$2LFT_FeHFyR|!a}a0Mw3a*s6-Z>*)jYQxGUbvSq+=4%IRlI=xUyf0nQL*_66+fk&~YSmWYLweTa77kn7GE(!VPV{6r=kS z|45~P;yH6VulMW=)Y+Cl#6!Z~e?Zo{(&D{ME?TDx)LS87_HO&XUMpSQ5%O1AVr{Qa znu`T;9>5>AAjnnF9=v(kevq%_x>Q>XSx10>$*J1zzJo-LKsLb77QX_h_z!_dS%uF% z8YEDEL5JqJUT}2;*KLss;k-!+>!4WnNgS!Qn(g=G%X_bR^HQ;z7qudM6Dpd~sVCuY zrdKVFU;G#W2SkWIz^LN;{#fzBPPF&nRa#fZZ?AGPzPFV)a*o9@1| z^_gQ*vTbM~vBe&Iq9;Bk`b9NBqqb1lTb;}hc|Tzh zs#xq~e0{8?SMMO(w@>@jPIFm_^eDA(zGg3UDSQNO{>BRRbUpe~3IXs5s(E*mlkR=C-P+=k zj0Nu1B03sKR zB;_H{Q5eAZ%Gt(tdS1&18~CY$+D|^!gTj#wt%#2(CNX+33@Jj+vt6w0$|p|(5!d$u zYqag&@9u7YUxDL5@+Bc}=ukXAzu#B_^&rOUOG6&{e4^!&-s}@wY#j>> zeXQ?6^yl^$fqEv#5xMcr6HNKJG!j@pn_H;kwv26(i%}(y;#rW0Ti}Eu+b~8n|rFAe)Fed)|~h7 z&rY9ME6*d*Z-t$a#tfROq^Nnc?;g>R25@$y$Vw-Ti1$Jy3i5-#w1(c6_ajT{d?G^Z zAv#;-2^ktC5-9fF@*`3dF}jq=EP+?Kos63QyK@=46yG%UtM$0h94mc?8arQp91~S1jHJP`_tmCH)~aWo!2dM@!WDMA8ELq! zsz#lbBQ>tbinYT3UB)L~sdH?cfa!Y?)ZdEbf~HA3_1LWM2j8$e{dX0kCdhMP(sk91 zcUtD2ho9(p%R1PX{e#}V-6Z+%Okn@_0lX6Jj`ER zaqNWZ7)@8w2*d4`HTParkRpHm0mZ?`4&Nyn(-i^u-=6Z;V<$iRO+?bc5XQ$XI{|+oL@5 zAYxRl`kz=8^Gy2L({yxo>*bS@``C-@cxiFemHXc)>r|)Yv8mWlkLQ2RD)&^9GCnGI zA>A%AAc`}`^^I=)bSJ|JXx?zL1mI6gZ=w%A)ul0IL$5EZYylyrlMMy)W*w7w0QGF( z3W4Q0&*XDO#xqQ;&~x(i!Udi)mFhA)=TehGaEVAE90awJac_6m*hW)MHbPXBb10vh zmIxxO&!@q2@X)Q89rM)xWp%*Y@GUfTohu0~wj%g0$ z4&CTQU_}g%o6AB*XR+rEupBe(6mmw#+53{2p%z~N7#@g_FaiK1^#BTE_; zODfzB!up>BtZpt3c6c#kMx(|E<|i4;;x?Tslm5Rr!a)LF`iSbg89w0mrygonZoINB z{Ta^|*W6xxm39$XU#eY$I+|C8U;Ve!2s-6wr`SCoXCeyGz@tuII^QTn=we{2UA@{q z8~gL{T00ZX@fK0ojKs+k8kY?~<0k$Wjr$8g<3?b$ei$R}y7mB(RDMj8e)p}dtKk6z zf96r{WjnGkUoo?Qc-*i&I`aV0;60Z}C+9JdA$WZeg3?6+rPu~Kw$+w)9Iho#il3hp zew2kh;8AJ~B#Fg+QPM2C3T1Y3oWgeb0JjFJE-Hg0F!hOAr_J2~=ZjX`8kbXCm!G=Y z2|&dlGXRw8R}L{wDw=vv>y|D#x-p%gUenWK`i_kM>_?6A!t5HmE;NJ@0P9LE@%Cn! zwJ&*ZyrsP=x&t@tHC({CodSRE_|lITU5oBf&k?l0xvkg$5h*>ZioWDkp?VX{hk!uB z7paO9rFUiXCpM%^5l`Oa!4qh@F4%yo1O5y^T%Pv9P*)o-2fvN|kYfC4WKbE~LGJz} zm%gkGJ5Hs&pO|WN&va47;>NkVSgsqsaT$=VA1E)WBp0VJVogTpwPXKnP3=&6Yf=y@ z9jlsJS(f^Na#dO!ryQ84qGsP2|EVzbby5ex^U7J~9I8z#9qKTZt0*j-*8#9g+9#^Q{0@rC zB3P96Ts#g~&VB0D;U5Bm4O@82A75e34^t1H#|?ZI>g&4Bx?68Vi;_B?KkR*U`cXb0 zj{l|Z=PQwyB~=ZdaNI2)c&c0wNznF(>bk&WIixtbA7QupJkZgD#L}~qLb9DHpxj51 z@bUJew~ok4ebqDLe8pGGg2O$@(u;1e3bKzxAkSEnp^$69ftiB%L$5C>mb7r6vS)zm zbu_AFFg(jw-?9#f2qU5UKR&_3?)(7`=X2H)Lq-MdN(tpI57N;In1ka>78MSG z{TJgg9FK8JWGqKuwk8m4^QG-w`=_~A_Bzb>Jareh74!9Vm&dwnV$@+w&5J?=w}bJLUAGXy_PL3lfV59Zs@SrR?W99<1yE;V0-s4d+0U~|l zF0{G?T=`zC3j<3dmbW<)CISWhp|YDPq7qlksKjrMKANm&dl0V$z_ zP}$^3eq3=|CL=vXVw)9Hhhf3ao;)r>rcS`YX9jp|GTr&y8Zni!15cB!U!|QEe-0A% z9B)N77#`hdt4kSQlXj64E)cUX&ab^*jAB!5cMRN-ZfuU%a>(6U+B4W#RQhQqQRAS@ zE!oqgO3gB5Yx5nQEg7YvdGC&<tuur;RHv(jPaA zLiK)_m5zgZ?3Gi;dXz?fnw_C907)}0@?z{DLeijQhJ#@rJ@WyFQa_PV20@8LR{L=- zjJe5ni@wf+)?E;9MxAa$N62_By8c4to`Ik?o&blyqh{8K*>LZDuuHn?aV)HlzdSC> zRVI^yJ1$gmU_;^%hHQr&6eAAT?YB#35y-RioZaJV0{|c5Tw~ydcK3@#EQqaIINKGlIhDuwo zB`cbnE!Sn1*5yp0vxELqR;MWRL-EJ+-YgN1eT+Mu=s;Eg4ysx4{!`Ck2mNbh(H>g~O{(Rj4XSYdinPMt zi*-slKR}Z|;678GBu8W<=$=%q6!<+n72p>&WuV>w)+s8Bv8ar`et#!>&P(x*n?JTn zy85o&%?`uY%kQd`p^hDNLSIrpU4NqzYVOi-wS|khLA(FCSDya{GtQTUk#QT%2K#Tw z(};LVbSuV@>nbX;F7=r#;K2u?3CiMl;l@V`ect$$=b!#@Ik((euJg|RqeGMkS}LYN zGD`2x+HQU!f+F4q>=D1C7Ceta;B+GNUqS>7af@UC6da^+L%H+!x{_@qAO=eRI+hKw zz#ajbB5C&$G|2s!3Kl;{@QO2hxIL3DUU&SP>4KqEI3b*&GerXWd?mVl=V4sUCZC~QG@Em0$XN-3rVG$XWN0m6(Py}a5 zhmHco@7l`vNo4q^C%4g0JV6um`#|U8Q(N6Vj5*EIr1FcyVukx`>UQJ>aywkH<&r$+ zSfI6eqMY?$LaXu#muVP`V<8Q~`Rd_RkyeRc-ahqwIzlaI zx5MRr+u62)!K9eC=yiaQ9E>0?gSaaf??qC*bs26|JhhJ2N{h9Vogo!X$hSFvskJXeHl_|88o1>o=(qsR4fXTjKs~N|ff6S-)j^KX2D6uO{bCxcBXje1X9qUZOY| zj4w79ytR}v-cm6unK9&+Ab<^L**mF2peBi%dz1dWLWI5hZxo{1cDjP|;8WD4Yt;cH zh~kkci(Gl`vI;H;p7%ikuL~8TYfEP~KGw1H@Doq?>n5NQ+m-R=l#Z(rLXe;8-L<>Am ztvdfh*6&y((SaA(%$FPTDBxs35T9bNUCDset;)kWmf#~tF7Y|YcN4|?*$>QKJI~ls zl0)q8QriT*V%2xWKp8njx~^1O(wx14^>HMJBpWn*jZ>9a*6HTi$F1h^xFq1RI`+!4 z7@pe+%G%wNOqhp83_wHa{Z6`;Y`QE?fGeYUYV#&;?$|zAW@nueScAz6oh%j+mN;O@PNMTtM&$? zVHL$}eDKmwajcKsIxX;f0xCuK@8K9)Q2UZl5`wZE4{+GJdG2A3>&C#ybSoy=ZiCIL zNecLz`@Lc9kq4ZM#$|ZHOiJEiBJ5{%@PUX347VKa_MNCqgZFZ#k$>$^Fv2z`m;oW< z3`&$fc;eAG0|O=Dq9mZ>P6}@KwUvH(|vzXP4MJVi0{+o9Ma+|>KS81b;NHV2>$YBU zy+jVUy@J&0p)jdon>IFLUdGwOJ|dugXUb0`>F}4J2am^{C*SDlUi8A#?CTpqzHQ){ zLa-&;b<*pTi(1AHu5w>lUfav)T&NgCaIbTaoH#gqGiUR+?I3f)TxU8T_2O9lSI#jn zSQT+anI)2+c02d-#aKm{9A?hG{Ssqq7Q{B3fNm80iK1w(G@gcfN81Zke`aeFTzClbp_XEh}0U<1S zQ=Jf{0o&<)^AhO$_^{yj$()O=t^!6OSBe!N-5JE2s)(C?rTt;2UzTn3k4{(S0#A8bb3orWvrX_Sj3)ZFo^G?EDG)C-f=q2JP zm@uT=_>jh*4_Oimo17``4+xB)M6ijm2@ukITmP`_V4y7BHqQlU;DwBG_Pb#Ge#q6m z`G}CV9r|4X%&G}`^oAtqBE$z4w2Ga3QMs)X`oikqM~vr3Cx|TAH39t&)4!Z^Uku!5 zb;Rn>0Amqz8MIhWz^6od+4QXMtqt+p4}L@bO>0e%%c1^M!g=8r3bXr%SJt&uHE$^N z)e5%DVk#NS6OSO;ehDg`=NA<9PV+Az=esL8p2O4SeUHu@Abj(;irWH$QO2{5Z>OT~ zV_6ewll@#yyxbkaalSkkZluqeTd}=CR(e?PzsrQ4_|4X`5p4bzFYplsWp>Zn8=eCp zQ81FRyZ*4{tF&#zD!3<=05UY4J(-byTW0*pm9b6qyjWQZRBkmpAL4DwLW$+okb$~F zBX2t13heM)%3Av~x*KZTa0uQD49Evzq^6SuSjKyEnV)mZJbQgu?+#DXYBql8w%R^2 zeX$Jl_Kk0V4!&}t+wyU@|9CATH3%U-LV^HH)=r)X8gl7~W6!*SXN6vKtt^@Qo*z~o z+eJ!TeBY2D$QD4euRsG0gg7J8X?{ST&ZJPjJRmzeVo3yurD&H-t173R6lwf484Y?O zq6vl{l}ZKy3`{Er8*il%X9>3$xYsUsn^2lNLL+^b8>@{CvfXCrqg@BQ zZLxc0j&SZ1h>Xb}3*_c&d@8Qj1k|Rg(w$aZc-2Jvw z#md@xS5NO6>iOb3q5>vd13(t0=R!b;zB1=uu77y{IXw}S(arNqWq**c{WW$l`kG|I zS?f?x*@YbT+3XlXOI^8oGwadW;2QA_(TF8fcrx^8=|7|09~`&jB*T639IATvJkYD!N+0CDe!fMQfsRFX79iVNxg)~2uU1F~A|3;bLFdA}Vl7A2L4*Bh@N zw+$stpc`JgiJQ9!nGVgqmf_oR-cMDyU+n*~(eurxUxBMtlKWnyJjYqqbESG=_iZE3sue~ z1JS0e%5dqQ$pfrs%)w#cVxb)AD!i;a#NE)Xkbe*vfDvY&&DYH^7><5cAY#klzBZ@i z(eXC``D{H}bO8&%eC|4jAI_ZTsQSO&kZIFA6N;Y670-Z5b~LBJdkyeJtG}2nd05MQcmLg(K}GcJ|%IU&L&b z>VlbRD*y41kn7cO=byP%)%#5w6baIzJ0Y2%P-73XA8a2~yIEO()!OXMJe>dAxZxN^ zgjNFB{s14~{+>t;zCjEHsQ>VKU8PFr$f($iiYLH>NeA%n=QRBNlak*vOn=aoj_TR5nq3bA zdp<}|-wuEBfpl=?j-lrme*d^ne6+jqcWrGVXUzy#1e}@c%u-Wuo|_n zCsxLz?buCCYAJecQTdE$xj(0%zRG%MVQtCQp^>N}*0Rb>_NOuL?(Y{Tf;cL@C<^=He*1uLgyOO|<0`S$u{vaw){@1)w>97v-p$@?5 ztA1^7*Nv9^X^b^Xfl9E6pC0N-tqt@m<#)LLNM#C6)uH6EvYM0Ih^@#^P`U;v^k&Gl zNYXbC?8_NQ=1@@L$nTBx78YDHcm5L=h|n#zd!=h@+B`!ee{u6QqOxj*XXL+8!vDjM zLXniHtfD#c*{V2m|KxFt_>!JoR8V-|t?Ny{9?Ss{{jQlkr)bQHa}I4zxqm}s#JtV^ zbWzVQIQ6EQ%tE8k07$kZUjXoSTFw*j>xgb_4I0_2DVx?m6 zi6P)W)I9@8x)mwL&!6JUN|HD(y(Ri*N6tdL3TBwZY#&Dq=MAn8mqzFrt}e4mLJ0Gp zmVAv3e@$as-0)s*YA0MZWGswV`f(!c2Z)XO%Jh_S!t+S8`a>D6gD_mt6xaGYR~Wke z5kCt-*wr6K8t=uzGR+a;$%6Uia-&@p>X&-t$g11w)e>d1frLqKF8}IyuG=NP0*zP> z%CTY?XGznrQodcwmYvK`0*A!O^aD_LnJ`+$S4@ZZBZDKi(hBG#MNi!^F<~KB4l z+6E+22)h>LWc;DwgAJelNCCq)KBSR+%7g@_v@wiDAf%k9!|(5HdF!RsRAwNCJ^EoS ziURKCYG1Newi5&>f1N5YZnNbH?AlG~PLCQ3;$hSUD;4MD;>M|Zj!u(vhEie~X$8f3 z3OJe`OAdf=LPT` zf%|_QooMIrKO?jRJzPgigP_-09H=}wr_m8vyVq4O(gq|c2%_QGD2o5-K`pe3kcocW z2sEC4Pw*a{);&w7w4y17+OKZOLW1ZhT@Jz=BV(p%R6j2s(?ZwHK@n7&r)l>b%c|!gn_@=)LqD_mhRQDb+o=PGYnU+1-(x0c)_|i-~7d zqtVOjJx_12Uugm!vwrkp@(W`3Xa)?FbEoIeHj>%$h{WNTbVTl?>PdgNgxO zphV6{OT2BaQ65nd&?_BfAY5SGJORK28n6H3*sjoH?B3%f*aTZp8_T%mZ+#{h=^{M= za+n-AjSgFw4#KK9-=`#!q6VLt^=+fskX@J4=~PW~EeN&z8ABcjH7!a;_qxGq z`mq%t9?@)4EJ>bPCa;d}BgX1Kb}&NJ#t zej`>E36&lTU|CtiAVRpSkduSKibyNlXDh6bjPo1D;%R+Lac;bXj}6l4$qM|aWQgT zTfc37_N|P}Q905{wJ@PoG%F92i77@|tS}S7L>-d-QJqHpX8 zeP{(C_X=1FVHGk8FoqfXMoxYEVj1*^OsjEl4?DST7z;~Gdg&Ti1VZIIZIaV1*ghe! z1j*3#uj=xNg`yG?5)l`HeCt--209u~7NDZvJM3QhN>~$Y3Hn>paV}?2m?O2Xun`0d zq~Hm#x-q8m%Bb2WV@DxLim=3gW{Fgwe18h2W91~FW#;APuBff=img2=KTG&o{q0-g z-^Y=jn^AcJ*CnfG6yvVt=MaA&Li4#C44b-sU}4giY46GfOt z=nSP&aDln^k7dn_Ha5*DI%20g4RQBKJb+G5eh1v%8i|~VbQ{CYM`Nsw;hF9VILF27 zv9_5BIClHqcsLzc?ee7>VPCM`Z{KHKB9X&LRJJGcWyl+wNfj&*bjkM=%AGRhzTVhw zEZrG{!*|Z83&OiM8=?sY>(n~VIhy?M>SHWz*PBIJe-iQub7x=)T53AAt zHZBP;I{>n`mOjFpghS^429=l45g*i`BESWEO;Y>w`nGBb3HkcgQfA|*ZaW|o~pOs zFDd$!kNvZ^XJ6Q}n^oJSxt@Q&)%Dr6OP+{e@1FlWf*xe;A1kwPnku}tu6dSAjrza2 z09Xpq+WM1cStYZ6Mv4*#a?ERL$>pH6&Hv}E+LSO?0>$hvz^U2$Xro^qb^bz`?w;VT z;{jg3d0{c{-8l`WK?@9t=fv?&{Xh(4LZ42A_pknqKxzN@(>q>=sf80$U$o>TNv&i1 z^MRl9rtK;}cu!Jq+8E8Gp_839m}ZqIpLO%*-LMeWtxg0d_J7XwpYLgQIP}rQ^2u6j z5o?Eu<3If#)dI_+JW(abr0TXR-$;pi;7if1+-Dy-`q3iARbON6i}|R|>^W$p=>X#{ z{lAPm!j=5A1e1hxpXHJzd*|tT^Y}IY|3UrVn<;EH{;S5Kd%=+ z1WjYvjEE#mOKwGCT;oS|C}DLDj~CEfXxuAicte~dTk*@xoI4uFzcreoZGODm4#44c zngLk5M2(1d#xPk1`#Kdfs)MsLIN;H2>}jJ@N69S;QeOhNA9jx2@9f)i1>;5n6JzD0 za%%>pT)Vjc2kOVW>-^Q32+!O;_xxJ>|DX=-Mv90oF6q&j&Y!K#US`C`M`>mYZH)ZC z3rh@r6h~}jj=J|rVoCQH`?c(n-yZ9=>MEIzIt%>5ewlbCz_%Dv@jqz6IANkZwHNt& z`|_sZkstdbF7+IK-`}cnR95SBG7-+}H=ILI{oK7bk6^cO)ORCAvZGj^(lay?nV$_9 zeuw>+Uzj8Vj{w6+LZsur1&_EsB6g|;G7*JTo+mG=ZH|d);Wuj<&BtE=ujFw0<{p4I z28*Z!J@(0O?>)fE?vjcX17k12-lVxdo@{C_lkI*so01{ zRP!$xoxGsqv4x%(b5X62o-p<$fnhw2sF8rt*Ecn2DtPBQ6DX49`;=IC0#~$m5nw}l zi9ubUIuqyF!Xcv*t{%q4tl|$C$bEyBoGEY8Wm5(prXto6K7;I33h+D^~iHXVrJ(0Kr{sL+I!uC54CU)e^%7(?@D1f#s;*(JjnU}Sd$Dy)7Qx>#9 zP^w%|u?+BHMbVC(quA0Xf}IdDG@f0t1(!Bb)br}bt-8a#0~Y=J3_Dk;v8Wk-2&Q ze&qn*iU~8ifGYch0j$QEz&{avZ0gqoi`IYCogZg{x2Qrt4hJjxo3dBCmqqu|p#O#_ zf`YO3iTUAHRk(tQM$h*FF1Q9>G7YKiZZ}{GAS8` zFL|S527dQkSVUz1kVnr%J$^*S3$|pCE|eBWVPIc3#5);xN$Clfk=fdG9b`o(E%x+< zG3ya!{Y{xa?f*`h6q=q$VjGC7AcYACC9B73QBQ}me%RAza>sS*Rf1A4*fJQ0?$D>) zBTjoTLf$I-@_zDL`q*wqHo=v-i~V<)47D$k8W&5FKbutL6cm!4wfl(0iKY@ssDknx zZ4`&G4_*ET=??blu*kb+JN0k&x4nuMwJ*+LS~)onXZ1J1^Yv~M2WlGyf`X3wld%1K zL2pM7)sCA4gU_xuXB2-7T)*%Tb@J(lg5Jy)F<{}60$4{(mMKFZ9oWNFDHH(%xt)wYw{2& zx|GYMuJCfwV6!M$twT)D*djQ?tzU)qqabV{$>67wCYP5J(^(B|uCTX{yub!_2o14C z`QKccq%&G(?H36+7a%Y<+s2&jQ8j_EseRYZ;!h<}_caCcZ*FX(MZ(_X1%c}|LO!dF zb#B$@BMf8zX!zPJxyEzrh@_)~WaYg2H`m2}syzP-!GOm)9Tw4;y{8gKHdrm%B)VfC zM~X~FC`%wB5LgJ*1Z<$K^9G4Ldy88cVj0Q|P$vzJy|A87R0D9a1Q<~Qi8L(xePl8cswqH{Cy(GMlFN-B? z1D`SX@CiISRU}QfbC`TyMh1z7 z+y4|+J5x+x$&1y}zg-8d7BN!5*Q%%PveIK^)Z zsC)I5$YzBIX^1rd*5&s<-a#ARxM#7M=JJzk(n*`QPj)}U-8J33MH zq~ZG!-x0%cB(AVVaC{0E$w(TC;dSA^d&jA>l&To9F!U;=tYC4m-xrnfQpU@Jyp%@l ztOWc}krcNkx#DjuRIctcND?i@Q8)Ryq$vtJ%Mz_znM~_(n#FW3uC7^L>NXjlxmyLu z=~bXk=|&9#Fm_c?_KJhEQG;=)?e43t43lhRR_B=g*6QiZ0XJ5b`eHQv9P)$MK=hojt!-mp%UX z3mE7h>H#L`9P26OQD`NEfOEceQD$%Kh?s)>myXkS@|o{S;`AQFZa=#c=vQ1y*Sz;V z*+g74J{|Wg3sYXrQIib_*ok06LqUf{CeEuxKQ=#&$X_b`Wr`elBvFp2+d!0jfY28c z!bSJ#DGevV{D@%~PExipLJI7}agYr{W0Dk?q9qa7-w12~hgjADAVY4gHwamp?fdR# z1X6U^PeCCCB(4Vsh2vM$f71K@b$GR_2^N~76!d}(F5#wK-!yjmw@I8G##l4vTSzB0 ze*FfN{h9y@=KQr5?}MEAKNNMW;vrYM8LbHqML!6DfqwlG1-D1*hyQZTzScRfOjNLL zP9LngG^@}{B7sL+V$QDRx*Ahmv1cB=@p{ zI^2L;SajOM!$9jDO-p90sMJcaLE=G|4n*bvIpvjgKbnEPa-|Ss7L^lpmC@Ik?u$*J zIbl?gGV_HoOX_mte7aBBJs_n#tL{g6mnE6vY7RVz*7ah}nyZ!&`hT=GB6SQfY4c<~ z@xp`mTd`1S>kR&J0|-4svM<}RbUjfeGi`dW*s}B%s2{i!X^w;y?_WR6Q}n}XY4~7h zy1A@t1AEief^|DVCYF||fu<%czc^7hvB&bGq8JoC8Wc$cwfk!J#AM&QUPcpYz518$ zT@x@$m@DARRS>*vs#3vT7$n#KrdHurDCDa4#ldm#&k3|>*!U<0T!!Js0QC0R)@fPg4 zwm44>?1IKiRx3liSGkSr(p_3(j4S0T-m)f{NJYp*8D`0Od>F-$3kB8Olz`j>twGyj ziHnH7u71D}CqS!QFaVP)$iW5-^qzT{{+`lsz4Y%9VC>f(o%rY8 zkBkjoeNh?&zP8>`I6~KKZ<97&atitdR{{6Fu`|rW>f{|^?l^|j=ihZgxqG0wbW&SY z8iCCNA$6s?sJq;c)wQ*GQvW(<<{GUBod5m(4O^-(TJP;q9N$edsyy$KwLoRx;KeA{ zsyF>PdArg|IhQ;G8P!39qgEhFKrXJ zjqAWZpORZN$v)jOc}HncNd#Z4necF1f}m!=^)$i5GOG&*?^~8_&?wD8KO8Q)EY_ls z45Gb+zH=@N^zYSEkXP?d=q=m{na%#2Rs9+CTGxm+oUNFS{^~VEFRaj{_m|7A*y@8g zY`Qr#v*CqMJ1bF{>pIcZ^W@Oyh#%m_m|1Cb=F^!MUvUL_tU*5%AC*4qq>Sd=PXA{q zmba-wHZH(xb4K~HH)e30bT1Bm#;tR_A)uIzKU_qAz z?qr)Bex}85ee7G+?RitQS|FhE!%3w}xTLUni{ddBNlJB;xXG$7T=A%pyt>cp%Mj}Z z%`}nFavo0{U5$RufELgY-0^9Xu#{ge`_A3WC}&Ol~d8szkX2R4?Qw zo?2#Olc67)S5D)xT7VyQbRIvTdceXm}puqxCx4 zf)n~B$=owKsyJe8s|=UuPTh4WDm>JAK{0&Xj^oSKq@Kh9JPI9iwh88>U$LS1O4wwt zq+YpU;?1H}c)Hq*i_nq!=w05$qJV}5O7MZJ@>cgM@YLV&5v7S3Ccn$_dapzL8f*MQ z8b9)$#<=_f92p?7s27EbS z9uUiR(iN_#pCcv;wu6bNfNtN~p1IME8)f0|oT!X}Me(s`N}De>X*WnN zSqLhSrCy2=Yn&YUMho41&wSoO&>V^ zEvB2-BiTw(C3QVHU2Y(tkL6HWJu03vpYlMzmRz&xk@pSd)8mtg(Gl(y+EvyM9MIE} zF9cy@*BpNLqk2`78mGVIBD8Ew(fU1%Bhr(r%&_S*>n^tnuw&B;F`jDcVj@r}YP4F8 zB^ESm$D$=13+s8fVIITP*fwfOQ1<;IH{c1ig@1-(7!h7Ke0)|E89Wa76ZMGk$c*F2 zx8SAntT_`<2eM&*85q7Dx`~hy0?Iz5wL)jfDZ`@nn}*OVpT0x3Pi1)2=?f&Ri6$N= zm*8@j1+SNu5&Da<`HK)A^=y{Qu`koKW(3=+F6%t0`|oMQqCs6n<*Z)#P%HT^_)HD9ip z=5&)i2m4*c)&-BE`C^}n=_cqYX+)+l;e~cJF+S@92{hQyzd;o+P#7hE$s_vVgD1QC z5c)njSkRW}mU2tCa$Txb{mQ&JF!fJf{_s629pkcPwn4K;{4M)HU+skns9DRd4T3n{c`b9>N=$nmunP!!tJD*Qdp{ZyBk`kNWOgM^?xN{{U4;V@esYSJo7b zL~c0C!`4`-DBX<=n{f*gDBu6OW0m}eBp%7=$&=K1R~Dn4Cz9|7{;l1sJ5CjC9d9s6|UvGxF>W5m$&HTjbt ztv$$(Xr#u({Pwbjr}@|t)Ys9E_!3vM$*I}|*SEu^N817oAfkYsHQGXU$dWGYnn2?7 zCmXs(bHj^gEIH&s%e!?FiNI<$!SyJOxe=0|coblIlgHe>K={sCiXp(OoEuH@-#dFX z3MO9aX{iU=zdj@{EV|O+dzSDDe_1VL+Hh9-wv}azpE1cBG-aXGz}_SJtpsEUIDCO8 zDy#G-m@|q31-og(wa3g&@cp6-=^o!&^4>=9AIiu_;13AC@~Y?xtmj|r?&3m0Tse-DwsEZm#UE&uT!+SN{P57ra2%AKRm zNU_o=V|0Y`1WgzRKESHo@>NTXD`~~S=4$R6e^S*CTq49JLDNkvwjsL{4(X%n!Y3MK zQ@GH0nN5#za$sH$-g3c`ph{wx$LSu)Ivk&mk5=Pu`LVsG61ZEz`c` zHJ&FSgDw1pL-HSO$Hn@e8X%j;KAFM$@UyB}x+0KxMD8ehu?{SeYK1xb4XW}$p1_yB zATXvV3h%!R-Bb&br8k`)N2r-e%7wZPBM!U<+EC3R8!Mu^$(+LWh3BI1XgXIUg;WY4V;XS?+l0mID)oAH>@=jq=jCKlmHNCwG!0Q9jj= zF3Pu+^?L8*34D^qU;iNxh#AIcTC4Y55xRQiOIYU}%a zZ;pos(*0&L$5pW0J24l96m%IBz0HO$;`=Hy;yVm9Y70;VLboSHkS2ZI;AuOlBjQKY znhwHn>^JFALuK+6>ZBKqhwpc?EkL8e{IJ9Pms}=i0n!m0opEO=N>46-bAW8$2f2Mb zs(@JSZ*z=)tlEbSsRwg&#vk_a>qMyPYwNSV48OYbSAouzL2K2ge)+_xm7RVMXSZA* zTVhXP&|}#>sitBG=YxlWkInTuXTgo&a@;5X87cGvTnhN6)#B-neniU6@K~tv6nE#Z zY*1Qvlj3(2v;v$5RO}_@Q(jn-n66RWKnENTf%6MH>-zN-_=<}nhtfyALiL@I?8jh> zx4zFX;($$V2Q(E`M;8>PN{g2)u=P!RM^}c!U6_@W*2|_>%{#IN>ARb-Ak#x>+{@H; zKx#!s^7r>=k-q~{EcpmZgHmj+$~*rPbJwnWtrm5B?z;eOfhd7t+Ia9IWGHOl{vQc9 zLiB-1l?m41I{4!&xMKJMyah4^c0y}H8@TET|34Alb?68i?OMJyeU87tpdRt-TS7cg zu&RiDt|8&y^K!)s_?QI{Kq6O;t$zy zIe2?M_{+~T0a1YIlXG|Gt|Ikn2#E3;x~EJ)e8hYi*}z^HNq6Iy*90dtK%>-&!mu?= z&3*o~sWh&*di0$CZV?+iV2&e}4a)jn!%T)93|rQ+2y zBEOm{5hRRK$I`Y;cJ4hugU8B*Dl-YD$^`^!WtQIgfHplk(l2hFp;Vp#gonDV0v{WC{icnuH>17B__#o9X(U*r20;bIjK>tU+k+`w~T zjE4Q1I7gRce8Icf+6`;z$5rcHbIknPoc(Ax#RnFFGPd-pgWVrRL^042(o*W|ch$ie zTxG4?Y5UQSWdHkfyMa~WFMV++AQ`5{;`2Ka%F}5>;qNHetmQQdGsI+k&^U8pa!*1+L^t-8WZw8 z77B!HMVDt91kek#)-$J_pVb(h^W*n;7w$gOqr7@viiSmUn+VRT=|5@uA$>FB(`VRE z#ujM}vIePA5fj0ydZ8=GwYga%Vm^CUEWFA6jndH^vi%CcoLNeqSgz!J2?zk}7%b^1 ztTuvM1N&*q(i~5Y$p)eO!8`Adxv9(r<@`=N)Rht|ho$3xUla&%)tH}WJ~0!p$DF4h zz5H^8jwNV@iQ(9=G=ov%B!7d9q&oDrD z6e@ZKVu)*(yAVnty@lqaok+$OqzA@@B>Cr+~ha1JsYoOaaFHXJxXhj8KRg|esPHdSMS1|J`4%$wMad;ohVOkTmKd$Lhf5Rx@B6$CYI7BKnsR4O&JctFCFzN~7WRRKcpM1o2T zr;v$2ywJf!cMthDER6d|nM64wRB-$fj{b`oa;_x_U`N4)7^UaI6873xv)T zK$yU>X?GoQ9H}5SmSvoyqojGzBKV`iiR>+Dd=MY1BS+ryb2x?-CwU2ImS{-scF;-P z`&KOw-EVrqN9q+S!)@+&>@9orMD9F?2sl4}38?hBH7KMHSLyWW$ZIvf%Ie5REd2OH zRJ64BEYIZ*wmuZWqe;5=cx8>U&ofhci0BD8EjMZa@6+ICf{_=hr##y_&s_86U6#70 z+)D%m^d9_qWxg*gH~FP%C(C;UB#a%l_^d;CB0iQ^GZW{_!KdW8PMa^6z;4ynm@Od$ zhukzyb4D}e`nh|;5s+2su7)c6>3iQyQ;lcCt?XQ{)hV7+Ul$UjcTZLNJ_yCQL+g^p$<1 zblFaZUa+5--3OCAfo$*H=muWdjv))Pw6k9>v@*>S*oAGyxw$R^*Chg93GDTo2{ms9 zul7_bucxJx-d^Xf%t8+=Wey7c>m|9EOy5)UKvhxhYg6?Q`hY~FbOLP|a-h|)v^6c@ zL46jeW*SBJ)k|yyUr29(n#G@TPVD;|p(Y@$Ti4sakvjR#=OUKgP zy|BA;hWF=tuFpB=KRDO^#x)Pu?9A*u_x-B->|g)KI#)1zZ~a61c0X@biu5y-BF5Zb z;`Iyh=P&=2IF-Dz(f=Ep0sE?Lm$d|NFTDGZ_XN8XC~szCUcPm+o<%!0tX!P@s+n3ig!`z zUkLdvpbj-5%3;37a$n3^_VCi)wROPepWIljCVO`-{T?gPSdY<@Q-NMo z8T8sATQ-PPH&-&XJCSbSxkMj+tZFxy?XuJM=b^NCNm_GEC?htVc>&Ax87=zv*cQmi zypcE~e#mBOf55V*@7L+q73MGvYtFW0>@_#Kf^~0zCEzl2p$EK2=dh}oWg8nz>L-p# zz%vD981^4>SwPs9WaEvFw%p;hSfaANi{60>DtyHQVUVp#VZJmgKGrwNHBT9p-mIB~ z$7e+S*!uJFLkf#2(XlW2_G}-cvy)p%M#c*pYwYv8^p_{J{Zi`@3#WOqvdHGQzw0&q zLbbL+(BNO!sJ_d{N5H?n-h#QP)Uanc1>wH+ZUXtBABNT%r1l`z(8K0NN|&9*R2=uNeL(u4JPn$NZpttmm*rd>+lwc525bZ;0SLMa%{I!OAdd)IcO_j zE!-X{m#(!v6FVSNwD3_jqgwdLQ;Yu_l_K>C1?#KFOWe&`tfOi8T2ju6gecuPld{{_ zRsmrtNqs5HPg~ADUbm{^k39yGpFiZg@DkpL)ZHRw-%AwebXc8r|LEx7`=295|KCSo zZhy+(;iAb;cX=i%cV3=o!OX_`Uvtwx(;BY-7z2pabpi5%XphO)qc#cNhII0w>Lmw} zjr7s7aK7h;+zFfA*2)a(E6dooczlCdIsLF-90+>L4J-Q*@TdGTGu5bzU`MyCBX zIR;Gmd}M9F-JvzgQt)pLw*6lvKnZxGFh=_&#U+XQC5Xerj^IJ<&v<%j1;IA=Ssb#b z&EcW;?(vM8a)fs8*k*=ktJf8bwBtL3OXmt^tEk7tvkXmhw`J)25czSl!UT|Ei6O!1 zsR1SksY7vPb|1KZa5{4gG~~d0Wqr-yUaU}~x%r~ev|r{mTaO_r)x+ZsyDRwG${K_< z^^L=?B$&)+8f3}A#+rR) zS4JTE5#ZtjrOrGwv+9YncZNn(Uj3@`JEp{Y$sMpKYzudwp!XMuu8ycu+ zT9KI!K_sy=iv*(4V&cK?9KqIdky}=TTVhe zGWJB0FJ(kKcJVbNw{}hlh>-%9|4sk?PB&??~+_ z-b+4zA}X-~yFFzRAM4sT$`N;?0ftb(<%a2f(?Q}L|E211P4(h-AMm_&KOZ+Uu-4*Y z=UWM`*2b-U&?6HC`ptqx^XVM-(h7D~8AiW<=#KPO?V=_=R#;s6~$wK+e>2SGWgTl;~O2?K{1cu!70nnRJPb=XKmmyC}qGEQSjzOi$SR z8wTP+j{Hp?)_w|*Mos2YsQ{+s|4wMVNzZ!6evds4-`tzWTM|TruBR4x~Nh#MT1Zmjxa8Qad?JWAryIYv+H zlE)bW<~66%nQY~(zuIkA)?H-i ze~Q__=$nV)4TkL>#zltsm@?kTSE4Zxlc4npuWv@55+g-iZeT(~j@s6hoCB9;fjNOV z7tOm>|4nOcyIj-;ZOD=qA^Y{Hdj}lXk9Q9YWi#4RPSgnBptAFWY9*0dXOJ~x5=nYs z^P2d^#R&L17W6N@=FioAI*Iy+dim5B0lzWTk-X|k0DbCr2=j93#utsPxZCc+6(owv z6@R0cc3~y}@}4+r>L$qmnU7a{|6i6&x!#Ou+=HaMW<<_e#Efo%hH4K^HI*pe>t@>r zwdl-v*5T3T+DC{Mz2lJ>vVZi2EJw~@Eb;f96Y09A_3ElpeL{=DYr{*4@7T5VO3^o$ z+A^Devy~Gl1=DnCDV_wLs1v!AX66Z*UMDXS(aq|Rscm`Ma!Lh)cgA5TTN7X3RKrZ% zBh`Ia#*0x`=0MW4Jyc3fD0%tL>S1<*<&cy$(O|w<&ScfgF4|F*(@p*YJhJZ7?nfTI z1Y@8Bz0js?J zD8+F#Y$>jK>9R=${(a(%wvybf+?@~l<3jsJ@m;DPS@V30R>9VzcXM+iL(0qs;97-* z$V`{lSNe^tuU2JYLF+$IVkT_PvIXTz&=>(jXTovVdH~^X>5?bDV*<#)2JU zeS$#Q7LWm3&4z>)WhIly>Y$aOZ{YOw)PJnQt`R(||5V&$X1~oTLyZYS+ z$HU<9Vre76&(Pj9aZj^1a@Wa(Pku!lIrgg4(R<3?GgA4q7lJAzTQWkc$910(v-7Na zn8rw}BFwk1QxUVXEGGfelJ%z>EN50AJJP~vN(ieoBQ;%6XJM-Rz%$@4{tD`7(c7Sy zrVvpPfVvNW;2K1dq@l2A7Yddg|MLMmgy#=lW1QBm>9QDPcA@!rfmSNl!^MB`w_rSK z%9}AvR*{bu`iy=osNPR`>+`dL@dzC$YHJKB2BCnheINL7T zDiKj1$0Lg!@87@Ka&QS4ulrKrRCFMmXliLOZ;H)K>XL%ll|82KbUW zt#mNye&~gw^mm_@7cX(Cg@Y&)^THnPyUZwrO!9v`>2;@-HfPlDv;ilyffC)(tr6_wY%ps@DW&e}SW> zuh0L7K24U11tadiKYqJQOn=bu%%$iSZ)bU06>5|fdeN8t^xE~8`<8ITM=QD{BF6GLYYeKrMp_YSEF%%IOA+^FRqp?&LQWLjGwzMvC7x4 zY#|<@Yd;ZPxJp8bhV6NxH7Ey=eYGvNhTZGcruACaZC|z_ zh?R*5yv(d8l9Iug7Vhw=H9*n#lfNiEOGsY?3Rg?V%Hf!5QRJC1Cz3kcwU_T^)1`d< z2h&*A%d!y~CJdz;fNa?Mq2CtG>-JeBe3OG#93vULHxAdCV?t4SjOY|+q7Hx~{Ah@- ze%MDV(Z7CtAj{N@w0P3uzfbyuSpMiv<;IWS%O~|{jZuEinZA8x;OX+{Pe>g<6Ijv; zGPF3y>>Ms#fiD%;Fl*ozm5BmUqg9tFJAn&0hAiuAx`vX#q?N07>yQ!pF5eH#1Iiy5 zd-9~dUE;HZ>JNn%vO^0xOS4CwNg#>pDst~cD7x^mM&|;}yE1?3qwX~CGnN-pC9<&G z`sTBt`f?T@inI^-wnRfU8muQ~W~N)EbnyJOYO|J@$rJr#bD1^hUi{42#yC6&cvLwJg=l?6+jf~-Ugu&(g+}hvIZ7c^eS{J9Cmji8<1kd` zahaCQFYh!Irm18CQpAOdbvQ93J;%_EAMY zZAu1qJfM-K?Pq?zs6U6L4jvfo_FCJp6((UPY=(fL-Etp5VD@aaTBF3qK3}H{eKGaL zX^nc;7Xcm1xN$Eo7i`K-g0C4njp%+n&!LQE=-|@ejt;-$PU$Y7fC!1g*!Z-{bDhuG|YL! z+hcY8tMc;Lc>iBkGL#>~b%;VQCkGb+k@xg|#(n9x7&0yjzFZu4%sHBvfy*4a zTlHQeqPRI3e9kIfdbBh>Q=e%E!*QD``@h+EtS(y9kp0^#> zSE^53_v55InAfc&9SGWxb#ebXk}<7^bi-r%SEv7LY&E^FF-Yi&&RhDynK-w*V4~)M?(|<}6{9!n-r*i)vgxs{%|_11e`V@yp&9 zK)Oo_POdW7zwzbXq|awrnXlLKoV=p4nr@1WZbsOJadBSbuI;~yKcdIQ znaAC|El%eEO00|u?eQY}QaT!bhwa=-M6$mhr`7Xp0*KQVDC%=C=U!(-?n;a-4(e;S z%)Y>UP}75{lTlgdaAH9o;{^#k03P4U|ti{D@J3GFQw z1lY#uWQ2*HA&!l+=$YItLCWg6F1T54Rr1x=_A9uh^7SlVGx0Nk)G-w(afR!oFGFn^ zJ~31_Pu~g^ryuO6b981wu@XTRiy#{D=JLztwf?W#&%$7W{_2-3FU?lH_IU%9Pkj1UXiYh2wAX2Y6CgWOBQ+>F;K}A}rUaAAQZWbj*6}6xoY|_ql?@ znCm^4_|p@?Wf=?Rqa+9aei_pThw^K%?!(lMBIT4YnbV9D53>?FVIR)Kg7VhBw49t9 zK|@DfXvbyRs`@A{#@3(euzjIk3xTzY21pPLZ~H0r=@eJhJlobg?w|L`NQ^DCKE97( zxM|sPNvwiPXbaM|#~myB8jo10z{X?HSBOjXC=I zMAypwu$L9u3qtu-oSWOJxOT2&YNA6V)u-EaWx0zz1+H`qi)FB?koF$ zA{1BO@}n{3dTh`_9@YycP*0)$$jg}5-%yOz$7JYRyTo!|>nAxw17hclXszYyRE|$} zAg>w$`Jj{>JO$D_!j>g86dAZ|)(#+L>E^r5uE&c?X1>R2=%`}Y3H*9}h6}7}NHR}I z{@p@K0X|(Sl?g5AHGCn>(Qgb=8WqbjcAkJjx@)qqXy51&10x4rz)-RM%WRMC2n(me z;y^3iNpoDKyB4D5H5XMmQanAcdV2=KykzUFJ+`%Zyh%RwB#Vfh!b@^4pAIYzeMpvv zeD^2zqu(kdX>}5To@mVeoU^RUY0Of9@;@@K08Y!kgvy53rAxe66Iwc0rNU)eQe1X! zS|mB+I+ax3&3C`<2|+T58xW69TI8J-noZ6!7u&85NBn?z9L0`b9D9VVxI3>7#^Z5X zXmFaN6@zym;mM_~XU??3PU7{|C_MO5CW5^SM_kx5li>QvAwN?I|`299mQ=_}a`VE%RE*t5{m5UOt>IAl`B9LsMwLU)*qW{5kZz)7sg4@N{{jj zM(WE8l2NEyxf+nd{M7`Xxd#-I;EV%{(YH;8DIMVr{tZ50myq?ahD|Wwe9vc}Y zV;}#9)phhE{m-iwVqdU2k?CX7&h{FebJ}|6^{;u42y-%)?6fGx#4g(@8nruJo62PI zl?IwtnuGQYO=yg!z(A@DB94M?!GoeV9WjKc z`%vabr^7zAnE!4EctglAm&};V>bEE7kGQ~KPoN@7Iz@UI#1V>(zw^b@MYP;uo*!o> zn<`H0c4$(#kAJFhXN*hqg#al(_a>_%kJk%c>l}hKyOZb%tzaSClf%^(b5AUE_8&4D zM>p6RTn#gh+IBgEUPO`9y*V`HzJd15{}5GKG#=9#uG`D(&_Zu&ovOA^3cjw;*Y`jO zo@|~L>DM9+r+@XVTY0ZYrq28k*{rR+!AEs;C8kPSPG9j71fk3r(Tw{hXdw^F_Zw6f z;V}r|xB99cpDT$&Mb4p!i~70-yZSRG!6~<}JseaCD=M68`J$&?zXe%4om8t>8F=jG z5Shh3**|>6+VkCSQ3>$(Sha-^>*N}N0Cl)_AS+Ct!y`A4c3&ds3*8o8uWH_J~+SP6U+wvEUi4h zEP6S=%qr?HYf!vc!4jd4in~j?J;Af{5l9zn`BK}GLwOQn29_S5W(lgE?(P*j*<4Z5 zy0485hB)cUcocXJiIwTUz_xd`SA+-durbzhG^ZmDYv=;nkDh%@4y$j!Nv67XpPzZm z^q_g8PSb$0^Z3sKgt6EBs87$;K$CbU?SD}bz(;J+R;p*)x%rF9{42#PL0cjy(RZ$xswuS6ob5K?2x)y=%~ zVfm~AH@^4v+4k8oG4!2#<1%)(n9GYqj2v`d@LaQnYe5|`Ql@rId{7hr6|D-~oI*fd z(o5B#|7aY__mNlRVrl&-);n?OTD2;w(V$ETa^Aa+`WDVGVw!(%uY!wh2!ev&Be}*2 z`!Y(gMM2KCr?23dWALFs!c{NLu~FDk7?7ci*B8v=>9E-&A3p-_4J0gJ*4n9C+-=WC zcRke91kZH~ckpS$L-7XiB`nRARw5hY0^S{Aamfj(Xl#NJh)aJd_i=*?@?I@4Mm#=BZ3UKKH_(ecC|jc7w0g{sEm3* zk_XIi1{y|f6*ahh9)^1fpf92gok*bjTjd#HzC#tlzL?z6I(Ti4{55Ncu)8jBoUvh8 znp_}g>GN3>9tPzMJCfNoxi=~=aJkvwW{cz;i4~Aa(pwIguW;Tjz~4wJt!+98YwbIA zKz(wRBmYp^?!W!OxvN}FK1w?B1qqHA_dD-%&cFG}#um}K*x^PlD=OCm@T-K#fTiQj z{&OKDHBd>s$S2stAhK)wc}Q>8^JX)VdjPug4X(dRnXA027s{P?GaBM}!-^=X8bW(- z;#pp`9A5}NT6|Wt@E5I)9v=$jCu~`U7wgUcsM+a;JeRLpJST2Az1!{N0MCy}%Hhdw za2aH++o6LB=rrQn4_;!DHrg)&w*MiniDyx(fHuy>K|#4gdyLwUiN?*(6Ng{$QwakP zPB^bU^hPb{hsRBgjA3j8dme9d&R-oKXQC5T*=>~&PIk$Bg_CnP)NjJI zIanC}D`T7)N&`2#YG|*2!DvD1e*oodkN@buh0O>|{uE!F-%6{-s&_?jtS;-yIj;_* z=dWu$MzSRGb<7yAu=hRcb<1C)WG;V>7ooU!(h)cMqRVUAPLmW5c(n|Y3L?BO0t73SU1r?V)VMl+V&?sr- zaXA?R^(_1NaN3-~W zd+o-dQHq;M6%dn421LHS7`4l^;7K;%x2(f`zTS0xD6~dUnk8H!lITqeiNByap}1tF zflhOH{@#w>fZCvJP=Bm$WxRBt8xdY{Kd}mIixZHLTN@1Bhx6(^=#ihq;w#Ktnm(C740cVW~l@=-YKZH4xd6J|M*ZbwH)i#V0;c(OFn~>!W4g zKKorfH2F4b*%F^dr4d>8NkZtRKE0mXO|zq$nfi_o|IHp=m(vp{CU`XooEKa&^t;Rt z+4R$hL{K9$nXpPKJ!V`5gF27NGxdOq1xa^WJ}>z@o6BOE((jH(uahI4X#Y1$5yU?V z&^O1ulO4A7eAO>BNCbOLk%P)H<4Bmf7Axm)Aq;)oR2Q-^_Vz5*vG?eiXcA&@tR5-> z@3EusJ6Il$9C*fC{Eo^ty1_V@-I!Hu(|)mn#t-${nfA&1!xU>|Xpat}B)%WNrgM(B zEzRZp#eG5VPCW2M1v#@uen4`{AA8xK&~FN^V3jvzjDUyiQatYrj~CK+(*sW>KFV_Y z<9xh%@|j^&?SI$i1>2cc^;&bU*0es!M)@H33f9Zi+ht~{yQ$&vp8o&4%$({a-VJxB zY`v6fD>E-?aEY-uueaQoKFLtk|1R5Q;kAaSW|fJTf!{$@srpRIUA0R6n!9u6|FO)% zmVK`b_w?Te`Eg{0#_g@C>^;|js7ki{@3N|diYPR>b^d=Bm;$eDjJJuRiE+CO*J0{^ zm-(fB{0?LJYnWsB8^4C75WHdyEK{s#^5wn%$1;H$(hI|=Am`gB;eWpEi?!fl7)!3j z|1O(SeewUli{#6)s6LwQD)@lv<|;?bgiekYZm8yd>M7iWHT`xX%tWtNEz=E$GwF%0 z)9`5MO-O;7!3zO)Q2%MW3^6?kIJW;=lyfyco?=B`e=>DyqrW?gkIgZ_!MmU5)y|UN zTSGpYJxOGG|3bM}P&??kUG`YMAuN=;OZBJwf|gms@#fEjm3p+Gos`)p|HhLbhqoE# zm%}KjZK)G)E7#s7$t;urhSY!#I_Su}HaEyM(IFd!Iyew$C$pdN;XoY20#@S24k&n! zi0EEzNYSSjz2p2Jb*e3|6W&CDfy=F+Ri|W%>jV3Sfl^RvF8v8j#M^DCRSFiS5U>W^ zX_len5%-c+?A7TonPD-jY1W`9=2kTj=I7%7EL+`*qX?N#c57|;e~D@3GIy;!(z5Q% z{)v5%#rNG|?AIu$QF_>eO`tr|HLSl(!Xtkap7`KP{YcQdq3K6aQIp-2PIT^>Fq5tH ze0x;g=usutw&e6zB_;XqHpM}%&ILgo%aHdFytb<_SlN&Tzi9X}62u8fXAw2|`KYn; zEw*NwRV$I+`fKRTZ-{WW?9Y5Y?_4@QF#_9sH z=0`N|6z=yf{dYB6hn_m?Ernq!1s_zQPt$gASa53*c{RdlBGafiR=Okpz9qo=b@)GH z%~gU?uYc=xY42#({aDK%nWl8oozN6eiDN`<9m75F;X-BWKg^ug0W>qibVtDM(z|0E z+z@^j|Xu`WG*mHfUaBo+EH2L)$7xeqXaLrxb8e zT42%a3Sw&r1zT6cm4N4~>5KTwHUp_9(0dP}Irkunk5#52yMKP{1K)u{I+6M3iw`>j z{LiG{<1k%}{PN1mdD0ru8DQ1R_=r3yTI=mRbtS{+gxpH&{fvZf37{FnRp97UAR4%{H4KQyjX@)z^RP3DRv-MAM{olD&RD#jYUaBcHBo@((HcoXQSWKUrEA~jF_zvFIAS6)6`91D?uImk~v{=%zxDT$V@S@)p@&NC@@XE_uo zV>oJ)3L4u=h}`Wv>2z( zyBKdgvPV|K918l{zP{Qe_GhXfp;UiE{hpnMVEmi`)Wj_bvo2&Vt7n-o$_wwgjVda2 z{f`K?JSc8NHt}TU|43lVgf!X;#FXDW?eI@^$BG)>`kmk%+DIRF_48@3exs19g5HP^ zE*5Y1yVZv<`v;i!%3Cngv@f9abti80tEOh#lZe;WP-jq~n`Zf|SVaW&K(2!XqrU&p zg~6X2Z7me#nRYxs*moa6u;W+neOzHv9DYn*2mYum?-F2fpomu= zVbm*FQ64|>>&XHb-FfeUZidU+uVSDFxGQWY10MB@$+PFmoo0qk7~;fgWejS437q$_ zzs%p6e}s)Becq-l&dIft{U95Pg6IPOAN_0ieN!F*CvLjj;Hc1!$3>2kbSeI|WTy`> zZxn#9y^eRkk3eFWU6Qy+Z6aCs^u0!FZAdXa|CH~7&bR7Usg)YJ59g9uC@@pc|9Fy^ zQ1jp6(4>)CHk$4Pa1|b=vpS{(8FhV!bUb!R-F^uMPJn9%|C}kI@LdvU3@e~D>t8y# zEJ2Hw`Pp99@9W`G2Z^s#>(|6|X?Qqbz=W9HB17NEKV^o=Qi6?8p)~eUMIjYXsx0U3p%avSD&`^&XVjh9e>4p zlqAf6p=w^4U5R35-xl8&Vz>>Pn6WgHTDj(&Wa=x-K7DuI^Qs!McgXxYas+ZdDGh6~ zn4}YLS_0}~A6QZZM&SpQ-_xv152*X=poXb_d`-UA!0egk`r&m9~6#qYUR z9y$;(5~2ql@o+@1cx5Q${kkWp&L*5WU{nDoXd8hSi|8oW$-3VO65Xq=V;sSLN)iPO zQ%3_4!orMwZ@x}v&5|SkzGD$X$)Sv~G?gNZzEtcko&Arsf@sKKaKiZLGynBDyW7Wu z{dwJ8 zud6SQe9(5B=uvFkx->I*8b(eQ6 zyUZEO-%td(-z2LoA;hN4yU^{q9D2Db!?I}6wo_0EmLS;vA%=)SX?L=EmFOP=x?g!h z)h6~Rp8T;7fWTZdjIw8%s}-py7fyVGmAF)g5nBWcCd5jP%m=!?5_TC!hs1RBd@sk5z<> zp=Tx5;fLwBp(;Dw%Q`~(F!JgE>` z!bnlKt@#30p<_hEJKBW&qq&l)N%9pt%ksg(V6iC0VE&-Wq)AR; zf&cb+=F4*OG}JVGlt6p(x41witarWk1fF+|?q$}BJ`%@hy1Md<*Gh)}cz=MsY>r{J z@aBW4YImBTxK)$1NcdxE$DS42sB38zOcluKi!{DtD}MS~p*vmVu~W}rmR>?8UuhV_ zO^JZ(5TB_psoQ*=aNHD&siNG8V6IFCr4FMWYmBr!dO)4E)u~+YWsO1SQ#k5#%4Apy zrUmtK{xBM!a%5xBtoUl4Ouu-$XRu&>Ad|-bEiaSO=3lA*MgqD_%JRCI2tnl&VM6(g z!CTfzOrKEC#`Qm2+i;Bk%d}M0RgQV4KNay$u<}!pQlL(DK^aS1{;}Z0(eKCOPAh5J zft(+43O_-ZA+}um3n-%w@2l113jq^P(nMOhNXFnR>&2|?&xU$((YptQbKz&KsgHH5 zZBQMu)S$YFz;(&vCx>ZFI-|WYsi)Q!(Spgd^!naAJ%*eXXGmVenDD- z^$Zw2TGhT{3?Lq69t^a{6NTHDfSTt7!ymGETFpO;H@2H56JONz*_{l$l2 zoNc&BeFGPfo7)y-l&GUHc6Rp7TPD8?#Ee{pvi$WNk4?vPt?Tc(fI1OhJ31mOOhyQh zkbgZ4DNx5;5Vk%ZFXykdR$v1a*vQ^vMCh>b_RytXflO77f<9&rN2f@~lrnhw#B9#2 zamc<&r1bv?$HKn7H_N-qEFdrfN`_KkVmfaa8jp=PJI^P+ekCf+zYqLE$mwiZB?^3r z%Tg_sO`M{gSRRHr#o(dHx~tNtBYrV)Ej?ueHPEWlOiz2&L5ED#boU(#Kw#6; z3M-)cx~u)y=_I{YIIlRXi3**^oh8Qx-FM=1#i=^g1Zlgeh$v!fr(Gg;py>cU;NjF& zszba#U6>;jh{B3>H^A#FlfJ2TH+(2I224&;QjQKj`9X7kX5XC5L(=n0&+@?G!L+iA z2QtJt40W;j0x$_4d-aUug*-;E*w>((9@2Dgln}?5h6wDBiLTAMacO;GXE>o@#=uAjP=zuy$*u!w{SViJ7&GPz zp$g14loy+{*0Y_8W6YWlZ~33#M-yb@8S(t!OZ}K_S2Mg(Ww=sT*_!IfM&C6WNcKN5ZOwDG?B2mzOMuI!HPt5DTw|Yk}uvk0;r}MaaS#7SC3lC zOny%3kPR+rmknxZ_xY#JbK|NYCsFiq?sD7^HGtD!U>E8M46i(?HWA97{24G(slQ*a zAF`)MX!pqEmz@9Fqvo~WKSYE6J#}7~(+rUYJ#GhjrayzKUj;4Z3X7&O#WlN32+(#W zC+9&z2rQm>@KrkP7I+A_3>;Q-UqhlK-VJ5T#qTnxgI3rvxo-jE233Mg^Ff$onV4Xc zWzT?z*^5Jx3g}sCrn; z@QGuR#|KSxbf~EFil$)EkJF)25;BL8gGBwY12JtWb3HkRo8rM$DoYJzwIsW{d=Ufw z2ks>d!}G9g(|!*|u^5hAUlPCl1;u^d!;-=-_3^;)Ge=T*a;c3mZ@rus)xP<8L5A4V zBg;&@1i?}-&V1FbZru_&x{UEEzvS`7bN#2roQ!dXY7;Ev=ljwg_X0Yv1uHV!&v=A$p4gH4?HPwv^gAeqZoSkZB;?d+`#SI4^nD%2wTbs3#kmo3ph9|HN=E-XG$Q=@6pk( zsu2`=w1o(?`A#~P7kxUF*qhe(KwXwObq(Dw2YQm})L`KY^wJKKCbZHjA-iGl^*;aW zbB_v2DJy8ty`8PSQha&PU$DP_x?Nn(%Fa+3G~8skJqTb3>JN88SB0z_TiAZ(snb|i zp=P)QT=X(Mz@v0{zJg}#ir%E2UR%2O*FO~>SDJ^$mPSgzRR+64Ly-%@Hv!`{!|>#vUTp@^6Q|Q- zCI4n7bX)un(_Y9QE!{uctNliV56wKJ4lyJN&W;`WCc8*8$Y1c~0(J~-pMhUK>;4VG zLc_{iPK;^*mhjt%XWZCr%r>aPh`@q_6oG|1@X9SNb}Sz1@n zOX@$x#wo(U9~9LokYI;q1w)ZIOo`#{nKFa;vG$89ot6s!sUlCt48mdW7YSc$Q|%dv z@+R6N8Tiv)^KC~G@UMw#XI#8+s-`L5dZZPM>tCX{UHEak#r>BBJT&yj#;#RE^|7a& z%T(1mLOQj;?^}hT!~4>JHs6PS!oAR-9{b=|3j*1)!CZOLVdT22y2QR51DjOM{+A<} z;ZBT$YlN9OOddtBszud9_>yF{jFTk#I%s^0wZUD1r2VwyQ@iJ2oNxF0XJ@Xv;n)4j z{B=$aoEG9xKJ?gjde;4udi?@5ApqLycb7j~I`<&lpX$_qM667=l-*Em%)?4D5rg`f zI0n$z#ExYyK1t^AqVuq5dW*UF@j^QDup;R4rQue9V4fmmO~yZezFB{#+X>7>tvgWb zDU5qjWugf}ze~A%Ry}v;bwzD^AAueD?04&W^yZVFMRD?4>g*}h25gn@@bKFkqnLJj z;5|Wx8^=9J)vnMFtBBtLKyG-~loKlQ)R74xR};geJzIYvOba>W%l^LhWXBPaYb%dj z-)(BPrxn>H&qm`PUY4G5TZPQ3*ld7?rt4)7pC5&FsS>Y2{aa~MHCoOE=U(_1=PjY& zzF0W>`N6V`?_~I)VV%P&nW+1sl<4+a<~YX9MFj3=bY>NO#?6G)Jq*dzLlQ2gEN7B< zwC-xx?JpmWd2M1?bfGhIj(zp8l8}r=t-O$cCuJ|1K{H|}F^(&Mx$&Y(!56MFX!ksc z8|Qmz@bzr87XDdE&$~rQUhOHm#E|hGM+w<0@vIrZ6JtFMo1(gnBy{uX@48iOPheeA z$$yFhtdsdqc~;3V#{ZNjDSkGNAph2>d46?#8vkE5VZK}L$s^~_z6Mz)z&m^*;AZ~X z3T17uAU{{V&{POb8OSyjoB-Xq#Q2%;>mP1kZr$Z zR!O|)T&RxO@vG};xBu6^QdW0y155q66qWDRxC&^{=P=ZQZWU7g+802|`)7Y*w2d!? zf{*kCR|oS;M9<$FleJw0q*kss75P*(MyL%-f0UjT_olN{zPTb{rFYZEsEC8(kZKCz z@5f0>R(wpB7YLm~JUu;1ZGC*|arT=Es!ZJg2^2}pxiO%X^TA^X=rD8a+PC_^cD-i}y~mZ@teA2()VfZ&}c;Y;^C~?3ZJvW9}_UO(+;A&!>^=iyN_snEZ=3@zy z2X%dAZCclj%SnP;F$9-AUNTvs5h*ej3fz?{51)4Df1WyJ^LV#(K!-a&SCcP}xf+P- z`7FuPQ#@|PeqM32?BHZIFl(guL{|ZZo{NQC;!|qJ1(-?Q=>EXI) zYS%)J=M?Ga7pGJ9irjdA?dy&;rea_#1`z-o?9Vgz| zA0G)UPqL^oOfu-J=kZYmfMao%s0om}S9Z;C=z#R~+W~NjdV1`5PgSla070yuxP^Bd z^c>Fq7F=5=%v6%!NQ{(K3M7$9I9tkH62UOum#n<+^#b2bOHq;j zg#)CpBv5tK#t{&Rk+M+F8*BE$b_@rRjoiZqHqEx9*?aofH-wdOI}!tpf%!dDqMKHbfv0L%Viv zd#u&k5>V=&Y&Ej=ErX#H*<(O z+pfDJSeq1gf<)>pK-a@>WqS=OOlL(dw~Sw}phac8QLliQcDrI4z?57!A`wWok%_br zJe2g|;r}Eax#-=^7JUBs_$(W0rui*sRqfh?_nkn(3&k$r+3utJRY0 z%2Jzp^i`Uw@RaW`tDV`zZ)Xo|iSvZKvShn19w8{+o`wB=+w(1k(CIS*39GNGM9rq( z<#l=y5J`H^{6{X&+T3KcmR@ucBSrw84v$jl5j#!rjCj^|Qn@-pNUz!9e3pC~(u}n0 z`^%DxJ_CLYy}-#;DYcu(taUC0^)Yk8hw7j zq|}sZ`B%A^vhG~^hZF15i>3w$6V%Dw+4s!q_!srEq(9o@JzV&uE2uI`##6+p4`%bzyD4_L3wMjZ+L8tJdfG}1w}EfI+;9H8iQm~^ z#$WffKZ^NKSQkz9Yqx-Bzw*OAqnUGH_ObTY(n7tDue{1toQjD{QEfQQ+lcUXi*P|0 zBnfl&Tx9z{vTbr3IIowT3!i>od$mH0=cd1?YqJSc21ix0&w3-KLfm-H*qPSX z?qGDzN}%y#mq|fH6TnZ3fKwSu%F#3Y@Hi%y>+rkN9XEoj$uZQ9vy@IW`x`wa%@;q% zQ=XAs{irCzqZ5+!ZT-Lr^TAIR#|)oe#fCa6zK72#Z9&V4a4sQFb1*0-Z%bSZ1PmgD zpscQdBOqSkFH{&@JDTJ=ZyiNJ-why^VMJ^khxN%Odu_eyjRS9J+MBE^u^(g*83woT>5%^Y+wp&0|yWks?r}W}SxNsppc>#}}dt=i*u-H#00_XFUKDK%7sEjzd zIfN3!nVaoq@(c#kE>UD~Pm{w8QU>e!?!WTS+a=iv)`gxc>I`maW6rikwv?GLk1U{F z9^(}=wZtGEo(g%i$^??IUG%^&IP~T%tJ815PFdS1dTRg!ni=45Bq!)+0Are^ew53c zpX>i=%5WvD0JSSrBd~@8*Ck zJKk)})S>IMddLzCNFaU2TKhl?Y?qwbR-}~8ww;gqcmVXA4f()-u3b+$dM*?hx4K2N z_%Q+X?lBs>%2PVKSw1-ax*K1|e&G11jlRvImZe1d_{W?W zt{8iNrXn3f*SGC<#xnr*-gjv{I0UP(m|YSWjY6Ue?k^6v%GzZW;{FxS%ku*UhDyNj z2eXS$cj7iyyLmEpCdk!durY0Ov=DL&)EhIQBR~Le>Q{+lpn8S1UoazQe2PS`xj$K* z!qNvPY207)3}xou)SCbHZHX(vT8{X+?K`~*39Lw)y)eQMN=*>oRTr>)^%rMaR$N~~ zsTvADN1Yu8KR#(X_sVJBA{5&l4^rStTz+MFet#Mr%UwK+yi^WK!~x$dev{Ar5x(pb z>$m*TL{fyO^-f02;;2d3G%eYx?A4uR zuG0$X)ttQxH2+Lhaj@m1v1a3>FpX1*xc;#~^qLm={K^$4{2GXP-*u$!toZdt<84W{ z2jRhQ-*r?+EV(t`HU0RZrLWI|LoF6&Wc1T%B{T}k7KZZyPvWr#T3QQl+rJz6tG>CL zFTZ&giA()wMdp*x8~WpOttW^TjJrV4az~L>`NRyrx#CLPK2Y1L`f1SC)+TnhY4FCf ze3dz_+PkpX=(GOoAfOXUDgSZt-Zi^vIt*?1^7NU72+$H5K=LIm(PISzS4lYHvdz9c z4=$F`%XN6NA>ihi|LE&nrik3}ZrsyHCNmdY@lkkgpT2KO^?!Mop$OGnqD8oF*vQrWiju>FMQc<)5g!GEYm*V5ME4{U zdS<~~DL10Dd!@SB?5GWiIt+ zaPn$j6D(F@qNrR2Q9VU>BY-|_ml)e_u$lk|4Q^4#i=tu|mXU5M6;XtDspPLk|4@fQiny%N^%?<*g zw2_AOmT1STtNLx(%DIx2o1lPhcbIPR!p!8)=$j_jq@QKeT1j|@49ql|JuG9TK>vPa zNuVbom=X9ofi`#YW%EDzOmx(Yzuo;y{jP2k-24Fkk0u5*LEr!lO#`5FteRAgYwr)P z?b_(Y@`*Yf^F|SoCE&;<fQvJrN-sP)QO&|k&m^Q1P4g>!7$(?4g% zY3ABE5I z-rhmSIl{BaEAznP85IM)!lXqvxmgtKF3J#_#wOeg?#gz1wW_TIR*|plU%tL{8=Ae%Sh_2v1Lm7$4J=deJ}7Aa}bF!Q3YSDLv0Ve2+v4 zhw9M6?clLM;cXQ3kCL>G>_!g21^@}oQ`G{MmxqwQp1tqQz&f3~N^8hheYA+EIjaF!DtC*AU>?uq)>>cI%8iUeL|j|W8D9Is}o zvHa8ZYti)V1a1ivqRk2DhFx-X`kjwKQGnt=ymMI(W(3l^qNgY|Mhj5rrH5%gmHmnY zG%CFTQw6D{!w&|ECdjAZ0-xX5J>tDp6PnHp5GbhmB^E@tJ z96W&zKJZvo0g`)UOqQ5o6ZG?=6CkN)*8Yb`b>Wp>4U}7BHV-#CTM0snkc?P=N8VXh zJ337SHvQ0#_P{~K`i7YQ#96cB>up5J=CGz4h_OU;OL$BE$vXDK99%R)j z9+LLb{3{e=28b4Q`D&GK{mQm8!Y}CWH1Nkca>^~9s6WL`i$Bn3d z*d~q84(;f#*GO9sd)iZvv|aO$>9J9BTqFqFhJCwu9AhUuQb3-56Yo{gxSs_p>6eQp z3XCoxyEicz%Em5)=v<7Kx;cjiH?u~zjn1id?l2~;EwXT#j$nejHVvQ z>0cxhx$f15Q4T-7@h`&ro?qKG1#n^2CP4_WVd@r)y!m{(&*A)Ug4Lzj-(+-3&y~m7 zbkW>ozQ;mhm;%bgT+D#VHLiVx0x``EWjGm|(%4T_T)v!^+7JntW(X4u&x;AB`7`Sb zG$c|;PNC)3jTE7gDs!uRp2*~u^h0^Q+5!)m3!DtwRCEr`;{$q6-5`t-B3>huLR{op z40M-$G+_fM2qZjQl?}(`5h4{f%B@ocn_uPMB)6o!EhtDWa~l+v`tsSLZ(&fA#H2`V9w`<9RU+w=pC-wJ#x}-**{-beTUMji2vDpTA zoWN-08E>EIsR;?m+W=54tberwgB{PYshF> z*u^W+1#1HtK}_Hf^CUL40-`&PXa6oE=AWFY_4I4iO7x71ADQxLH^Ty;MB)MM|0TMn zTKp%0iufN1R5BTCzD&a5*sZNy6UiLLF`3+>3YY7Cepvp z`TVXH;Dc_UIYCnk17M!2y8`0RDmu(&v3;;qxV;SP9OyN&^~aSkoO%9P4Is?U3s49z zd9I{t=xdRd@btVb&vt~0CXTeky*J-C?R!DN_P%b&l;qb?XftZ`-B#){_R#N!w#s2= zg=$-cvtd3tZ8x7=cD4yF;l|No-4bquG6~zbRppYs^TeH2(z|yCUkGJ7tOg5To9TKH zD}5$4xTss(K}~djc}HmwK1E`^N9%=(uPexTH148QSS3B6^Bk~v_}5)gPCmdXi&EMT zvq~aP)sXIop-?}S1GL#42`=kc!xwQ;E|Gse;XMJA?7#s&!p5oUr@ta6N{v}xJ%1|y zh4pU6PVw8}Dv(58E)6SZ9OKjtgk>IimMaT?uz1KN$5sAHy zJ$|u>z^J+`my`szTw8em0Z_O6;gLhMd55htXUE+5piJC5Y^i_0Tkwf{EK4$fuEtzb zc;!mGb+0(q9(L#cPhq7MezT;jfp@_J?s5}zQsDaKcR}}souepzX=y+A)}>fH!==RO zH$=_mqT=-+M^XB<_`WvSl%wWPxGv}hnF1to^?-KpRGI4jobiXUc_`vJg_swn#Lb^g z0Wc!q*cde2R1{p;@L9IXW6$rv*`;`{rdn6%_oH&q2f$?)?+E4zqeh}QAWe}bzz=sB zF|rGICqsY+J=~dV$P#T6=y4b!hs3CLx;IO|^B~6zE+%m&K2H10UmkX*LS*Nv>0~^;?05$O;RdYlM?IS2?0~Kgg!*y9`2oF!6NMqA>SZ=Pr zdLf>-F`0OQCOntyUIC4^HAC1?bS7liB(A7ocYIVP#`};RPhok-gW=@}ii3{$!c37f zW)CpW$IYAhd0KNY`O{VK9b)7bV)^`e9k}7@FW{DfSh`&uhroq1aF(Minugv7U3nq3 z|5&|IeA}q4K*je5dQqZ!F=g%=@rUQ{QZ+TU{v4Itciz*xiSI7R&|5}u0 zzlh`MQF+r!bI6Iw9I6LJr|-y`6e6yUJL&FgvaZ+elARL-R|-jaKw%)!T2)`4yfm%8 zBtkW=L4Ku9k?-~PeCtxO7iv4oDYn72T1Ky!_xpl`RwB|GG=j0!MhPZoWj;zov;_>T zUZ1Z0L`ot*2QPt|kkZ&U>kp@gkUDS&;{KsxDL|q+f18O#Apm}UefzNi`9A-Ikmbdp z*i1gSY@<~A+4I#~hK~els~p}#rSDRmUd_@I`VH3bFABNf>#rf7gA}!t6O!zruOzFz(;PhE5`WaZR`M1xl!`uVDlN?8N*wvZeqsvO zr@xb)D3O&`0=;)M8hJX7n0H?d*0(AV%cE!#95mI9Uv7ebM$V{8GT>(a>{oAm;F(uJ zF2u9oALHHQr#Va_0N+hs_Rq)m6wJ?nK zn}Ej|6X=9h8!SKiV`?Qrew7U+;Y>7&H6XCcOMlYuN=_KH5Z4$5ms6Mv1u|OH!#0zy zR_(wk!))L|Om?%ewH9?YlI4-D{H&go^;ds9u?Bgw8U^KA+Pb*4n?4pOLYFp=PoaWS z#lHDXj2x^WOK2bIIYbswnDYBI6aRNT`Hnn>UmJ0Y!+c_ajx~do9{|dYi)o|HCk(FT zKZLDG*U<9fG>z@sg}9oU!iYH^N6W?j3=My;6Hm-M=Pps{;OqP1Cj?C(Ke7LZA zf4g~yLbk8#j9+1b2+9Q~Ko5Z};cu&RpN)6@IY1EWIa=@Ji&N?|qL*H=rFL9sNLb+gs;69=<5 z-i2z2ZJw9XJh_srUZr7X{lByM?+;bWmY=kz?(jFcysc2vkZi(B3Nvb7GZd3smfC&qiTdOZ&O@Wh`%z#Yg5_!?pv+y<=j!<+fz z(@QIO*AK1&w8vVOyrvQ8E&s0sRSf4DF?g9AIP zUZ_34#mj3M`nLXUN`WmJoYy(L-GQJOpW(Idns-!<9fmJ67n;q{;}7I{V@l%~8l=K> zU!f{Hluo~@irR3Kdj6?MB)m<#;eblpD~^};1m!-qsgZA-P|W3kE<4eQ!eoH!0v^J)TH9xo$uCvUIE=RxL3o8)VF;wd-)x%+578e(~ilp4cL zh-5S&a){P?qhG0iH7>997Ck*2Kg|ATfp+m%EH~DTD1oWY2}7)`U}Pj!`HVrvZ$D*n z{zg9Rngq-gZM|Ko5ugEo?au+Dy{$2Z51H_FQm2G^W!Ja5dgwM6F<{M~pHft9_CeF{y4I@GEe>jlk& zW#w3u-dN4?i=3a`pWcigL$h!Sh)By{=d&;5onH^&W7&6wz4S=g2BIT~7kX6zs*A<; z&`yf$-{PAr(rw#fhujDgah=2;CddFp_D(Z=^1jcLG4}(-$W-JUZ2FVzS?zo&hT+U; zw`)&vK3_5e_O$-kD~yy-FQ6Z~FwIv-DSBIuU1uZo@C?k>Hxxu4)BTlsP#t~XelXpE z)XvuXK~Yi_XU@m>;#^;O!kR1PL`5}`+PEj+4qJ6Be-RHqV%0jR>Klbejc6n_-!_Vh zy*TLa%wiW$AXW%LTs0S2(D}?M;F&ra!fN!2do?0*Ru|(-#ku|jt~`7kU9z$$5gZeI z2t5Q(U_g+r$inBY$nWW|j@Fzb1|yVI+#AfJc9Kz&FnSO?Lfng@zlU&}kOX8+;4in5 zND>S+LI^Uu3SZzQzVv{zd9X^Tj^~qtC6F{vq*e^e0A3b+yFSIoVpImj%3z{@g)!D= z_)lr~b@`VUilu_-Xhvao&Nnj_BsoL- z^+!qfQ|-}DN8!^*5mqYc+=i~@UjdX$vL9h(Ba7$7k38PmgO=!uovGjmEqwZg80VL^ zGw%0N^qrl1m{M)?psKJ`-Dq+ucOWOGF=ecV`y{%g(x$6Ix+H5aLRm?en&bP?iP9-fo}_AG+X&y4wY?Abb6^5e z#$x`yVe>9?|TK3S8%_fi}LDvQVHXAD_bAO|#GYSsnJau}Ln;ZRDZNh0r& zX(~o#elV7NxGRPKR`zH~*sznL64I#xqNE5#3I{yx3M$R#x|+fJtFmHB{fek0=pV3f zB>KHYL)bK6pXsWMCn$R)iQTMYZgY6wBAbfz1~fcas;r)QdZ)O8Z-d#IbwDz3n+aD& z-8Ndgz)6t!4t9?VMCAS;ky-&3YOE)~AamRsTT|M*nO}2z#AcjvrC_FSRKpEKVzqq< zUdv%v%wo(~-+Kg4(tQS=4cd2=6pTfL<#gD3GQ34%qnrFC*HEV3&9M$FpKopCUE@>y zn5y(|SX>iW6^-?5b8f%i&Q39pgb^1QiHdy+`_wJVA@4(|d|*gn0UkU(iZhW<8yZ<0 z5iLTxsKshzycPfiSk*4?d>5?|{@Rt%wE?h<*{iL7y^hJsSlfiJrL)(^UbClqlZl9W z-NnSV_gg0{wO8Td^V6&PLaK0b26hK+Pw~LJai_hEzW5OECl*)z4F=38F2T>NRz(?M z0n})MQ8@89Gef^=sf?Rul%qU~M)aTC(62QVJb?V>VjZ^5>&lZ^3N&SHf5~m>%_I~} zvbfP86`*H7bl#yu-t!KQ+RYB@&MXvZt{l-PyMcit25on3GkO1RF$`pPTZWU2)Yo5tTm4^J1Il*&^(s*ETg% z!4_`BEdL-Tx!w& z5cE7Wb;@w1AnPbT;EYn_Tg2(q{Tpv@pD9HUV16>Y&3H4@ilEVRv-NNIuhgQPm=ix0w%~bmA<;)z1fxe197Tr zVIDO`zzEDo4^!n*bg$T2`pQ0d7hTPmva8}1XOY4P=<~KK5^w49sU3^&UJz1YhOWeD zN+^G}?cb0JeNIY3TL12Bz>t2gSDSHkLpk<70DpMk7u&e&$`EdLKGk#v=?xgR_Wa?> zaMOOK(8FlBQPbI;WY_^VwOVa1pmGKo_npMl_%w;+G8UQ+LBpP*N4a`ulDty_J%v5{`tJ-WQ-0i}m~RW55-0 znBCSo^`^=w6R3fDe1|V9Eqg>>Ib>sr6@9ns;-j@I-EB1jjZ7M(aO0l^q=6a$S8MlS zR{v=%hP^8Fnyb+aJqj)U;NMwBswCS?UOgfH4>+rAp_^|{kg;Z7&rN+64lAo#vTLCT z|6@Fe_W16)2;wi&x+7MPalhw1;_;4U^LUeoRO`Le=ryRROC)U`Wbz#ZS@KPXIF&;ng2e` zxnKN6xi?i3IqAMxy?=)_+h}DcEYaMWePTSR27(P_{P_?|6$7uUtt|@2h7{(0=*Xs^ zpeW_|0*bu7vpX5)ZH>%Ed;$u7)A1i&vqfGUL4jxohRw|obsb$jg%XVP$yS%+nT2%q*0XBeT2*z&;YBQ5jKQFlpd+soB~ z)dBMtC5KS%9Z6(;k+R<4?k!^A7y^{4z(VVR$jwL4ui^CL;IF8zNIcke-93m`h-%l# z^LqGw8Zh}m6>%+KIpR+uPa;?q4TRO+Tr_4=NsAw2JmZ@Ay0#@Pq=ah1$VkHXHdt0h z)s1g3JE_m`B+0PtCLgb5;)-v9>nU&8>$cznCYGP$ z^hPt2ZysDgB8kL{1+pICvcCC>EF;?Bc=~>>$UwMw=OLsBQzNQs_zyw z)O&tCKW}cJCJ_J^WPFhnusCmS4&L-19&!44IA}TXvNQl$lqJ{xjC;d6%I&!NS}}Wb zA$`!OBbZoQZKA2fzT$;sBV#Czp?gVJGM)HeYLt6=z{#MO->tE@KspO#*&+9CVg`%R z8RaxUeK6{WX~!nd!TQ4h?;Y^ohc3|VXt`Khve^{;VcSvdJ^tV`xpjz_L2Rhky=W_yc<#T?}L8?;-sf9x|@%+N(Q1K$~^gZ0D2I#36KChZYVAm&)GL$&56 zH=n=#EZw?)g!%lxq=Fs4*ibaY*!ZH6&VQF~AxD2N@3T=K-#W^{6|ZfM-Cxg-U2gcK ztljbodh_j}gVB7?g)q2R&l6j_{4F2S9g+_r?=3Ew!+^*Yvk6pXs2Ljb9 z*)e*7;60POIiMOg#GFtEbrf&#?CjrB#|(tq(4pp7-&i{`p0&VnhP&m7@}nE{b^$>Pz!{I+S@F<9Y4{xqM(meZ!#<-H|jUrU}XkC-q%_R%<3o$V+BeEQu;e8DZ|E6se*SIqfjz(n>kM@%A`dXhr`P(@> z@)V@TCem0*L9`0S#C=MP1A7>_HUCP&Cm4YAo;Zf`@_sE`Kwwz)j+1QT9{*t>*bd8g=Z)6qmjAGjmY{;&KV92bOWyxcJ1BL}udC7eAO@OxX{AQ+enX-P~WOak)Besyl8%WeueeN(Ws7d8_Ixx z9oJnw2)BQZctN9a7tB0{-xJ$j{M3XY5IiNNHZ~Tbb!d{i*3(;~($w zwr}T<(j;YG{f$NxIxP&13=Y2~kDx;kk)T)N6}A)Q>XdR5jR2?ucpP6{O>3T#-M_4T zU127z*nZ!pW2D8^6X||(a#CCdg|XIj9E&gFmW!Vdfy;*Jt@x#i5$Bcf_wKL8$J?`V z^dyS|rfA&YUa%Tu5+sdLu#`@fVFB;1EkKG&k-5kC^U&0PHD;)@L+Gy_f}>34q#^P^ z1LQK|sR#lM#`qS$r-cqfc^;|;6d80hLlE}ey8u+BhuH+}szuk13ATuCd*eKZcXkaK ziCj;SPR6f-X(ff0)`1shH0D6pXpmI(@!4V`gb?x*K>c3x%< zpp*%+rrZM67llhAGJni0{#B0^0u(%I=z{N_&vLcq_P3w$QTX;7+xL^0 z7hT_)D&~t*l&y;Efs|dY4`n~S5WsP&pyKhLtuLX^6;b>6?EtdQv*}{GF2_w94hIUG zcBoXy_JZhlVX23ZDn;m@{{TL@o6NcF_!ypC1MT%Tx`MFOi!SgFJjuNs++XThQh|Xc;uBFFOwAG zvtJb7zalW03j3PmDN~a~<{B~e1xuC-mz=8dlwn{{M0w?Fsqg*uwf8I9-)pdtw#zf}@=PLhEgzK|0>6n{CPLV>#U@J`N3JDyE z<$;UHF^N=K94NX&Xyn#yBD8>H+jB~Tx*txjzf8AQ>s4OgBQ)` zK??K#5YcQqN#usLQlZ;p=sv-d_4no`;K4Bd0#`69t~oMQIa4kWLA`v5_ZRO)<`F}8 zbC(^{$Kr)R5Xo^`vgR8!l$4)OQrR>rCo1ukoW82$RJe20E3oXp9CK72z4(3vi0f>H znr#cu2)pIB6%#3(zSu9n!X?lt5O2-tfALJme_kE~RPB8lvtwT({{%9D+#JxKPCDT8 ze{aM8<5Ju%fzn*oZmhB_9mnOW$u76DqfE9R$Gb6mG5g@+otXD99fh&6M$ebww6bgd zx34^(h(i+~Z)GbqspZCw^EvIr*Kuj6k`jG>Q)|n^w(wS(ilfC)@KDzze04~Ecs`zP z-sA?j54*|aYpu*giHA2oJDX&9GK>}NPEPZfBjiFMaknO`qmQwhF`OCm`As!bi%jZ{ zLwl}|(AlPCUL}=Kmy`vIIU5dZU2=>I4rLj)#ygfPWg?gWE$Bkv(!7HiZVpgG`DxTX zl#<>sg7`9{w3yS?@$Ie|R}W|%AL}U1TBr)lucT9g3%WZ#A-#D;lD4b`u)R^)}GmebpJ9`Q9YU^jRb+1=p}M z17%F}%J60j1$lv=C1Kn0Y#YsnZc|Hf=_cI>7H*A&@~=VjHUJaz9RJnmxXtd+f3ZCx z8i?oex7~1x8CkunUbxvmyT(;`E;X6It|Vj zPR{2;sY=`4%olf}T-t*{Bvg%ky?9%0z`Ww`Yq!NJG;7LYo>~aVi+xWsE>4<2j8hmY z&zrx_SHR`mrTT4kZ{IC^vLdybGoFBbf*kyevZqL5s}HtEpu5+bjC<5z%CQLf+qVNZ=oA9`FU1~KprsXv-5P;QZ}ZaOb*rlNg~-Z} zvsTYPIM)YLpF`l~PWBVMEsZA$w3BlKAGFr%$=fn%If&()VL0GM{kDuu9)A|YmITGc zzgOeUBvJ9onLO-cep}Z(tj1K}0m$|5>+v+SgIAGbx)89lgGZK>DK6~c@P_AwO5@#q z)Dk#%$`$E7V8P#iOKZ9H=?|DCV)fSiS;Q$g5Po|Nh2DZZYH&Y=g;JxDZYxSzSCpXz zif88g{{09!rgTs#!+m=5JWTC{KO20TXFWuuam>-4aH-P_mwWFAak_s^)`ekU7Clgipr1TClu>Ia))(JT(PuxHzMKVw*8Qykpo1aE8p9r&4jFYe|URM`XXx+ zC>i+KK1fM>b7xCTNlyDciJ9x8~ljv2Net@np-`jZvw2 zi;L|q;W-zZOPVPj0$^J&7K#J>C+@>6(L?hL>(2e*yk=&b>50kD_zsVG^dfOvHNkvI z7yOlVb3*9T(st2m3gvEjg;e+E6yDk-Xbgn#iN~% zqH=O_Uq)6`c~^8a`yI~JgvgS;QGQbQWPEW^`f7^bZ1{dCr=xc&0e1Es@aAEf;FFk>Qh zHHg~V_vh)<-<4sz5HsV*;o-teQUf2EG&!v=LuO2v(sgB(CY|GqJ3V2n(IE<{zf|1r zU%ai`d(!^w&1JJOJH1LV>#TJhAr%~RHF_+o*s};2kQsh z(fFz|$te?;q#NmL@b^7&n?}BqiKIlyee*Rs6Qiy&dtwUW z;zC8z-xMk`nnjamcuIywLxVn5)@Y0SqfMP*dZ6eKBg3N>m~p|R@7J`<^a*g@SmK{B ztzkq8NvV`%&=DIY$nQzudF}PpueJ8iR=XHvn&m)QQkrw%lNnzOHPesA;*NOk4p%mp zzg@U!uAF(Sry?Iq2^}`~;S~w%JRsePX;{d*Fx)>pZKb_AS>cSVh+D#+_1F2``c=L0 zy_32cSVG)KV@EO1%=gHxb!V1nfvqu}8|3qHw&~~eEYw)p52k|a$`Mgx026julmkIe zb^$AJVxPe`h3#~HJZG!0Guo|K<!pW$m}BpW1deq1D!7`|dFM(QQTDC+`xV#f2htGzk)U;Ciw7Roa{J zEs}^@ zr^RPVoRKo(J@XI@3+bR0sR!2g$e{@^A`;i3Vs9%NMRZX;v36Cu;{4HCV{;&1BmYg*X~MpB z&btomidRXF;hHNyGYXdfsK|anpTN+d=J*Oa8xSm_E<*eC83{neyen=!@r|z3e=$n< zrafQZWv1a2mVnNjLS)OGc5xT$ca*ORc3_9T4p*_<{LPKvr->;I9%38A$g-&~(v7fN z^U|I4hp5!2dT{|HZuWcTFRiuWP>PV;t25`KJD}8N#M261Lo53~;ch%fcz$gNjJVq= z#DRS?e54L4{YgEXoH4q;@gMC30_NjbMnqxhP8ZslBYT#Wl9KKHFRme(RK{-u;1Z?t z<}{KfkZK9JVB-F{eqmkMZUR|g#f!gIuYC2>yy{I%#5O0H(raP`2m`_t9972c3wkZ( zump$fEWXMa^{@xyVoZO-FB2}1mdrfCySFd)*=X4YXVdZ!I!`#)2DfQXoT#)5M<6%D ze<>!`0H|lH6FH5YjO1l67~x%n`sz;jTX9;#ns1jE|4ki0>3bmSKv9VAnAw22QV3_Q z@}v0ctXZ*ue?H2B&E%UpyfaE^4ckIb3@B(&WMtFSUgeB#m2k3UJosBukQQI55Dd`f z{iB7^9fJ;>ehGvuyXJWO#cPrH~IO;8RfJ1i24d`rRXsSx4&{Wqp^Gc7*TH2E^<>g3FpV1c+hQ7MKoMV#)B( zC_>Pgrq)Dv$Et0M((nY{zQJmTuZ0*eF|CUX*ZbinA~Mq9k_ zT_BK7h!8WAwxgrhJN9Ei5Qkj&w*#2;%=yx=pjsm#Eg3qGO~M)CHP^=PKbsn{W~X3qc0NO z6+dWABgf5rr+p9?)26WEwYK|{oVE->RhWjxl3l$P%H3ulUnY%29EH*1y-m-x$&cI) zfe-EN0WaIHMb7T@6LVC`(tk|laU~+KOw-O!59})h!H*rKP89`%+c6@Tk)!_fx;PLi z@%uo2Z_QPLYx%6;i;uP7;Ek4R9!iU+Nz&o;bItjJTmi2{E1n_9f9PsQ5BlB%JF2-5 z!OiW%=H>YRkWYW&x4}PiTSuNEHzE?GrI&93l0qL0kb!L6>@-IXiIGzFvL)n7#4Zp{ zlHmOkd3g&8MY=$0lVdHLGCr+Y zAGh*-?dqqt-^~yi0x-_lDv;}Suh&!OlPl8jS4I-Z+6Q)1c_Qib2{cbv%Q0L@1p9I3iHV7@;=i z`N;5uiMJU}AlHqR%Eqp0M3?rC8vw>-f?KArHj}}HRpTu&v^0FY`PJ^DJnr=fr+TB(Fl-*fDU_&3@ zrH!jybdN_Br#f;sKY{{~te#3I%S%$xXBipeA6wfUI{uNmUBO=EcLrnN&YU1zUFpQS4@Er7LmIIY$oSDm39tcMmMO0t_^Y3WxZ3i$(D7xO+pL0q~?|ZE=m}vPKz+uE0)TU0L>rJ24#44OP(jhw64a+e?sZ z8oLl;WhKdUcw3wa?0cdA)u79li4Bp;qF(gn%a^Fbf-9udKID3JJ9cOZfI!a&yfzI3 zgOBO}iecM-IOygft*pRD}s#aZ|OEE}O%+rihX({UlM2>Xh)Wi|u%KBn6Cw}MGuvy@pcWQ+Q z)RxjmqHDa#0V}@y=*{)R*-Uw?nx^8XOD+nijL!(WW=sN8y+OtPY|ZEa1`aClasE)G z8FWDu!mmT9NMFZUv+X};!ttHACjZ^;=4Yc2fdUT&laXig1@h8{3aNe1*%^oaUAcZr zTqtmp-QC;#FBg_ad5108jPCsk|J}cCzqFO1*merfh<$^BN`4{+1=dva2*xw=5P*Be z7IWVa#~fQW^Z)CE6|9aFv3i>;+MND036N>SZ-J=$v?J_&wQNQTi5Ts1(IB0Xwz9Ea4(R(X`hFdagdlOqv^=E{* zWFw05s{aW{vJS3^==B~~)T;nJLLDw`yFbiZjc8k*(0% zZwTG`jQxmc)LWNk&16$kPm+tsRM;_Q<=@LI&)adblUzI{Wig@xY`W_$v>+; zL*>;;0hZrz%&v97Dtmi~~fiEhd($lT#|St}$e_r)p_ofRK7iV=VzgW##hKe=q_b>udSIi;-% zr8cChMaD|#%-xvBm)OFbl0Y_$`G=uVpjG-ch zV`ntFo{RKs2QDlJWosL@%eBa)he1tI1+kH>wV7Q3IQt4B@esyL~0VL;LvcfnY7dYL)2S`Me)9I+bU9$igYO{odQxT zE!`ryDxickf>Nu5Al)UfbV@e}iy+kCUuFxxCCgKj*yl zX67~@6!tG55HlMEiH`&l%GsM`IRC~kj^W*TaW5{&?e+5}=K_tHcRg#G^53Op zpYz|BQRmmnsytaR$|QQ)pr*sMtF!(%{H^(SXWG`+R>A$+&xsoBA~SHg((Zr_Zuj5- zayPKwS}@LDxUPc3eh1Vh$U66>D!>E5i;1j`cR?th2lw&372K%S5h+^@i!}1 z_@eEr*2@k5%SG)+D!F?d&F)9ZKOp%zztj*~_#0#0Q|vS6q0_re5@Le-ImxQUz5+lQATGRITMF*!Kp(G`zv78!Lkk z)OYM}Cnamv@Dk;ziV3vm%lAFRfAh9Rh^K1E6-+Oc>X9#>;D$)B;U3w5xs6ASSRrB; z?mY3qV$zkL*A(CHe2(SU5ro4+(|^CsS{MEhdx7F~enJ&W9WC@zc;6MHuOX}m9)_eQ z^R+Bs04Js*!jYB*ZUxRW>*9|_NF*#^XUx7w3#z3iZP@UtnzGAHTms0iqijEVSXPy#U!h7$S|i9zRO4}X zII>wk-TCxi`R*U|CrIRj>3p!V>-6o;TM5#041N?BP+zK>WCk-; z^PZV@8-@QNtyY^*Q#|4AP~_QAepI^i?M3(o2MhYyjt?O}O_^2hrxzS02`*twPkQ^f ztsW99zxZ?A^-xpJcsZ>P;`z5x)N<3^q~1|x(S2OgeN>5hwl()0PeSH%ED^Owjtcd%)4I2~XcL&DJQ!r=CITB4PkXw8|uF(3_ zb*|Ed@F{OoQq!DiBO}^m_k^2H6oo4qh%8nf&WvOvnfP^bf9_;^kXZBiANkj8jFV^s zU<|9^w-G%m`g(*w5fweOnO*v^q_EmrN`&~Anp%-Z7ni8}MUlZvLj}!#ru=X34{{s3MwiE&Snmf24j-`-QF57ZZ}&OWQpV|9vC;98Q3Z8 z_1$NGJ0J7cY+>bpSEE`u_tA^|&xw4E9I%1pQBm&;Gdl-|I5Z&z$LM{Pf$a0$ zX*WrO9Tn7AY3^cl^7naf6yVkVg6@^E+7fW{Zby`OR3BI64ao^7SS*Oa;jx)$yUjqF z33f`Jr-(gyKBnm;Wy@xmlr-jvZM7{w(!PP%_OYc3zF{dftJV86lq?j1H%*$Q!tBjU z8bqopmh3HsE%G7YW0nq$M725D9EDS>(kn9k%^#%Lg9BI=JCk0Am4P^5O|F<${72;* z%$BlEn3~N^Qvve3Q_D9KFgteyTN>u1*wSJpvmId=<*QKwtdD;P)KJw>Yy+^;+SS=oBBrMVar_7+onyeBSm(^o%y3=MOydN}Sjb*uEK zgwHpLpCZU%N$~dlD}{M8;8QFz@L$*!|D{nru9hRXtR0^lz5kP82JTTxHdnu&tIZE1)TC>2nR59Y&XmxZ1b871FWZ5 z7TwWG!53ri{4B3ZDTF0CClLjEs}T`CN%+hJ_+(5PJ=#&e&#-+)H_(?)1GUhXH$`^q zR(575w@Oi9)%-n%j!t;jfKGDDz|QF}_j>fwOGHMU^aW?JH@e)_sIMZ&LYV^U@|1+Z z^X{P6nz+sHX?`8E&~3=K+`#t&RF|8R+B!FNg98Ec9Pl59Z;RL`DqHw>nAgK)QMD6O z4Ka!69m|?(M?Ov1;FitNPwLTQctZpedPZnsvQfXQJn*patF?^f6AxfOKJa>@P|LAiVzyAl8)FWfWa)Fd9n}H&-CLTQHE732atAd$k|+_Al&o>1H_Y z-f8I9A*4Oo#c&mG4eHA^auj;ey>3Ed-GnBygEUKG##Y z6*sa4h7iNenEI?ND_Lk=8}Gk49z*;N4#WlL9`tDG$waTyG4ymeN-~OK`Vr)p1~EjT zF;J+Hz*$7ZPP`mJ-MqXB{S55H65`fEwy2yzzSrop-D)W(sx zMPb!8zEd8D#{kXO%5mb>oM2`pI?p+TYt@g8^=6|Tc&ll#0ID+>xjroO2txz*L2Hh` zLb*)ycMo>53$QmNHJ0Ogj!B~JGwN=d*dxo~nC+%!m|BSwCh_deeC!R9eYz~WZzZlU zHvMI(>C4VmV;Q2b6xiIol9V7JD2sO);O!4FSvl!AlEe}R?n3Qg>qGh)v9IUJHOb&W zbD3`E4D2=XA0VwE@Q>y5#eAQ)eWeVAwYTr?IyLQw9OKjhZJ#PyNSE?9@7i+-H!a?XlDZwp*Re;c-zLfHKuUikfIWB)R3KVc=wqui=6gzH^s2~d)cs`E1teb zF71EpTBY*B4=kqs6#WEP?eIo~){1S-Ev5MWjy0(R_B{RDXGH-vpU!XD*}TcvPp=7L zer(cEsZ@5TovNcyYiRAh)c0;@nKMi)RYy}G-9nv*Zf^U6eZKJPynjvwkjnMGnF`-9 z9=PK;E|_TB9qDnK!7>SKNj%iaqwF9dY9$K@o|U})}WCYS;+ct>1B92kE}d8edr-Gf3~k_h<<#mmo4!N|8s<%vKD z@Z#0>sdjwNS=U+bzd)JBeJE_8>iU}E(%nvqZ05RupIn4}UygWK;!nv#2Q%j3*~w4L zJUygTB+GFApD&IuA~wX#4TXPV!>Vru4!A!srftf!dSE9*z7~DZ>B_!F+BHf4D}Yz= zfkh`6i}7Pz^!*o$Ip?HpQgJvz-&c`Z({0sx{gGbv*_}n+Ra*&g5_~TAgQ{%zd zU*G!U!fZIucOh8!W8IGJFwauz0^%Lno4p53TN%x^{ZtF39iCsLQEU*`NjWKxW!##c z-YB4fa1GhVQ@$SiAXU_V#VJD$xAJaoyfEZ!52(E;?#WWZuz9c}|t!ur0$cU?XgP5aO^xZ!}e6QB_x( z7cPm^&PEoHcTGwwD(HT9G_|rC^kq5t7)8m_QA*+wD9B{Il((Q@NV;#9C+GWB@ z?wp}#?C6NYx_Em&e2QO!RXe1jkHJoq_v>#7r8(K2@+A`$@xRWj;`h?jYzB9p)_9%U ziRwqSQT$wvP7!}E=&;dj)H-;mXKb;gtP)X_{SUe^WwQNE%Ltj>itW!r#jb7)ANm`olwH&;{nnWJed_h$SY;TpPcX=WWMk2H)s@<%mS}r?t zY{9^^7pIgwcK6`ieJq#mx;`mllIj-hBFPs$AjCq+7jSu?zDN93A8!#mW=?POT8S`X zGYRdtT_a>x{vHjL{`|;y=cfx^Qy^S%?z+zh;(24@<$t(`8p5GRq8k;EtBoDorl6|E z&_|riYK`W%=SCXrkB;5$b~Y4Z(fv%a5S(R@oq!fWI`>KULf^LE?-r#6ZlkkJH)fSK zHa3*wM=!oWKC$y=<7C;bKio7_n>Uhq92rJf-VmzHAQgqEG8l})TU50_ypnbBzF=p#T;SQ6`9Mn1<4JBO zJgBf2ZeeWpb3>k4(N?dTxyqtdIP{jd~k@mZIJ5cjP%xA2^3v z6g}VbF*(QIY+e;w0l^-V`m+4@PFJ3($EiSO@0M?17aT>p`Bbr0wst*<`Q4mzh0oc8 z_bbe2kVs0`umea#3f`Am=b$5P2vMEGpvhAfHs zefhxZ>-_+8&zr+t=m^16kRPCq|1%AP0y((H=VW*y^E@}#!_Iq%^Cc#;2P!nXEM=S< zL>kH26;LGxurcG@%SMV%b!YUd-;dCf3HoJBfyB09wN`^9g~P)2cMNN$Do0XxY_66S z-EK}mQ_2eO?$2o2{njL)E>30a*KB|-4#dm-w?IZ7$^6`?o0pwFd&`e>7Mo_Q#FwqR zDj#w=bj$dN_Sdnn>y5ST^<$^W zV(@tyxM7c=hh!WeE?ad7SU7HFJ-uh_;p`C~yA7QT=_OVYhedkPFal1VN9H1|wl`j_ zrXh!ODW&RR5qjJESIl2(m13Pu^Ryi|?2A}?*+M=1GikV|xg9DdSeOg_IZcbyL& z-}!+6MehKSXY73Y3D394gmR&$<;FeY$L@N#F!SPH9`Qa*-s`H=qo5xtw*ZFbZ^hY! zrI;#yn>taCHhi?zfQtF`1@cWkQ~3$uvmlMgLpdM<=he=?G<^SX zW>E1Oc`|Xy>iNz#*q}y zhoT;50cfKE8r~D^?q8Cc3`SvzTxPK6OK>%J>+_$`(<}-v8$js!m}6PCj{A6jia_Kr z)`9WqakH&60rWdN=St^!<55=-$!hd%MyzC0-F?rjBUS-$v^&F(t6kNrtY7-l*4Af7 zbNg)NX}>!qLvpKDLvk6ip5N)Oj^1#x%Amgr#`!RcxH_QCQEzt|USiWq>5rtF2LOI}lYcdvXLnM;>qmF3noMu} zB)F)A=+$ahvKF1+*{o>ll2AbNyF}oC=;Xm`rC|ErNSZ%z>|aC|D!4WBE$4VV5kv`x zlR>q53GHBKa-nT!(X4a*^0(*AujL%^FopcmH>@8&)|`X|6pXkqV_9Xc6Wna)t6+-g zHRu*@k@Fl5I`19Lvc%A{44EhpiLJ?uI(A0mhJMgIxIqWJZN}nC(Nl)9a`7_+w-Rc- zik1j+mo@|L-kXMuv%+D)*VySTSQY=jGR`p7-)TtQVJo(pBM?JI|Ca0G zt5|vTm~7+8ycFuwV1FfA*zCf4G+iAPCM|JqBe+fl#c=z0@u9%~a{;t4allJ%OXYVu zfu$PJj6*Hks-(O4Oxv)KP07Id>@P=2D3=@qKm4WJ0rwKnPYmLR{eLTlES0%w(UCh_IPvIR;l*C9=Li1GDkHzDTy3=#~`^|P4RrYEsgcRy&SVNySVc5 zD~Mo7@nIwTb9MOPmDB6d;vWdm!}8_bIkar$cqe;@&~0W#NLsAXa?1nDaE@nZfudPa zS0aNQxHt0T*Q8@y@D;NFYf6SzflR>#$Rix{`xV_44e4&yn&<*hSI_kxwwAo5vmy z4nxtAqLo!bP8?jU5k*vI;PxMu0tu zqcs5sLI+85kfxx$-3=*}6Ap_lY^M;G7;(R)X{W57Q5<)RsQB%El%Nah4vtnNM8_F} zbFZpZ?GMPSk!yW#6m%P6Zv`>Q^YiX$Xl;T71RMvu2@tf>&I+y@1yAV7dj10G!@tay ztu*t+$tw}mqO)_1d8Rn}9i=WjLSt-@_l(g^@q5Bx?lq%j;GbKgvW=7`2OkdqC9EMwkJBi54lXivw69%h$S#x zlQlM9!0m%*M-&p;#?|D#tA7u!DRDbGLZaikayR_nY_#C^@O`IcCyK$CJp-fN! zm#H$edt%H1on-?FkGuZ}j}Jvn_JBf%#CB0=Z!k`K)6CI;Orx4Z#E(Mj4n6)ZqE7`p z#$*GM9-+-m0LX4gBXP za&5|48jr^tzS3q!2J|Ce#ZSg2Z@izCQwBMUEDcn_Kb)dQ`hKcnwaJ5OZsR(TH!=eP zrvLYLKsd;Jn8~t^P*~lIOJJD0%Ap>kaOXzn!akG5e>{2i&q8zW zO~a3zA0-|AkA}X@{FJz(Y#&Kbqj)-UupSw0k(xXy;>OBPmY;YaERw)CNqKwYVc;GS zsuV46vOufX7m*^BFI&{j&O~=VBRM@nZIHbXwb}e{c>I&m`_@g30q5A&6W{U zmP#Q#E^@v;+N#)3ewrOC>)Q27^;?usR^l0D3x1UOHS?R1vFC~oC!KkEbc4`ORjfMB zZl%62v$Nb;t}r zJ}v0>j$u|*fBo~Z=KQ2OAh#Ic-ox^f!7` z+x@z`@?_Qo{_KU&XG(b1))Gdw_EE1gX-ypzkB%#1FDA7^e5AYBetpKSShuPBp<-r$ zuM|;K7<)mwGFzWVEc>v@Z6r(W=W}_&V?$1cbg3U3N^LL6NYf%tVVxhFi#+DOYuvxJ zNOr1C_s7-nEf9|An>qi0IdsCz8&+*L_$YLN0Vd`qFiJV~Foo6;_Av&JMp&+WCy~et z3Vh&u$m=c9hI1gK=S?A-)ZaPUJCeCn`0)wJtWq7uO>G(;LFw#5iHnMPMSl#p>nNPMZl8*( z#oW8IZ_%^V(2@>~1#k9XDiEei&>i?2XB(edbEP}#jFj#^`MOg_zZdO2pF8y3+j1cE zf}TY_HpE#ck;ZEe{g$2$mIu~xRY+s7!%W6XkS2F-l6!~2w2!sO-nC<5Fh+AuE0L|L zTM{oM8MCkS9yONIU5=toLT_|Q-g z({;H|L)O^UuWxynLmS&nKHw@nI^uILh{0ZLJ4 zG=p^nT^5j_z&SEAzQk6wlkrO?o`|}ahf${&o{Gg|yvh1uGZMenkT0r+e8s@TN+*27 zt}0_Kv&mkb^G2oBpm3K8tJx-b;VzgM`#F;Lh87VZ(r84h=YStjHtK7%wDx5OJ4psN!Mp8}Q14FDEH3 zVxOyIYNKd3FS<9QhsvcT+juni{vq}Y*e*)W0b-J9`YHG}&{newZg!dbCo0dmCbrde z&cgf>xS(y-2ERK0h#jnQ$@7d9jyzIyu}KyQFljrpk^V#wF*&U#W4|HF+2yjIcAi35 z>h}P*vT8;I(q662J|5(F5Owg#A3;JKSd4I>|;9P`AP#93-of@Evn1utMu zmZ&xJ@n1R=j2Dou3Oq^}JA@Y(gw3EH&?(qo;kI1zI%SKXWO$&d;xT_cR-dFktBRGJ zy?r)#BX*J$tvqgp9g7{!v7h_>h?Hw^odz2l<1VS_WL_1q8D5+#0GEnEoEWfr9xiXR zUn!njBh0w>^w7VZc++0&(cBqE@zjrNA0-s{ua&E(ZZj4bjESQ}RyZ|jokNje$Tf7m>RaoiLNO-}R%oSzsA6kK$=qhj?CBZ#@nhwBMT7S%4$%xmEYh}iCw}jd!9i?*voC51g^hd(0 z3F5HycNQ0)Q=O+0(6t44t>Xm|OV+1U+$BF_hTl&MG*IS>enDiow-+2{@7q(m%qJh# zf%CZzYJy(Q@N9ckNSe+s!duBdE#`=B5}EF}^(A0yA#-y~EY+ zEU^I~@2InPbBVS9t_2o|ANp;jxshV_-b3c|0GfyNQQ^0ZRt5q-V-M%HXRc>pgDa8A zV<3xSi)aBt6}~Yao%~n)V*U^~8)X&RfKmP3)9rv6UHG%jp&Q?bF$95?;`~3={~D(! zxkunGi@7qwyArDm;D;045L>;S#WUh3&Yqlg$ORiLznl{Vc-3dv$8jAt6Yhtx(q;RO zRhxP55b~`r@vHk=AtPd*tifZxaDHMHFXA3e{-!`6n)di}mnz{!9=iN*b4)%cBumm{ zR@6t0kN@~Fk0Om8bQh2^{OgQ#RG9s6yEFu}9np=akeNcP59POpL3^AAV zu*h{Ohj@c+NEbX5JDNAXZR5vlMnN4)SEd6KOpwp%=fLj5!Edz91brm4oYU5@*V;_4JIw5lr|~j*PXd!C&TmPQ zpHFf=S37TMiBCFgHT%`P>S6CI5cu0@!JwJMES2`xukQ&GJ9MFCQgK`0aPl4(7G_eT znI>EhnO7{CrKOBg^s@=4I)8(%cPx!7S6>mCFx}nB%~1Pm*jmfgSNnnm0YZs2Um)JT zd%=Dx9Z}DMm6tc_eQNd#w*>fF;^;COwY{b$>(b|b)Q^oA7mP)x_`D~Y>tks~;Wq7J zFK|q}I=0x#1Z_+oA*{!RH@ga5U-oZOzE1BzG&cvBh?liz(BeDUMu$439k+h0*k z_WPaMrc->~D2Dh(^!1h4-h-vv&gH?a+23FU_BTC-3UHSiLJC-SM5sM-YaGq{p(d$3 zkU?u#Ki%VE(^l1fr)&QnIm;#~$?e`lGdUHDbGPDjA6_Y+zmNC#-~HV_jfErNsYU_> zX9H3L2y33i@uGqZZi#`69MAiCYf&CA-YX2!uwCH`))bPh3HZ)ypF)U(E?7L+cM()) zaEuE|j!#0TMSkwM9<_Ci-+6>8$X6Y9gy~z}j}RkP@wmF~P!D^<`ud3&sQ56LW^Tpe z*RHos!@k^-_5s|S_hFwDuLQyy43!v!KPViZ-TP@@snT0JZNZ~prlEw|<tSN2d$VYa zXLn)G2wJ0Q_X-qAgO`O+CBNPsEg8v30)}hVwJE<(;D~ z;sjUZ*`}1Nv~QrD@aOH`4o3&61>*I3BC?3|@Fua~;btT(3vK6TG$6VOQW|pc#||MnA*l&PjTNR7-IwqnAB^d) zUDjzg%9k`vO)lF)1*`P@1-_Dv6esW?ccEY;!e~CWcjeVwMe@Me}?=HVwlmDvX*k zvND}iMm_t!I8YOHNGUo`6W`5#eDy>}I``>Z+RUT;+QZatd$I{dS?<;HzkQL_Rb?+| z@4l$ajh7`LGIaeM+SQtbsL_Jr(SsZ6lX2;u;R6D>HPm(9JrleYeba5qRlW zbj0FU)3Y#eTT9fg{K(1n@IkOam$p}*^fP=| zI4k(5MoWRS^5&BC)I`}A^HVY8K0OkP6eo95}g8N5inx7t9(Lwg0nzN0q8viLA9&A(D;6fRAPU z8mFkG0L(`)-Ux>7=n3l~cH*--JFPE>xlBi1Yk;vSDf3AxJWfTgIRI?wt$>5jkKVSm zKdnh*8Qyn7%t2o&w(;XH@#1(Yr;Vh}Z=Etdvwmc@zP785?g`W+jeHNF0VCUCTiROkGXWN{%rlrIFq&UoDOGs!U#I)o!UfO@yiM2k zxkUpT8igypp}GD9wzlunay-O~5t$Lli6pGSaiL%udtqnM^CI8{18A`BQtoiR&D_IF z7H*k9{+-uS4(M^(-_D&xk1Y&pu8gK&c$eBD7o`c-lU(SBGM=$X79Sb!4KLJ1iixf1 zri`?Sh6GUJiNzzY^0xw<&}7PJvOnmOO#$gaI0Ww4x{-*swCa7eBUpgLT=TmdqU(ys z`kR+)xo{U2$gxALqStdrjyIArFkFZjv`c^g>d{AxJaa~~rrj5b%#FtNf5pHffelqH z21QhNBMNzw?Tdu-+_d|%B|9Yvud%pq8#c?}YH01R&>}P9NOh4=LE>x7$Wym=Y zoJmCfy|c0nOnp4Kr5ZpmmE`~%YxI|Lbov~^5F7D+b5A+s-6be4c- z(Eff1s!kAPunO0ebm%YQ*X-Mq*nqQVq<+}K9vqV=Q-ua;+$Qu!DHjT)t1IDCoeHPy zT)GQhG&Ty7u_kQ2Dx5()>o~Vu{2vudYm^1W?w;H>ks#*O!sETc0S4#iZD|plDh$Gr zh_6nW_D#&-2F*w&sTwo`LKUB%%g2J6DLg3b#u6-m?p{!fbxkwl{ho#v%1iiQgxIc6 zuRHe3=b_uP*jhw1-eveV0)y7HoViPOJurhRd-EqUW$ZyKj(_^&6T&Ak@zt#<9~@Hh zgV;vc*NqJ}G4GDo@HOn!hEV4+eA`zAf&leK<9M(&mTM#W{dmKzb2cAj49&y{@Uwnj2 z{^rNv+m!Cdy$XhBV3HOu2`Bn}60RM$UZe5a`Zp^6P|<}pQOAhkxzbAB^y3FOJ;bF0 z@=wG0AqtN=29AvkvZpG>a$Tk&QnVf|012xC79I>UxYRC1K&A@nkuRx798nNXG-{>ZoYzL2}aBEMp-V1SfF>Vem6?; z^%WsY-0#&j1!=J-z67A8S21IOD`XnyO^6%MK>W;_lCf59-;T@EtZq|=g8YqDR>e29-(`ci zme?%WNb(mpPx)%(^H$8bM)W{~YPS)|clk=;M(pv!@6{@s>anpX4!6F4E~R>eFf(X4 z8}OgK2l_h)D|*9=ve*7EG_VD7nUz^@d3^xnjrJ0(M7J$vOL0N{6~CBSGXI-3$~&`m zG^IiKTUgdBNQ27`y&QBTYsPLD>DaM~XubO#ElcYiqRO_6BXz|u#{7>d@a-ks&aXea zH4)9Y^MZV}i}vAvOu>Wyn1XT7#fO}*zm2ChU1zj4ei*MNWd09O8YYl^yv8{a%N~ZT zn|HFj;Fy+wvEX@9iwSzQ_X7*{Iqnp7T#ztna_9QD+Pin|mS<)u1dmxp$#B30{z9*e zNZ^XB+Mk{pMx`qAnZDFpTfHf=?ac9(#^&L0+m5VT7J}6(0})5Dk9#x9|3IeFD0D{C zD>8iy4_A4%NtVoayRL!U$V33qBJg$UXW>w(x6`oOIEm))NRP(DhuHo)0bfQ2M`lE2hTWEK zF6x7eCAScl7l7x|w<+vU6HsLCZ8TYSn%?3$S>*k#H2Y?#<~S0T;JQ(w)AqJKoMQY6 z$+?5#doMNg5jxjwTRXAzatI+YAFdBif0yB6ODAsqZti$H-S!l-^a9_*F-D7~smU`l zO6dlYdJ$ar8GZXsg|mY5>tZv$`(7W=@T+m`HtY;Rz#k4V{6ksQS8LO?bb;Qo8AJ#v zzp>9CTGd8dwmy8Jc+XylF5Y2tAlMCKR7;*a!?ItV$!L)K<@;4VYa*VYv1V1jY$daq z$vurq33x<_diIu5%HyBcpn9;y`vO|yI&+xyV)tQq3;+Hr-+JNE z6F0v@umjjzUG?$JsOt-ccb850<1Nf6RE;Hx?0d&IS9>K`$w6!-e2giDBr9mF+8bEa zv|aQ>JYwNmnuZTu_!Ko?wZ)Rs#WUa3}Kixau z(!Vj7fgB6ump|N(y1*|Wm&ycwKOA`6_XJ0P_Qx^AOcTTJ@tX}>136ZhW5x{sTt+rx zvoWJsKZ8B8q%RUbnuK$xQ{{;|3Z#VYcqUw+uVT3q(?8x)TQM;d;T9~c#m_L3l;o#% z7i;=CPVO*%&ocJy4{aT_DU_k!q<&e_(_m_?iJ*!+SpVjr$?JZq#%8%bhxt&c$9i*3 z)+PCcnV4{~pX2bP^LwvE z6L7zmn({dX`?uh)??`mX16RhUS-MdgS(cYs!5IYMyX_UQ2p0`(sS;*(P{3l-Mq;BVDZ=2{K+hEoGj~iGZ9_ zz-k)>CBVPDw!c;~&RUezA6+_t21X0MaK92rFu)|R&gkBQw&P0`cl3Ugi?-g3HzVNw zT;i;3OUjz1YMEVcBp8#4o>zy%<(WK3w>#@n(mgb;#8i)!@IrKG(-YGZY5!F z2qcMys?Vx8YTwlT)Z9Y%ErnpW@>*{T0Ri~A_^pI4z!JJi`t3P0p7!#gL*_(VAeZg$ zFqrY~!euX1i{24oLAi%Hn?!a4>j$DPUA?w{JIl2p4M>Wq!W!Gb8HChaq9sdsA|0$6FO!OW}zBy<9YNi-ruN(ASq- z2&|l7$A};s9C9KgM{Tv5X)w1~wxvYN+dktTzTolLLwPLk@_dJDyr8# zSMNF8tB+BfB}@d;T=q1E2i05Bf1b%4CR|A88TDb-Ux}`_-<)I4YVyFkKr60UTCd4^ z@NXR{rtRVaou@*-lVyVH~8aS>G)%d z+I`ty>q~?0pCi)*Bw?$3xPx1P^Lx+iVdmo6i$s~5Of=_5%>-wNSv zDMvl!u~~(6(H0bpYf16>UP>*g(u+9`_)e^yklIi3A1yV{GTr_m=>63oNvdeQ@v-!U zh@h?AgXRPk-zhu5RX=gu_rM|u5nT3W7(%sLvA@*H#VFmNg7kVn*kciTPUts+a5}vf zWg`-v%1r8NjB^mhaGJa4Ef9+E>{}qzsI6*#8c3Z_9_kAQuP>^dLa(N(p0MsuUO$ba zv`Kgpt^TgkaDpkq1N{KUhi3~S@uFx+m*6!kt{5fb3+tB=_E8sP5ta90j~+j{TM^@L zI{Igcmt8^r#*JE1at&c(jc4jsEKnT+Ira=&zB291XQ+w#fGuT8O4oFYtc$vP2I<7X z;rzEITIzUa0fY}Kf-SkQJt;A#{=1M5652D-L?*Q6dtMgtLQigeE24|feL~s#FeGxK z=t7C+i9OtI_pYcs*-mHvMy=9X^3V95i=x%PXOPNwnoZ}4rvL2{YH!9^$slQtjT=)n zj-WNu2}6m2-R$U(eK8w=o>5;G3?q(f+;{c}^K~UZ0dd|wx?N{*Q3s#v>LdXzYW|Ga zu6|3Q^NWN-Cv~TrZk2IkPAv@qlW*N-dZ|xUnM`AGKJU71=9-^q(JrzXx4ttn!Cq-` zS^g5))KY_ccYuU*ybG<{GO%I_*I-8FOIxsR+yPXWKeH{m?(!jfYwNDQdiH9hit19Q zt*Z451r_~}xd}YGs0UJcO^9==hh?RF!I|rNzgJcfnikv5uhpZ9keH> zCib>>=FWzV)fv|Bn)B59EyEw;dnvUi)_d$39;=0_E&YuNgSQ_`CTzpx)Ko|0o%PYcp`rESHG$_) z2=PisQ&4o6T_KU$gT?M4(yX|!>-%LbA4N@->k}Q1sif)0v&_amx~; zEolN#r#8~wbYTp#X&RoII7A0;yP6W zj(dL4u&>|OPRbCLX}K`wyfP~OHilvW(&5SQ_5Y^hqvN!n@Tkh!6@fL7=Z|^!^G^n5F?J z0WZ_kkJs#a9&b`PqQoP92=kTR3{j8w4I}DZ&^FK^XUUslZ99r9z45x>R@TD~R9wyZ zSEu5K{@-1<$o62v*TJ<54XWegw1_7He2Hr~Aa!(LmEJ`t_8@lUAK@z&B^gYHT@ zp!0$Alf^ZG%~u08vmtLm&};=ZSUj;*ilKnb!SSd**6g{Gu&grsgdgLNFnFJmbs^@g zXaQPa_j}Onx6bk$5ugAV1@7GmhlE2^z?s&mJ#PyvE<$uk?&+G_QH$*Q@A&E}8yWAX zYH)hT;u8rtJ21ow{K_PI*(sk{*854dRG|6E9C1rtE&4@#m0FOVe7;#m?^iK8Mjp&| zHCkpZuot;M4M{CSIH{-d5V0KsMM3x6wqa4cHPZIjb@yS4<}v$n(}cSHXNBi=`%=jk zp4bm*d|XQfVNc4hZxXm~))UmnKYad!md0eYl#s_OqwHyQV>e_*^?z)6?%6<4iLviAGu?$AGjkwRH{8sBSNMWDa4=U@c}z!^?#|YoeiptpLZU; zRlEO6^KDbaZjy2BBcqGgKbb6XE4tT*{A-N3iH&sV6bx}_KW0|;bXg$oYK$HyEtwY( z2}^{_;Ny>P9sEsWnyca51q2EPzdXULXxfim$h5ZkJN61NC%HRzl;PM0{DR`WI8b1j zKVjZeGreRwbL}E}p1~6(pM_eG3&1u_C82aD+*y{vNj86ZD>fRf> z4Cj(Pbu#qe{05QcbPvn-c$p1!jbh(W%XWfo7wxcmJ?22Es=;4n^4r)YaFFg5qQj{! zjSPHmk)efZ^emtqzB+c_NkEhf0E@0b>DYT?t2hUnqc1fsE+$v2B?e1vZGqED6l z^bIrc$kdp+gtU9NyLK?j=E)IryV2dQ8-D)G_=x z_&8~etQ)Ga(7*7!;5ZFN#Nw~|wUdJsZ|DsaX3RRqy9G?5Av!M3Pb-tKb5E^%z)m6b zlk4`0S7phrunxDU?+nTj{;?Xzd?n%S9OSSh@x#yMp7zN8%)eCp&rwr$bV_dCEIh07 zSsbpGB}Mo&?WDT>qlb`$6C9q2wUQx&53Y10cuM3}s@St2F8RdtKx{f5WftJtdpW(U;Ck1UoUx z{ZQa19a`hkNrD_A!-m(~`0g()5Lp!OAIzWOeEidUnwTfDbmAfdC&Ml_KVb4qty<>A zC1|?r35yJt0-}+sFXcsKm|@~q-Ny(X&_;8zELcGPkJ0{3#^Dxi6X(E;oJM+zyZM#=@7&# z9dJWaR^KK7|ML}2qa>Io7ae^YxN@EeJm`8{pFwSHpo#WYZc*q^n_~1FDtvcH_HtsR zeosSI-upaK>s{-Ek0Vt|j~qM#EoDru6}E2E>i9c)qJMpk+h7Xw!?f$&TqX77sNjB( zYL^&NhUdLKil9-u*?3t9uCJtQ2==HaEyz={0_fFGbhIBSLS@X!j5+G=#vCe5dgDqx z-u$|HdV8i>O*Xg%i8UQt#sFNV|7q{5qpEz`c9rh#4yAF^C9pwK0SW2u6a*9y z1h#a?rc3GWMnE>*4N55>ASu$l<2?M{cb#+Ib-w??R&oT0wao1;qA=V%YpKj?>Y~-b|yZa^V2oH9=^cr zs~K18zfjU0M}5Mw`E%h?=ru-&_&`KZ5%_~Y1jG}DoU_+dU+B~_-{<`l@1!(5J@wVo zfv|=Accn&)XaXeHAG$~6+k`s=do{Y+=^PQ5MGq)4jLgMi&)rabm-Qb}MUpYU!`d6? z<-~s=i=`!qi2iCOKn`vE7=+Vg781N(PeNdwIflI|bkbU~QJ)0e2w!sHFRcfCU5==$ z{lN;&WGNouSNUtdg{B7r&IK8YhVlx*LckM0w%F@W>dB65z^sI^%9NIF| z6o2yK*F-V@=K0%qWkon^I{6M!moDBt#QTLvU8`ANjJ`#3@? z9`c!QyYrg%J+vl8CU_GDKOLJ}fozJ;8aaF_cO7`XM+xb~pguCCOlJUfdcAqFcU26EmE!d3Se-a zPoct}A~jZ7LsXJ=j8TVErC;eGc^c|DjRF&p9urEGs5q+mbZ{2wP7u)mmPuikKrK5R ze1Q_FtZO3BVm4Nqz?i&sY)G_-Ao)9L8!fIE@Ug}B1o$f+XERmwMigH6-U)2Y6br^f z8??B{EOkU;yEcIVx`$YSVh2Ezv9P!k>>zopNKXVIGZg=FyPs(C?Qr!CTap4*I-19? zXj#Xbo(2haUq*JX^Q2YB=x4L?{4N3GO)Wv@3U1^ETC7)tFS7OLjc40gw8<+v8OLx` zBJ1Z9%m?bTjgK5=VBUAg^XAl*S1c{oKWq+r8R(XDMYeit2ZoyI>R(mudQH`EBzAWZ1^_^^b#jTAiWbhs!_bNboKD zo+|n*G4(c+jKQHg543w;1ZI(>Fphlb=o+_0dl@N}>QoI46%rR;v zsTO$a>~l5sYl6#8 zwY5k1A}(`1W+t;E4J^Wer{hhCla4v8fE-*o9MyKpY^s_~j)|L_giUcH?hkF(+2+9P zZvx*klW+-!0VqVg0BwkQ@mXy9&^4U=ZPc=_*I&!7>OYsJgkh4Xy5p&9gY6tCIvT!n z$SrttZLuHn!5w!2hBMwa@a%7LPZ(INY}e|*R~u`t;~K`SYm;A~84TH-Vvq3kZ{(Fq zR8+B<)+$NiB_Glm8N)(1Do@Lf5BX-TO{JdyHoxrkpDIjzJ}JlNMzzfRDRg0tsC6y6 zHR9iTb6Q~&2O<7b2H%Td{sY(NR2{c^P%7_aSe0r@ zVc<}?9qNG~314Kh#4s5Uj4lQlVN#aaf!9CcyXE5rvxcaWyExYY0C^Voh zZu~?Iv9N(=8pycmyn3(xgXn3%y(skMVo(h-w~`N92x3|0E9aN9zsgjP3E|s(gUhc6 zAE-37)G^F?SmIgCYv{{|<|y+z0Ju8O760b1GyC?4j8MTsMc>kz$Hi06-@8PUY*cT; zf8aKKXn6HuxH#+>uh^V_d}F-HlRdR&41950@BMZe*E?c-RO3|jRr(OvBM&4`j!}=-EX5In&K*8kA8E0uoL&k9i-|g#^DVNq(ovyph+@}t1#%-4J?WiE^ z+10O?U8#<(O%4oWtzWd;JfpEy9>jENnlm%{~PlSBHu>B-7cs8>6=nH*Cel$YUO zYdQTTxm%{^f$L*SKpg@asX_tdr6n@-MH9^apu^N!wr}*KW3Eq5pZ|@SrQm-mc?j*W z^OgyGv)rL){(YszuUx=wc3dQ21R(!8b3c2_p2#hCIr|14sqYdq4il??hT4A)^w`gp zczl@RGx;Z}R%$?h)F%O!@qANS#Y9!@!(g+2wuv(Z?uE|*q#rgn*;^1TGlTs205Mg< zBvp>jUOsCLy5|ap7T~r0*oE(rzQ}~q1LkGm&g@;3+{XJz2=mv=!oVWW{GGpf9MvlP zmBd8e9n;UgaA8#`W5Zld;<11d5&}&%aaI3+GymQ1M)SFwTYZ|fyt0n8c67m4HyPM2 zHRy^TU#K2~9bdFy>9Zzz?*|3l+%BYELuynp5xstz7K(edMyDY;3N-C(<%n zl0g*mdfAgPMT>(i7US!Mv!ceTF507KW->3K0MLQoO~KM$X)n zdU$tE3kgr0TBkWtMizyQ9{v$8KL7~;$~M;LEv)77LrHa7g}kDxLCR=Gdyz3kYpcqn zURuTG1mZ2%$p!)MxJT*5F{%jn4HyWpHZ1;>T}uMzDN@&$u^&qmE)s4gC>af|MV3=p zVx|g^#e>nF+pJ$O4CM-tE~@u4#Df_iy;LG;1dY7jeJ2q>W#V{ncTZK1o05ChX6<_K z3HA4x&|iQGuiwQ~7uNX_%i$U16fe%ab=9R!|AQOevIb(>@>|MXl$Y`rSHYOTV2^Cc z)hP5dqo_&TmG1S86Zsdpt?8CI!@Q_!w&oHlC+9q5x0W1vXVxxFV*grQK4J#N^Mjuy# z+P>Ja=iu91`p9MFMdJ7M^3zrl97QNhRaMNQ?pijpf>R=zJ%IERCuxqWV?MSH$?J1h zS4H6`CgQ0EStzwD{$>=IMeRb|Se)st!0Q88@)5r>5|Pv_tdxmpu;_PDqfaf10EYO7 z+`L$CV0R2*Fj1eN)giL}h%0g?Nk;(wm?m=1}~4ym%O$_=Mi;shfxu<*?YKi}*9*Nw5UUJz*V=zmVAO zfgHIhrFr(YYiW|%=1jBRY!7-t$4E`z(oC35TxRC;1wfG{n)dW9*X+#wQ~`+H$g2U4 z^5J2QD6d)Jq^-Ypy|!to0momTyN+ZlJm=3l3>FL8KQ;+1gRMV760**YKoDby~u zv4iVSwNeelyCTw&Tx^Wp=+CEXjruUHtvQrB8~j zzpWYz!_(|hvLdYvw&K>cw+c@?(F#F2v@J44+79!Pf4I$M)2>pDi$-3tGeGKCQZ~b? zDl9enHk7u*eHesfs+4H2bCBl;YTqATDd;Wk@EVjbmT>n48JA_2AF^Ipu?e56`a`jF z)>6udh;H?4L;3d=t)SYFhYH&Fa*m8pU)@XI+uQ*tL1aI9KKp0e7BVW2`Fg%TI3w5S zIB1{&tTF*47DZC;`+K>86&aPbr)iKGMT?d@$IUDIlz8V!MPF8a2gQ^K9C}18%WJOt z8E{N+Ya!pm70140_Gsw3@7g6K=7U;WoUoPHGvi5|cyO=^VZt~>SazxPfvL|*+u!I^ zooTBO*_V-3n7D;t23nbii~}+WRVO*xoL}nFEA|Np2#Say*L@W>L-B`B2Wk9!X(lje z7vk{E7pzxll@ieG@!-C>qZbV|KTP%I5EAvY)EnTEOU=7V(mJ`)8Wq%-U=%PH`mPT) zpAIp{gT)>ixEAJ@$ZpVagJ&)JmIx~p1Xo#tw^zK(> zNcR7C8GK8y0U4kKSDPhV{o239k*Ydi|FZM@SUKMh_DVU0U_@9A5pe2fHGLXywW6%W zpr*oAq||AuXMww<_}~HU=yOGR-OfbiC0VKuoxbIr9%uGOj0`V;L;O-0wyvM=dC!yu z>)O@GCug+;PeNn0Ti%E})9IB=#mdL$x-TnL8?9818#iscEJsTWEsx%L7tS9!;;&w> zNq9~=DcIF5o7;(Qi@GXBLLS(wE_M;}98OioU8>j=T&I}sgLb`*EU(|j-L!-vS z*GaP+IN>BAts~%6skBmyg$aCqEyI|RS!|_=!snxb5JbHe709n+@M@@!1GhW~A+|DL zG98xSk5C8D+z5ZP&>fMu#Ppx#-!IeL@jH(Pi+V^#~kwtsQ9Gco6v zP!p&-XIw(?C%zysV6$#tz;*tOgvez-7!abZfDb{|1PEdr0i+090=*Kg@Giuj6%)!% z4>(gA$oz=(u>ca-I>^#}W5JXz35d9YAntH}_OOIJCb37H5T1c2fiK0N=!rw8*Sro! z#25}HQT`Oq&YLbexybXZzYfG|;2g$@J{FXO9jO@8!eVATjS!MJSsmCz1^74ReldT39ZM*IB`x~hLQ8$0 z@?E869)MIViDJRgXq&{FwO;`GDIS&saYqi^aPF)LQC;V)zbfXzjyHR??pf^NYW0VU zp1T%|XG>>ENn?Q`aewWKVTd*zo29pJ4d5B|Tyu}XW#-8|_|}DxhnSvDt|3TgZ8n6* zT(M)ZXpB1Z{G*;iZkNh-RI}#jPf7H>B(*2s{aP9ak85aOtEj=6;{xby_lHLAm#j0= z6XK9wvgy;OI;hr``cl-xum)$yG(~w(Wy0) zh%q<2TU4YxD2u@r9?~e5C>-@0{Pw5AZ2YH{IbI77yZa;4XY~xsQn#ma6RdA0Ip&A- zTgzgzxSu5tbv==32&~k-O$9LU2cKSf+yq2x2rBy65b0wrWo{x$3@p)V6+X{b+e@s~#aTg2Wk zl>-K7_+vnOq&?8kNF*ozJ-otR_dyr==d#P)_kV@kV=+1v$J(+!0yv4PzBK}ltMg;+kSj|i}2$2gv z8Nx1bcD!^-v$lJcxw>ru5KH4i1J`4~ll_x5&k}A2*DI7*9n3{a93@#B70Mzv9vA9t zDyI_hhH}hs`i#jjUxs*=#>#@jI#-oKdYHg!T9Y~R3wbO;C6B^(L{kc_K_Mk_UC4_! zs$(x@M1Oi+neFAG_HyS+G_vQ`*L!}XQAk$Y7D8rx^!Rvfyst=_UZG~BQT=PLV=p-+ z$^=z)^H73FT_0y5WPjxTj1C#SvTLpBA3omaSDUr183#P_s6t>opT0{!;begQfD02^5x`D7r{I@Daz zWD)ywzUL?h*RX!}#n>qCQ~Fd(JgGPOLNWZjIy1{_xsx(SrdoRz!0v=5t3E8V#F>3P zNi&v_Ls~2ArHGoUybp-{-g6~|E+&R&+HwfmSbwTm_PdX9*ET8Nt4;2Rb)6t+CRlMu zhf9*0K>)7ML)l)lJtMq_?yb1-uwN8*T-uJ~K0?wsPZEUO$J zD^yOIsQMA_nDULYDw=Tg%~;yRGK06Tzt-f;95Y_^o8pLh=3$n{NR=@py4`Z_lF=Z0 zaJY~oqzT*@D-fglQ~Gu6NnUjW!>9@~q~WWQ!lWgf*f#MV1lkk-@`3Ug_)qvxwkez3 zC`_OVD2Bi+&=9H}7(aR;Dzg-W56Y7c;IhJBeO1q{BvSy_-Ic^jS`}*`p{#dP_Q=jl zeo#rfmaG!ryYZg9jvLHQOC7Y1a)bI!GMAuHGd8}8M{PZGvojGDC=RKsHwq}{^b>RY z!PR~@TQCswBGaBd6D%@#`?il|-%SUCo;6GY5hiO~V{b)u>%CgG2nsKh5TyFBRk1oqM!W9k)(Ek|v$VnC`c zvV#l4Zll15nr7PH*LNY0h3*$MPe4O=P>7DE04I4eAsHL?JoF8h&@w#YjQD|G0pE^= z{flV4p|w$=-ho|69U;ERXSS*9LK;U^dw7`A?%;{aI2-Yh?4<4iabW^XP{u)2J;GQy9I=n77Z&U<2@ zI?FhX$Q0kLmOoS&_00--&RaVtLn?$s!$7<( z%aU`7KT&yDfNF*p|FXST2h|f3Ged=tMD+RzzYf66#3X0M=~6E@@Kwb~w&s=yXU+-; zWSfePQhLh%us4NL!uS{4H<_2tiBdo61~=*$|8%XNF-R_%2gL}&j!VQx($jk#?`ESr z42q7x*OrC;pB^&U6t77cVoyxAxctm3hmjX%bYJ)(qhK^CihDwiUe;=NE^KnBgC^2j zX83S8Z(l(NkW9LN?qw}&LMXSX>g+<$&Oa;r%q8h0EI#BWy?Wpg>Pa(`z-OlJ#hHWe z03ER>@a>vRr&CRtvu-yU<@11X6c*dXgppZQqW|Scv*vfzT zi;cr_yO-KB3+S%e_%gGl&YxZl(K4!c8!^Cj$kR>rV$YLi8GWBx7w&JLBE5ESli=Me z8wrdcjeiAdV<*_`Plnc{SJ42qh6F0omwd-UR&57Pp3l1WGyLPs#D&2k>CPHn?rLoJ zO(`u|EyQF2B}A;fGJS)?&p@1lhA(tEUR`rChaFmNn)vszl@)_Z!jJz zNn?DRJ#83b-BW6BY@%`eDIJY>)^+z+&8N1Fx7zdzkLw}}zR)&h3A0@x=^M+c3xzOI zetVps^R+CyH`o&W%v_<+*e{6mlKZv19&3;pGw5VUfoK!-?9nD@2W*c;$4p3ImZvlO zM7~*WT%#igLN&JmFc}6_L7TO~-S><}xc(&gG_t_w+x7|e0sW~dG+|8a@?GmufHue9 zA=2N|;FLU?EITt*ou?{^I8%6z+=+|(vSL(Piew57DRKD7ANFQOct(;{x1-yG(6Qhc zG-Dh!xt4DlT3`V|#n*?@j@XrPPK2KyIA@SS!iwW40ge$HTbt7gUT;V`Gq{1j3389j z7&`$rQY;4Fs0`%*#0oll6b3~M_dUvc_`!WmP#}~QgFrDZbhGy6MXXqG%xeY+CFVfz z0vJ%uT*3>P$GF-+SO?64Jh+;xU+6ua$5oA)0s7a+ojpARDR!(_dx?C7S1vnz65HwH z^NdjB_HBJzNLl&N!zf0r^4U>#-iZz@c2AB`9oWXspmrU_3zktDa!7=-ytccL7;RHs zxlRfYuZ*!`D^7-13n0r{1&~`@Nw@$i0SgWR&c&_gWI;Xn%wiH|O+?DB%$rc94mwRi zSDaKda&U(elBn^J*wNd-y-X=6@@XLruC_6_xjb5gI}n7mnjuQSqUmv}>{lbqi({(Q z)fPbXV=am+3l7y3*pp0^V~Gv&K(}-zexZI$_ZNdsr7qc1fA%Ruy=@y(O`f_#cFM-f z^ui#u%%X<{X+_=yzF@q~y$Sn6i3gyjH5^h^NhBAYZ%%dnuWR~k=nj1}`3^H}!s{nF zkWA*^Bm6teIgrTb?nt{pQmuPPoo*a@6d1Wdj=U=7M!jDPP3s=Uz(*kqDbE55`WM8bl$M)Te~h^n8g>5@0GGi@SN``HH+V= zMzxIDkOXBd*aY^W(b$D}bz8#AgWZ&}t|SzaHZ%s(DmI=(#NG#b_l|%}Py(5j!Ts5a zHbkYsj#7ztwtq6QD9>oQB3c+}ZwM@d`ZSQ}ApxZA&PO}L!F4M*uJp$jlv;#L4yrm; z+{M6M1*+O6{tL~t6v=4DB|jLgBz)?Dp{%U$AH#G&Hy@HE7SLYK7cgZOne;@bYlbzd zKup1==^k}WG~9XLc!!$kT4YveCK=4J_^Pnhw=$=AxZHr3kriSb1nbQ&FJ*ygqnbr?c6E|i@0HSfy) zruqH)3uF$`>;8B%x@dceP<*(Xw{WkDO9u9%L|YK4P@4nZQP{N14l^G5j)fh=1XBUZ;5WPvZd(-46L(MfT0XwlXJI}Scym1D)&1Uh$08=3 zZ{~vdAo9;|Q6ULUznWV=3+uhF;m%A=9d^efoL{NcbL{HCX5LG7-$6s;LbIX=W^(0! z+(8qnzI?O)nLTKei~PSKd%$>hvNNj&`gTDq<09eEW}u`)h)&9UnBv_G9#^9MGWM*g zBKwQ$ua}v{rF$OpiWdmdMfTE@(KnjK=-v~5I#cPnfwwQ~8e_t+B8)k8wgAL0u;Qj__ccaOC zfa_Km74JWvoN`&3G5eo|wD*axG~G;Zy@aN=^HDfd5c!T0 zAidA_7vTQ;%!waN{1JU_$vsZp2lB6(W|ZMtH+?24J_**?aBNie zOnAmI=~h^WHvJd0!ec^7B~-jMi+)V8oR8vUO4ZIZTxGQ1)o9Y8;0fpW_>|&z^x$jy zC!$iKKOd-_ID2|7sb~CXXqbYli_ozkY0G2Bj#a<4Z5OcjW}8gJ*%jzgMPEA<2|ej! zx7%pp+Y#1IC%4~rU^{py4<}5g`;_JOvG~2HTX6$4uKqWge0g~-9fweMb4&g zXGnidRBsOoY4hMK!T;4mArF(Zv&^zFT;Vfe=*34CWVl+~OAYaEozAQrQ!#Rm)~Y|k zVDdPuNQg4erjWFbXw8@1$m4DOw>FtvsbNw~Cr3kcL)~(8;6Q)i9Cqidx4k*=COSNuMd`z58h5J8I@;I0&z?EE&l z)pTn{Y1GSB# zZQD!vJ0M1V9Qn3ei3XtRB$2}ctTw_!7WZ&;15Q38_oihBp1r{AjNgeQqv@w|mnk-U zKuOYxq#${ZVAP*M+@cedT^$}%+vSZN$@ZvZ?7I$g2Kw1$5So^TwmqBGAQ!xrulHlH zH8)CP%I{hY4M{R5d|b~_JQ>`})7W8AwzeKAbK>*VV@1&Agn(>G8Q?(mb0 z;eWAP5~y=-v7I$Rqpb_PR7?^unz7yH6+Nr4>K*zYYP^hz3kfws1;@N6wz``u8Iz28iCCY0I7)>>Z07$o_cJ z*&AA6LfrfR6MovqxP{!IyNlB7AdZNRryEMNuVPDWgtq=jyw)aNRd1 zKW2c}H#Sv(Q=tC*8osn?;ws$zpt)X#B~9a9kIlr+TQ@t_8I%%;x^LIXu8 zzG3NCN)}m8a7a5x<00z7e<4}DWwh@j4a6-Ve{?3DFZc+}pocuSKyXeJxeyCufQ*Y< zk}^Q-tfKFkND0)|{ebC2Zd{a(llUUc>{XQ+_hd>gx#Aj>`EZ9<4rpLyKB2SdzSnEP)d3zO4Z^1_{j^@~=?PPhV= zLq|WD!8HI0Wsa#nT6U@BucWh?VOwEAQ~ZcS@{mmqBk}?1fBYix2u+uhw3B?X_0zu=cL%lTRn}z!^O)T`d3t zfdD$-A8@h&VbVmxT>!wq01yTMfD|Bs&;d{oLBKx%!Uhoi!T{h1VgHNWA(8+ANGAbL zUx?H%%mCsLh|*vB!zegF_)pnX@OpZHHJ(cSeZ2;Ea`1Bi04WJcSw)G{e;z3bMOi6D zS$W`39zgWycP)exQc@C+pnq%n^o-z-bjXiq(7#wQpXV3PS+JIM@B}0kB%~E3r4*$l zc_c3?N=ShJfU|_0la!>qq^u*%!A06pLC#suMOM~P#zjWf(MeiC{?sqzp>F>E-iqSl zo_=Bu&R&i%F()sCIMTseTvALz98gw6dOJ9I!2Ed}VXkmbm2+E7ZRdF4&MN0DWep?@ zyft8MaGelem}!WinNx^|lY;X(HB}yEq#_dGjez+(@E{SlJpB}rD(8L)R|N4XS^ON& zFBX3fm2=k(uJLGi`NDW)#bm@J&Vi+Uom~`7u4w&J7Q9nA_m7f6K|x|c(qdk|uHupk z3JT&9QsPolq9BK;U$CdY15(t}kN1y+D=6@=jQc4VgH-`%VB>CIXnFo?j7KJ>zBsPPU5gzFa*rg-w))KJoN#> zThYMF8SWB%#lat@a_+Q=h)SIPoBe4bq7ri8qx{XP;R|!{_wqIK^17vR?swBU$Md&- z#Zwu-SYY7eIc*Q3l2W45l4gI}gQ$f3sVLCF&Q6L>zh(X7ZBv-fKj;=*^|xeY@l&UP zw>-bmZx-?Yq3AD`|KR68yx_w-g@0RtD$l=JKzJHV1ArU{#0r42^J{Z}0XP9bz(H^gApRYh za1ba16p|Muzyl0vBqTTp?8W{&~?^^_C0080X?`xucndkZqD;|p?d_e^PfSB|YyZ*);r`Yi~miWbEW}*S|Tme@)lnxHQt^h!NDxW9N z$rY4C?G0iHPiMF%h@XL2)yd7l8N~A-zJNe@ftZF8#OEFVgB;iYfE^qh|H^c5aQ%ya z+X9vZE4~8v^SgE~N+VV>sy=nMs0*X2{0r)49( zZ~bcPAU`x4c1!z|4*D7T(l5~TPuXFAU$av>=tC&R-9hiPZGrkjcfI|uo%#pV4eZBP z0S({^zykz;rz7A6xC8JH>-Fp4-R~SNzya_DTmcv$`VZw#3CmwOo?vPUga8|WC&=UX zx7_7lxiBCQq#ymI{w^yDxctfu{8hpOSO#lA5V8@f5-Jg11=CC5DMctxsPLy856vGv zi8YC@5bF?Y5exmH08XIRx4_dEfd8Lq|0+qeOf*DEe z5_Li~&^B3+`p0{xS_k~q;$Ob}b|1&4_0kj(03vGw?L7SoV01vbc`WpHU+H#8j(OK)4cU=G0X7bB-9-s~IKRgm; z5~~u2fA0R;>HtzsH8}M)*cbd^NPn>X0UBQ3!M<=;H-8>=a72dj=z2PdT>$r8BxM2M zbbLSM0f23$U*k4}ssCRzpEm%Y5Ce`4r$Z~xDHi}Z@B%=?G62x;{)@)@9qe9@0HEcg zQ-E*aZ$84)3lTsL&KwK?E5HTt0_Q=Sq=1Wn5^xF71oQwSzznzn*nwVm0}!CrK|mOA z7l;I6fk!|JkPhSkc|b8x4pag4Kr_$|^Z*0EM_>$?2HVCG@D0EMyTAdsuSEi(g3v=) zA>0sthzLXqA`el8XhN<+OdvNPHzBSNPe=eH400b53rU2eL!LuQAg>?|kakEPWC$_| zS%9oUzC-p2pahfz3A z6Y>y>g6&g>(45eT(1#F37)O{+SWH+)*hM%(xIl;{JSL(d;vfIily4{}DYvPps064kQCU&>Q$3_Aq3WcXrNUFw zQ;SjSQae+lsWYhSsE4UHX~<~!Y1C=#XhLXGX{u=kY1Yq>oe?;ramL{c>P*I&hBFgq zc4+BoC25Ul5wvl%rL=vtU+GBb1n4yBoaw^p^5{D07U`k%y!0CMPW1Qb^Xa?kml%i{ z1Q~Q0+!WHcWf(0Ok&GFPEsXO_P$mH;U8Y-12~1T?<4pU^oXqOXFy?6H z3g%(vJr;JBODr&!7?w(wF_wK+9#&0O57x)5^{g{&glxiW#%w`s*=*fx>+B5dO6*ST zG3-_BQyc^w!WKfixj3~sy*Zz9c5<$BF>zhua_36sYUNtxrsr1WhI1!# zw{frWF!HGL+~Rq{)5U{5%W+ocY{1#)XFr@hI45|{{M@~BmFH%7$$8~@U3imuJ9x2t z+sVPEAhwTz2e6bvJ$r>@+GDv=_K_e?@2aFewPxKa+1oB8kMG!){;g` zzm~?yh{(WXvSmKW(#smiM#*-_9$l2X=zFo^;;I~<+)cSmxe0j&`D^lV@^2N06fP^E z6`B=(Dqd9dSFBRpQW912P%2gWsw}7sQ_fdjR5_>Opz>U0UX@4nrs^}*d9|}@4r;k- zm`l8uoG%q#T2U8LcUOO*zIj>VvhU^E%X=D%8n-pxT!CKEz7liggC?D(xn{cNtkyX# zSFJKFthTInsP-EjA{~95$2t?boVrfBCAwHWIlbF@UHX*zruymnn5)89eXlke5E$qg zBpG}*%S%TTL z`FZmI^9~Cd3mc0Pi#^LLmWh`0*Tt{jzCLh+?FRhDYbz2f3#&q_9cxYN6ze4$S(`|k zaa%!Kq-~!ao82wD7JC|d2m9)qL^myOmfk#cFmlLs*m2Z#%yh&$X*i`heRIC#ob0>` zQ-LMIR$NqE5?#K!s<Y^-bc|V#Ru!F?_1~x@w4@N?au&)I`0C`2Sfxc1gZvR1mc4% zf~t|UNKfRuVBz5C;FS=qkb+RcP^Zw2u(M%z!xnC<-+qpQpd3*hXkK(Udg+e#o#MOX zcRlXDzbA1o@!pU7miHUOIm7RSFGgrbltofU`bJJfDMjTxAbbFS@F7|{`f2oWjB`wX ztVC>T>|vZ!Tz|Y|{FC^Thb|94BwS3$enkAp^U?TYwa3MYw22{!i%AAab;&%*G08tt z>{I$uWm0p}$kPJS=AT@B^7<*?(??Ga)7{d?GA?ISW^!akXYOS=XANgx%C5-a%!$p} ze+GZ{>ACjvx?F+W)I8$6z`W&ri~QaK`GS%{w!+xLqax3u`C^met`fPDl2VS+gffD% zfU?yWHZMMwUnzfGAzJaglBqKGCGaxf<=U&8ug0tNt2(OXt1D{wYcgx;Yh&slb-{Jm zdbj%d*Ee1dHRv^TG%7XLHib-4mRo*uDDfTt=%lFq0TpXx-C;P7Uz3lti4;Mew4ayC^ z{;2S=aY%Wnby#hEmuN(v&k{muc5;|%;)<6Dyf;c(xcJOuh6$?PYl)wdi;q<)-0H|(&vBO6I zAgBJl{`$r7>&4SQ2n;uVq2Jg4fPb&ie&t;RfTBwPV15SxuD$_)Z1Cg*VApAB@{40pN|#?{(iP zH}M$&c*c5)-c5k;KOHA;09sOrBIE}YLJJVkLZGyelP-W8)SU{2p~`>0U?x#=yZ_}xeew6gtSC-XC>8%>5Uyo&iOD%-F^I=l=t$hc1DvS zET6Qa?>#bdCT12^HhuxY^FqQhvKQs#6%;kDXliNe=<1o8nOj(bA(@ji%*E9W?(XLw z5Ez6E4!Iv55gGL$IwmnGIVCmi$3hDEw6lCUBi9f{;{*WhyS^MY8M26{x<8cW&g=8&zEB zfb8t0FPY>Qp@TABQ`Ng@9P!hIBPSjFV}xjZOqgxJLOij3b${EfvGOTc`k4AP4Wass zqzENyGE643nz&eVUtb7+;0aKvu3PM9Z)lOU6Ur6wI%JrofdO!)F1$l|cl-|J{o#LI z6RZF!6*u4+lo!m10i+a{?@&H$0ByYPv5#DdHiY>*E#%0^P&A`BO27 zA8dvOd=6ov_=0)vczc?f%9tFALv8BHg(J`D4K}+1f~tb9(3nlg9Tl@3&eA1TtqJS= zX2{Vyi~(j=|p&Eeirn(BGvw}q_^ zwR?)p_jlS|Juq`q)7|^p56)eDrMp`u9aR3o@!f+SwOI{z&&%cC7v=fb+xg|M#ZFK5 z9S#SctAVgAEvhz&>Leb(b!Y_cc z)21tLJ#t+v)EyoS)u) z%~Ht8Kk;W$D!~lfx#BxH%~U?70fHLeXlHH4V-5R<6Kxr{5VzKwiu{Aj;}rv(bk`G? zJp!kUmYk16XU7#!fJn8Pm5sXxZXVpE$572h75(|m>f%GWR-9$GsI?)sU%ON}b?;se zd#H}rqJsy=u-B97o(<5P%cnB`c@x&)7nPpCn3OYEb;MvlZw1M5i=NAwnHZb)U^L0nLl!U{O&Ayi zjr%=p4T^7}yZ!bAa8sKK!c6qq(}$5_SJsno+FkZEqN=?3=^H~k({pF=yl-3dt!*!Q zL~|m%7AX_OQ?D9o%^c{9JQE%vHA@vwLmnvT?pb7>%RZR-zB6nvtzU+?ZD*oCYob43 zHh0LK@=ya~v|)Xqc>=Vng~4!s3ziA37wp2!Ylc-R`WCmM_9tT2%b&N_XDdZir}wOu z)A6OBz3`~N{FOE3K+;3$EL~+;mvocxl7b?=<~7l8<(d5TgMOOYa|J33{7T=-7hDU| zg@l6F4=dMB0P*&*B_VYiQ7 zt4iRR-`L6Em*(51J9|(9xP-`N4dwA;Ml4MyaT}K7qOl#3wMe}BI?#82DHUC_#ODHi zR?@D==&F%6XPQj!*{2%J_c?ILer7IxW+r}x30Js!$1^Y8+b!ozyBw?oMQt-QLI2ug4{ zHQ@k_8rm;vzs3lsHo5+RsEv|v`d54$6xtzY>X z&!`_nG5U{|D7qVE+4`*_xHg5?J~!ph*3FrCv6Z4-QFe{xNn1gA8)y-(_5&Z(F_F+% zDy{5?nMHAtDcv67iC%zpA+#aU9y%r!dk zUZDP!rnzAFScpj56<0=ilh`CnFYDd9p{cDeGmn?g98YoA>Z7{nSUp?04{uIv9U9Dg z#i2N`bN7_Z7w3oz(@Kq8(E){r=@A(kEUe7F+D-jhZZR)A&x|o76|V{@*?EdheXSfm z*qb&Ju8tS9n1E|M^`F?BIswLe(HJjc)aPUNqnFAe2V%V^01+{caLPX6kiPia{&BTn zxPN&qR#^47V8RlAKOk>x~#bSE|=r1;hn*1*(sAEB5PZ(GMS#C}^c9>?FZ= zCzT5DUMnU2Yic#U8)*v(llHx>ltafVVtI>|gvTR_mUsM(INhf>8xr?>HaB}+r+GAK z8_0r}lz1-pKP9@pnO`cLjIFi`)s`Qq>=b_7X0&8DvtMmhv!p(5ux%xo9O9X~(c07! zwyPpy+~Qs9a`6n`~-cH-=3_tCUpVll-Fd zSTCL)T2FR=JSj_QH2=pQ|M}L&8!|_xt<$-Stf47sy4|wFgB}5m9-Aob4`^bvhZ<9u z^3kIcz=dYAx^s@cS$kfehW=2wZ9>^#k%kyAb{lOOGd}fIo3p&2*lzXW-$Pqzlz5dLIwKQhcSzq$wIj z-`^zyaxGSTu4ra!1-KS_5@%> z8gV5r=x)IG6p!F9ohVb{HkT2m|-Zqwy&|};XJWZty$7n zVs|YeU516co43i+0g1WKUI$=cB)7+Y{PP)<>Zs=gXmtZR(LQZk|IJ)_suB2UA&B>X zM;6iNhaAu6R|=?XuhV2J(}PcK|6?=z!eCS@cLK(C=Pe$ML!09^ntSy%51c0|!`{1f z`h1GrU4iuIev)5dG~<4`8#s|Drdn_Dx`->lUT7ix;K3W(T_bL8XC1wn6%u2pR3C$3t^et!$`1 zE>*moU(ulxK54$(zH|1>sEoc>oZLPcjwvhD(>YT2ML>D`6MdN{>4HBQ7==mSSotQy z;<7Z|wlzhpwenDA*?aLb6+6p8P0qrG@^0O;7D+*^B?CdNg9ygd4E7TMtA{4S*NL+p zdgI56kptbT=Z6kG7WG+W)L8M=T5Pu`9-sz`x;gfIre7F8C~uw_xG&wla*ZY-fv;L40%`939r7e^nH8zr6ZMt9{Kgj{#~B} zLH4pDu@LvcaWTUQBmMHHBVv{jOQ8zA6RxE{_tR&Yz#0Ms<4C%^=us1GOw0Iq3_3cS z&YogzDkAbhx!ik_Jo_3pWn{`&3f0PU8wi$&*`R4_^8_j5$8K1RCFi>pz z+=u3pg;ff}#riFlxA$IDer=-0GOvr^?l!y5&uH&HII55};>3q8bS3J}ACYrYb`~}d z*H%yUsun0JWi&X&XptK`+GM5(l=n;dW==GZSbnW+(r+5yYqT7qTY#~s*D{RMTOv%n zszO#>bCtKRftnkH*^ITh*lO(ZHy$;}W~fC-s`J@#49g@CTXh!aqu{CM#Vc7q*GdB#O$8y1h}#g zPv{h}2f{Q*b0-QBwEjo#xC^T9IgcH`e{neDLL15Y)7R&l)>+doKh1Lf&`J}xhM}bi zv#_x|bh|uC4xUXq436}LN3WZ;Y1$EVyTl{SlKEfn4cK|GI9tZ*CtZJd^8|pI5G>0N zJKhmWs&G%y?eNah%3ttsd$CcSIC<2k+L0I&Yc^JiR8hxQY@$x68IN9fskf zaO~jxT4NOLrEE7Vi)}>ub=EOor0r%7mlzZ7H)zKHF`4-Bb03lUCHwxB%uEzaSOo~%pac%)P5c%Dxm}96J^Qe39 zUc@+FZkOHX=a1WVSwWIN#PR$qF&BOqJy2!Fxo*HK@#%vY?l@%?OpD%u4R)ra)xh4M zsqS^6kra)XG-Zhgr9P=9t?(D-RZUf^uu>77fu~`6MiZew)`ef~elSTIH(m-2OFscb zZyN>R1lLahI7WQxe#czRXf|KANCG8N-{NE5(D+A&*ZQmF1@NmGRRvU4cb;)d<;jY)Z?%JjNP3)O7K#qz>;)ZX@@uaR2l@~^mkLSy$>qHYu+nZ ztZ2Z!)-j_=mNiSX22Nq7)p`Ud&zZ zwjLh9saU>2zhdrI8hp6#)!R0eu$!KP5hz*UJa+puBK+y&@^dbJsS`={=Wb;HVX<+}_ed{7vU@+kARs zTBlbeH@W}Z9k4lYJzr?!JUlzJS(8Q5Bd5p^ba6jB$B!p5RB4)Lt?EkmwfKh>FYc64 zyJfCywB#dRI57u=7Uwt3sFv9^7T)cUin>sVQxK@BzJ0Mad(cRqE9*e|_=BASUa1tB zgQ4l(N?@Do;%343tdYsy)?1@@ExMsW&KNn~(QZ3D&PbT(JFK7(;^}5Xjkrsft{9KXV$nGVIzXl z$jD87nK~}+(K*`5n#fr}Q8xN>Jbw2ReLa+wohUs#Hnb3Pc8{&>VP9TUR&1nL7+w!R zJygq>Yb*Pq*oGH2SkpWp4AZGiJ=PKRltJ>0&yxIH9Dy}PD%Gu#+MmtuTa6noJ^@0t z4iuApPZ5@ENo?AkFitS4=Ek$qbgIw|7^NFU zs0!6IN9oq-4E;bpOh?>b=jf?soZRf?{D#yk>mG0YAT)5OhuZp_*&@CyV)~Fg*-|&O zH8UY&ARpyggj}4D%sMbfP3DlGT`Jk}30=Fh)T2M<=smIpUSaEFy<~1wpt=zV&L-LJ zy znW(U#bWECcpsLoj;WA>0>+KoDUx|z@s*7aajl*eY>~8Za0>85`g!KdCsK{ZY^j1^MYP$*M&e;>mt)JIH4 zomu(x6RTx!5{%;1725947giLOEE6^tRvPt7YhyF^O^-`7u2Rfo`5A5Em==m&FV!RLbTaO*bQB$ijQmPl@75C#kNjpjuTi+w<)%DS%UJmyb zff(8FwX@EbdcF2owoRu@??Ty<{q=0>c)i*Z^D;{sVdMM><(%p= zt-R!m{+qLvpAiC$9+;AmA_}vm6}UiRkQb~Jl@IQ+^d5q%qg~;n$Tn9IuV{OQu+Rf- z(+-?Z*eUE}LFWd!Y6#s;n^+4VIzN)5}sn7k3gr&VKz1-4(-~0!voCh4n7pNf` z6q;HAE-MOpGH&g5zRM*-X6Z3sKYux*ck9BWQb)-gtyFEJ`JI;3CY5%*@RK;dH(VEv z%9_ow){7)D&5$BwwfWH2F%w>UHyUSyI*$!cx4IxlJH^x(ztbn?Ng)vvsC`H4ZBsoF z_e-C&h*<{bhE(P#?9b$4Cqcaw9gKS&_EUsygZgMq{>z~v3Nd$gV9I*2wFpDQjMulq zsohtWEjzr4gOyjtmdmVKeb5iy+#zE#kP@$D~b!p4$M<->ri{O z*EvWNb`h^KPZNW#+w0-<>P552ybsbEYUM}LU~G3^&A&dhUe=R2(2qvAQajg5KAGhC z{w!xbNoGw>_O^>sXDe&hazlkQB(*=AUOa^@sdJ*sQOI$YX=t}P+}*5R)a++cj*1>? zm^>p;`+|@87@K#Bem}gzId}2>NRd&)H@{J3R&XJngq^KF(8Me4!p2U3`TRDf%|p}q zHnPGtT&I3DPPH0}yf?dvs6#tu_I>$uiA&^x&V!@;p6RED-8Z!R7OPs%Jnv*_-p$sR zU%)ZiUSP)$QP&-dw#w$#{|=MOK( z=nBB1-oXZik?|bXW0T_i-<)#s-3N-t@7XFhparM_^vkIGtrx;9adu_c&FS9M{qceW zCuD{Z_VAcHb=lhfBE{8SIW<*PBx8t+HJy~v;gS0w08V#kaH|b2l9F=H-}i|EhmG-kk9aupa<)@^rI3>=sl|S? zkU^u2ZSqR=a-6N0ZkubUyh0J9Nbbv@`I6V8NX31W{N$Q8xZ+k1;Rk0>gNkz-vI~_o z$M0KZk8+#g^YJ7Y(caFjxLM{QRS{&tmdtHC4`hYtj;>clrFrhFI-{LJGKu4mJDic7 zOE=}2FFfyf5;Hj`#?5R=!(m64|4o)WIZx=azmpzSiACu#HF8$Da=~zUr2E75@DdM( zpU#Psdu_1M`@25iaCRFnhjHzkA;AzwFV4l-vnfl-8nI|E8nL_Oa2{GOG))V>%no=p za?3xbrbldPoA*FOryI(+EqBo!pLhSYsnEN!`L)ugw^25{d0Kw^U3{fIV&zt~KfkQ@ z3{Gi@q)&XQdRgq~F?uhtW}+o9B|C$!aaXn(44Db%v2*dQ0*6WmF0ltUk)|ETs*!7( zQ{AmX_6E#RXKjVaEL2b)8AVOCSzcFXO)h`Y(M}WlddGNSFjDF&HNCt!PTqaH!!Q%x zXHm&&VHlXyDeN1s_}KmMduc-+yIxj7NokjPa>@4+e!i{T5ySd1)p2FP-7Y*CwrN)f zE7#i=RoBLacF$orG{VwE$qbwTWbWYmrAML&lMm}URo}*UL&9FEEN39Z(-=o5&b)oB z+8yWIg34=GW$@l&b72*bGCTkAjbo`<#PyLbCzx1Bpik$A0{0}dZ)5RGS_~_!hH`#G zSGHdTXI;G@+_CXNNG(!HttQdZBQI3Ec}?vm%_k>=qx!b_rQ!ZXm5Zr4@W7GK&5hc+ z@6yd^u(}WUVC=WuxDiz@`!MpOT-hxEA8Yb*#NUe@X|$V-Gaub$rsGw4x1UwLCbDZS zUpIfXU_cV;_E~x;&3le=IZV=&mGXnktK>X|5AoMum-L99*NPkaxz@ku?JgwhmB)Z% zd~T~fIV;vDyT5Da8X2bbt8F*!8sWiB!4;jOf>x13hY3|~{KO(X9%_)LkDn_QD90G1 zDFzGI(zrC=omqV~#bPIPw(ip&d03CdP1?3g{dlF$Y{`Xp9fjItCOr<=SVl4Tlo?^w zem&XZ&g=le8{^BSach2B8GDYyO*Tngi{4{5OPjg}(qKWiv!ktMt+S&KOwjEYb}AQ*bH0!hbhD48tCq$3Rk$Vr~IiyI$s-#vZ z?r$seKE|WF@G&wT!`;U5Zndm`A=?Gfq#sSDeSzU!)Wh zv87-Zmr!_4chFwN1BI$_{z(jNoJcj>}mO##&?cdhMt5 z7nwT}m=FCv!c@7&w0m>tZ9h%gcT?!fgwNWvWZpc-Ot3(B15rv%6voYn^igHQyx2_T zN*ni9xY|&rFzTOE<*VzbM<1_mJK0aStm}6%8-V z3QAJ{O(Z8H;NFbH;SKC`JD1{k zvl@n*3F*r|JxA`|YlhwFs(3SL`-JaK|7#vP$J8sG&JKeN;(;~;p|X2hd-umLhPoYZ z#Jvxi7i=G7Ko;5Ia-vaO@TrG+m;_3}s4#WW9|&RlRh{9gDP4BDNagopD4VPmKAdj1 zZ@&t^%d!0znGN~(UhI>*Ep2aCS_x1+ZPhvJ?@R4G+DKHnWh0I@k^@E2=&~96L84^m zC+p7=*KV*;IP<04Q+ZVhE4Q_(iZ$3O+nfuU`B|lKc5o13zOi(Bcmq|0#>yR=L}4GG z$7FDA$MGM(NhJ)i{qMgY`qw8$&~$t!NmoW?#4%4DUf~5iJt$^Q`!yFw+xV?n%<$~q zfU4$qapT37;!wGIsxT-~?c#)kLx#*Qw6Hg}fUaeIZrukN@6eI_k z=H$F4|qLaGaKGuu>Mu>v|=n9D{e`#N*=S4jw|lhpAu0Y($ziCW~mJvDimh1%Gp>mfx8V`mrZ`%5BjdW zy#TJg4pdRoIo!>#0~>U^P}{8|`}TD1`-jq;l~K*I^JNqnX2XY?qM0w~SOU&R6tv{m zZEM}JKL07mVZ_gJczKowCkXLgrUzSB|Jes+c6lj!DFv(w3yUVg-&0saZ;Xa73Lf-q z6=2pMx+4|k`-dyTi-+~Eqz+HCPQjmVW;36TV?;Mb)!es;QDasUom-HvQ$?{d<#O7% zn9s;U%#JecGpolwK1H=J9f*r=`*|DAT$XI4yw$0ttCoYoN44*VamKzCvaB@8A~P$| z8_gq$u2l17WLRI(ia+ml*>Fr%q$EGh*=doy2d5$;;6k>Vu##pf<%Ji_ZzYSVt(|UL*mkxGy4pCz1=Htov_bT$W5bIqA%w`c4a!i^{)YO*gfd)-TRk*uMqucP&ZEEpj zGV=p2WZ5qDnW7F+F*WvYYG;%+3uf{6JF`V_S3@jnv3u=l78`yX_4_8NarWhN>6{Mc zH#nb&q$DH+bsx*Mm$KOr>j$;CRPWvq9c&h-aKdtr5b}hpGI=*1R z!3lg8AU5&-x#}<7r1;}n7%@+dMqwuj*(dCq?L2SE4qzKv{^}BPfIjy3!~pjZq~A@%juT2m^Y-3+uD_fa9;|$a1^5|h40-J zJ<4i5bLfvZzz%k&i{ESIIe z!tK=~Ugl#PTI&~Nz!aCMcfn#b?%*M;Lm>!?H|_)_ulJOwla--C&tFl2j zMVpc28C|m=pM)xR=|ts#m{bwjJiYk5w;3LFb?~5(`ih>kjY=?Hxpo%RP5L?&BW$luW?UH_izERI!DcFE=E%m?abK{c)0}^yeUqtT~%;IOw22P z+_|aVRu6Wk4@kcB?e%AYuWxVYr7}iE9#Y+XXKP0{=-W8d>B4BCL}dj&c41+9f5#>G z>+K>KnU(JA83EpZs>O3|vwhz}*+zpSvJck924OP&Z7p0mMu@qT+?o+X-4Be>S zQMCV*@Fu6uHflo!C;sLHs59EoSZJ}vw7nUO+MC0chZ&Tr%iptBaj;S^Uqk8l5_K1+ z3PdCFg=EM)k&sl=FSt#oH)HZfV%^wrYm;pIr{S!Q~?S7=vK6CB&Kf4l^)5H6|FAKGQ?-pAKtCpxk@8?Yhn++>K_8Ra#( zy`XfX2RoCMo8VSlcqxm^720V#M!I~9FP%$HP8Zh`%J;QzemC#DVW&iEZ0X&tm)zh) zYM!Shvmjp5Z|u39n{%PSSZMoD_xeg-mOVnA-z#u`eQw)-?(Kn5uNqY)+S63XkZ)`mkR4$9Pf$37!|OQ#iM z5PhL|Q0P|tvz%g_AMH_j7c!*-nQ0zk+GRv*O^)4xYtUE>#mn`TFApa!dxs~+msdQ2 z?M4uOD=zX7vQ?_Io0DFtob=mWz$SEY$Dvq{9;w05ctMLcjFSE20mf#^vg633)1FRT ztR{ovVpD5%j>)*#RrlfqFTyJ83z5h#h`tt5gSi4+5U}X`If=F__!w;%S8bzM5*=|> znb*SfT7e0}OKcOO$2ZRXb*XPmO@nhod3#h(N5B}lj7>{M75r=EZR;P?exH@qLG!nc z9-wcjO?hD^?jJMQhS`2pww$kIT-|SN!I2o^W;T|if=X@Pc~!^^Ak#NCx=K0*J%^r0 zxF)zkk|*9QG+$lZBwM&zN&n=6sEz8mk?`Be!XNZ9-F*i_0vPg3<@Gjd zhCX4D%C;eoBSvB^gBqL0r&~fRqAHOG82b$hT)iGX0BhgP&BVTY`{=p&;#jkBKAu-2 z?U;^A#H@DYi<<@e!DE76(TtyU-*wrZ6e{&UC(^g0m)unw(jpk<~A2d0~`qbRpN*B2cl&q!z{^x4!1S(HOY(C0I4#;5Mqgtyb`jtzfqr z_8P+PI(DmzdorzyO*{JdEIj_%+El0;iYI2Z=38iO# zW%vM$ASsT~MvbI{(L4CPVvU=AcD$xV__H!YYE!tD|9qN?zNS!*O=6%zsvL6ymLC@AyIa32$M$0P- zk>Z7If^Tz-BznDjD12RrdDaJ5ZcZY7thl(aGhrj#i5TG*SH8_l(#KzEfPbJhDPptd z@DS1?GtAvZ?FkzOR`-ZkSjL?-7P0af37S2yn)vk7*c=SxQDtiARx@sD(V3oUV5};&XrL$0Yg%gRl>lKO)~?nF-M) zPX(@j!<04Rii?C44s0$X{fo~F!q01Jb{Hpr-pp-TT*BX%A9#rzgbO$Cm_+gMj@fSR zjuquLS*cn+|2lBMbv(w6y=F8mHrR{CUdw`ZHmXLDbe7E+bRdxNVc!dvg+eoaT|$) zZwn+QXZkk`9^HN7Lyg#pTa&yNXV1qgFjMJ2TRLb9V+?l7N~{K70^Sp`2~)@QuFqg- z@cd~TL)e6#Z6i!2x!u~{H31QyLAb`HHD4&Dy?=_UrRViKBPE^wC1O_I%Yn<8 zFMc|4epz3ySa-E3sw!M@*%aPHZtnL^&X{DyC1`?YfV6pR67UvqQp)if&~`z_>bXr4}m zU~lk74cbxH8cnh5V0*(+yc8z@Bhv5$uuNUH-?-~1_4)H4Jxe`eTg?2P1R)s!<)ExK zq{Df2Q}cEA%?n!7hJSf(Az^Gcm?(B8E={)5O=hZPswrr;1S7%1CTTMsS24byBX``1 z=0XXfdhA*L57PcCtf{SyA4PRp5ET*WMY06xO?nZ@vH%h!NbjH`(uB|n5`xk@N|l;L z3BC842%$)qE}aDFEddO{gseTkeRasKA`ucgimN4#~O_kPK7xDM2C@Oa-Xyq*~>OAP-=u4&~r!-GRwI-28TO&%3F-}=Dj+?F8a^`j)kxU^4Ur>`Kg z*()_$aENz6n3&^2p)Jed9(zrW5BzDI^mXePvj&#VL3o}=V>pnrp2&VM7yb4Yl5-mD z1imr1Y=dx}bd%bcR_Jt}!B_eOMprIf()*>xEdFY5yv3mYmA_p)vEc8u#g&kiJL@f_ zv&E^#*`~Lkkd&=abxKs9^Ss757%45LW4FBF8M`wq%VlYfj?8|)BNHt#w>${EZRad# zk_dU7REM0V^HX%GlJsevwN`}4s+(gM__jdHkIl@Xe@JomZbj_`RyHyA#?NW<8>$w< zMjH=|pIm(VYmjp3FNzw*9<`1#HQ6=n`QhSeR37$W3Wrxki$Tld@S z%pOrglwz{J9(sI8*XobfVH}2+K99Pn9!O#!FHyW!nAC$vyacmu*j2byccwI|sxrPQ zui9$h0j48bdRZZ9nqzgb_pe26;pcIIpFeMoecQ-p=&|r)2(QJOcdypKD{Ma0r|_*` zXEh)j|Jp9qF?Q!4_4a9f^$YDR(bI}!*D|c;g&4*enl-N2{PA5pmI35$v6S}z!6@WPZ8KL*6wDzsx!o=E#hgVF& zCf(MuNkqq(77U2M^V{idql=6q)U#aFo;AtbLDg`*Aw^_A*>62X)q!n6TSJh=i2Y-{ zi)GAIt&wWF-#A9aL(PqGuY>YC zgbPH1eFHU3=%hYptwFWbDOq2%iHT=yiecmLv^IL$(ea~T`t^%c9XjAJsx96Z^rSj! zQ||%DLM=(A3v^>*0ZKXuFH&D-ZGacI>j<`Wgbqjao!zjGzV9@YZyQFfyR9LELvpNX zsN$W7{p2dprB6Kst5n7TN#m3Pz2fWM>p7OvKRjcS;?R0S@FE|3PcCbrVE64oFC7W= z!J(VwTveNMuu&1|bdQ&6xIoc2qJ&cA5wD0!op|QEuCnk$1Bx$+`cLcZUWa1oHTyOl zpHf1as!7MOAdAfRkDBXYKc5Du`bT98N;;_X2ZUAXvPOh<_p^M;c7ir)I5O~%QXDv1 zC9Cf`9D29fSUKZmuS*+ey69(4%#3{}%3MY+XEM{+PP;W2DT%8vioo5-K3FV|ZFWIV z8#emy=E)O1`B%E1C4a|8-Q{`bJOQiM7~mWgdhyX6TwqUo*hA5a?|W5?aFE1GXJh@Z zyPHTrPa_W>5VPOrr&vGA--unWH*g;si+ELktyKHQm}0@4l;SwnYGJH&2|y23z^mnU z4WNBxpa5Bsn)kLz$@rk^2)AV1sh`g3f*rfnjt52CaC}an(|j{#Nqr+{)5Q0?`7ncX zP(SDqAu^Pv*qzJ#>bRo*&aTc>TxUI69LA!5JG-=*8){va8SCli4*7s~^Bbyvp(P=k zBmQ~4S-1FI^PK-AGIEywkYYrAk9gcZLz5uzVnfv;!xRsr@@GvZ742>jH+y5XYC4N@3>J$k?8jS zbM5w)sUiT^i8n5bGH4VSbqNB^XcP&k1 z#~WO{dv$blG*!JJQc4YO4K--Hi+sk9a*v@B&FvHYc{{eis~eIC557Lt7N4pX)b z@d}M|$o&9+lI<0oyC%bJfQf`o+WOZX?fCb-BlF1*= zF@UoAFw#=F*KRJc+aE-X)g$4)$qk{+x097q(p|ZZrKMMo-MEEYoAkxz1doQlUjFZb zwr7RsR~e26XJgkkxMDJp-liJUuXfRGpPivxv7sDoV|a^m=_^M_ z$DJIZV!4U2s&v1$dgq|cAC~vAb>WHo++}bX@>|M+|LS3MFdLHFiC>Kr*~5Ih$Reazv0y3cB*S~|AE0b#|Ovy5BEGPz!kuL;PgT|MCDYN*<7!6T`>@0?lJ`CcL zQE<(XCx;TzqwRrZKb^)A9qzdtc;A74TL zZaq=n+owLHj|cPa1-}cDAg50#fEkt$*C&KJN&2CY33~rsh}Nogihqr^)$x8mS~s_3 z6)-u%mh`qED$W5nyOFKmvnc=Bm>{0Pw;7e-pvYs=nJ5gJGj^$ji|T3iRf=cV6pQvh z?;Q}e6|uSb=>0RNK%e~Wo$15-6Lr&eTGc_m#~Sa6oclsl8H555T_7>8EQr*p4&)x0aibJ$0x#cNYn7pK>`o+v?CvfRqg*pFY-%k&IUb<^&cHA8*roY=H# zqfr6M9H8vi35GEP`jAV(Z?GYB9*UVm{zdn#@52 zcj=iuAzlry%&H6~XEYJbYp}uBrL*pikaJIszRk>j(f1-*iCeXeFr>US{w(qJzYCUl zjSIx|P=sn1Nsp(2q*@7a2bq-`7^jfrE1itj<5DfHzeF~=I8S7`NE^6`1)f2*Z{}Cj zH00&C`&ygH$4(dRm$}b0&FuJriTc42SZ2&sn)!6F6X>H|qi=eDb=16L*CS7js|c=1 z8QK@X?;}Gl(<@qdbUxCi$5tv3py{~y^f}}g&pBsL_N+YNW^S5(wu9Hu1EW3z_@Z?| zFnQ(8nx#vMh$uu(Kl5ZS6Y{5E=G$brctWM>@lfhfKQ(>arYa}Hn=C_FDx~?HR{0v@{j0kK(bMBrjIJBja=T(G!;S*w9Pq~v_ z@ckB7-1%2Kq}{R!r5naIQm^kt#B&=0@+qV2(wT6lhH_({HE7}HwU&WFv8kl^`7Xk} zsGiXr(KdJ6vJI zU1sHVUVD~4cJJnh{^spce(iI|H4atOtvL@S1Vdzp2>}|6Co6wafypEY$N?ZSoAI=& zj<=W;+d{gG#WO0MaSwaVXf>e|Z~!y( z`hPeK$s$z8X5rLEe(yEQ+s-T1dkjg8Jh<}$s&fq5a4$^q3g#!A=4c4_{&&H3!noFY z-#F||e!=}DXDy9AH(KrZ`=p;I#GRx((7QwaxKqd(?iDaLg8!TTKPO9VdTDVyAoF&Q z{0Ee;@c-K%`2X!4yvhtH9Pd&j@cy`cM*_Gf_|DS;CmxQBN96i)YgO~T{emYGFM9s^ z$K-Mn1J{WEdVn8TdAMY?#&`)b?ZDM75deV>N=$EQ>hxvv74CgG(%;u!%R>D$qcf@? z1?hcl*(Gh8;Pcu0;GR6`j4=^Vb&FjY)+GG;wRP;6A3Nwir^*^Nugf2=+&)?O!K%baW*T$c}vEjGluvYoJWTDJw#_S*U#2BD-#_Sz1AjO{4A>^b6XyCXgL&n-+3yetVGl6$k-s$%ezu|Z4Bv( zBlwvTYbY-8>`D3`hmTCN)WkA%||r>s=L; z%gG##MJ|l&yF31OtZ~k+MPp8g1sx8}<6&56G9Qc*p^0C)_R0bL8>RH8)B2HULXc=D8&st4xF6JNB}yx<8HDT$kE*a+_ynT;12l7LwNv`(TOS z3kabygb*>f%Z`x}*oVB=LIlP8Fwa+a|H(<2A1&Q@N`A=8RWTsfcckfq^Je$tk>mTz z6@{boeQ)uPBE1}TS(BK-O(uxP9Sx=wl}4PXlr=a8uslzG+;r(vPNd5Wih|K2?-(tqM@z z>#qD|gYM#qKwW<<-{8vLh(G%(VK(KNe#wIgba}HE?i*dHZi0NTXo>0#@k+U?M$Rr( zk#R8f$`&ZxRFinV#7B8ytGZFntYMD6YdDA5efFnXPrscmfdsw;hsNLZ35`1xTpoQQ z-4Yz;BcT~vX zLX0@y+#|&T*kPiYPfdq-c9mHAwglVXhr@fko~!oXoKw#vbd&7Z`&9T8Z<^?nEspVo zEaa$L@dsC*1zq=2PRU2iAD|M;D`Qi%Hc~Z>EpZjpTTKxK2GaV8y6sP9MQDaON8=iNeH5mA(zGR_%xV zgDlwsXtl8g4Ttcu0^v1DD;L9*{FDGgFPHacb896t{YJ$+{%9tn4^kQv7+Mp(LFLiY zo)s>zJ8HhY2gK_WuiXV=(zr~?!3_k|T`kLgGhr~?#pxJ^vCnYA8k4vVi_wBjVSQ6_~0))gr zr><8;NSlyaA`O+|#pAUOwITfjDXGC)VE$#IT!&?%oS8ah?Lqk!NgnK@ zOh2>P@@?Oy;x<6$0ABqU)abttblBH*@eYZ-GLeSPmM~nNC&}y?=^!!4nXs?(DuCc- zr1PMpu62?zP}CIhI#c3Pl3C&y?KN>Fw8e~S50X^6XPhhW)A>h^D*p9w{xr{y-b}c! zOR~q3n311OP6kq$HHz%1XF0!2TP{a8O`QUU=dw0>!c6<$}8@n&JmTxwaY{HionzMu#u1x<83=X~HF~ZVbx4$cU6`Fm?l+>`u z9SYmp^vX3cM02W*rasqnsy6tMehBtK-%pw`J@s)aLrjaFzn*~PLkG8Mt(CJsj_l@x zEr7rFBXR~*x6%y|pI3kh<|;9`*UB#Thpke)C+P`qjs&i0W^%OLzwA+1l;T63H_v<0 zzG(bX=B*Wrv_DT|d`(kcrArMHEpi=x$93Wz_ z4A;e3YDfE6o$VhWmp|Evv>G=XdAr2RKU;myGUs7^$ri@6p3RyL&j>5Xv=@pSSZ7yj z6oGaKtnDpL#_^U+i^o5PNcCrk6k2J{vpi^cj?RXhGMKNHv_ z%K<<4CmK*5Lm~kV?uztzE=HLW{Ef~yKVes3Pxut zo#MP!eTCPKnbN;12(Q*n*Pl{XCKoj;P1t_dta;EQ*cS7$Qn=@c-QJlik%6HHA@r$# zgC_g+ooCN#E#I`W{gPTuw(PCzE-oMtR$?OCy5~&lQt7liF!IYr(tj6vrR*UI3q9D|uvgDQbalBuhRG@Xh+cJy z!x$$jhSwr~wX3eZKV%8X`@BAlsn<#(*BYcNihGqhDpt#2(M4625<(-D7)O>~ z!@f6YUBSHlG8got{8r2517$tscZE$8Ta>Xb&|lb9G{4MwEBzkg?bJziM6M_nP@GFl z0$V={#nH$uO_M2JUa&wP4Q^llyqNzaz6~tB*cYdIBNVl@%uTfFe$gC$R52Duq71(S z-{tXrKtX`pMb(nX-r*_(khsZm{G(!)H0AVb0*GIJu`txGt59$^A<7&Slyrj74bp;lMg7C2T08b zA~1*X%a8Mr`|(xf=pC)+Fh$pvR8vNuCMJ%eQGuiJ`&tVdwJ+qa)18QERjy_as?)~@ z^Ad5!ztRNc;;@D7F zJ$12k2X%*=p%SY*Cl7uuwzC+Tpd`O-Y#c?nr+rk%e4KvDCew~eS;MJ70OufXtq?tC(kH4#L%!%}X*v^x2xq@v;f#*u{<%{eg z0YWii{F)4x+ay2)?g8*{uE1aeWmh)Ug;*)$Dlt`*@>&_aeuWz%rZK4J_v6&V)cm=H zl^#l8I7rBj!xxByx%l7A|2Yr-KW7?&Sb=$lRcsj6X(fbTlESdI5c{)1pPTaGP;~m19cH}4-+@2LZ4x(I zqqQ3doP!3a4DjuZ(!Pie?n;ib&# z*?=EUY24h!&bP^YJh6)YJLFj3M*3i3|NZQELlZ&MB28tT>FcoO*vS|(%>ZajKSg@E5He^dS#YP_R%vJ-f}M3E=Ea?&fsvSBJk|1XS9OqW5q=wokv-QFe5 zN1!%pwOv|q1+q&+?z|kknrzoFnn(0rOYdVc119jlq!6BNtFpqC#XENvyJW};nc*08 z@%(cKr8XZ4R@}qFk;^(PFiE~PntxOa|1DB-xY&k;=^X`cM=kSmE#oOmG6}6_;v#MP z;n>Tl2z|xSUB|mq;P*FO-c&Q=@~Mqtq}6V4c>7#uYGXYz)0!Gd&YZ$`Hcf)v6X&$M zmL)0c6_o1k+ASmp5fw>;y=fEbta{g$*mK*`POVF*$E(75Q+WIO_p%F5Hn11*5a^xK z?(D~=X;#p1Gt)}T6c@Eo+dY0B6EP8$ZUe7$!3OCpK$P)l=g)j6+s1sInJGZ8qKwwC zyjviEeBH~#!*0-YfxjabUPbN0veQfyPmq66Qi+H7a7?2oG0EwKP`?Aak{aGRmAN*W zz|oxT7XRw(t%vpOek)SsBOJ#a{f%fNim&@~{T2qq5}nGmHdzjzFf6sq&o4b{EuHkw zN~_h=b>nisxaWcQMR#^0`80hEj=+nzsH-`_wqlE8FEd|7bU13D9plM+hAtzz0qx&&A>O`AE4W`d{c zy*r{0;Y5rZ+p>&WiE|p3+jj=MO8NY~LwR7@DOdSlo%@TCA|^&4u-9y8?B|8*N^LV(?}{BY_hLfut?hETo!dKRH5sfH7|EM=5|fs- zZ}v#D$`ed^abveAnN0%N!?myLlmv(iTbWT_R0Uxh60hpj@rXB&NGa1&N@z|6W;%Dd z5Ig4k)4%?E0tP3hGxS_v?@wa>+QGC;ULS3_TYvm?88j$|kyqkvk zobz*4rh%n=s7)pT`N!|R_Vwl{r-GED`qo<`uQ{mlGij&G8J8Kwk(A6OP5Iq(T#ix} zt4M59Swi^CikaqMan%bd`0N`Zs|Mt^DzP<0;Br%{b*p#%wu!=I?f6xQHE z#Qhc`7?&6~&m1OmkDu>sA^_;l_s%WXi`t@wyo3{fv6ROAB{1eoPr_l`v-0FBfA*X zBVAC_3XQd%{FB&BW3}%B+%cfJWcqDzwCxpQhp8Pg!){@LOOf23XyKZt*qM@k_2)w2 z+YI}(S4X$I%sCWM7vWjo;8?cWY}Z^Wf?v8GRTt}GtZH-Rmc`Uda`sVrm#EQt{G@ZC zx-A2U@8*LB%M{bYeOMqm@WaYU{i+5CIRmb*{Jo&V(q1PHhZALbt%Iw0p! z78Ee~El}oQ^q;oZh$27>G#5w?CpF`O9%>N{Dal%ZQz?sZrSFrZ8nO=f5zYK+W!?6A zqfABKo$_kK`bdjrgviTlq!t?WqBf^mYG>Rop+u|A8&|B?o&77R&a_>3xz7KQ%FC`d zc&_oRn8u0Nrlgre?=C=ELAl?Y2$&t`lYxjL4y;3U;vahS8j~P7VZ3p~p~EU~an6~C zPw9_W33hUS-QwRFnKzj#Z*{&$TfF!oe_>C5D_e0*+NzsR@Y7H|?WXwaGKb#)Ujt<= zHyJHQj#eax5l@OaMF%;v^wY}p3KRICW=8B$DO*#XNtqv(=L39$eaRp0q7oWpC}Jx( znJ5s`33j2mN8{3j1~WXkPlCW41;Eb8yRLQ4JlQ1YnirBQ0OVtETem&3G2yvDjMHES z+gEZqidm)yuAjL+7e;}y@4Pc{4wTfm!E(hk(-#eLs#)nt-RgoGWN$)sjvCPZtj_(i zVXL)Fq9XpHTPO49iVJ^Qmx1OR7(E?jqEJM`AQ2r(F%i_ia%-OkDx|5mPHWtxnM}|u z0*hVA%M!WxmwoA<j@gFqbbp+Gk0u|bh4NDQUN zbUega^lFIU^yfFcdk3CMGQ6W&|b$8$|)QWwkfH;Ti zV%-}13ne>xRH)t3QQxu+A69jE{dzzz@`d_jy3q9Uw(#`cep$n>j^u?s@Tc6H=cQnK zY;^DypeV1@Yvoi@Mr9Z&wZ3Bs|6Slx07#mj+kR>ZpGvHk^qG=kBfb<}cYHDilTf>X zcm?}*&XdRtH?fMScNc`as0OJu(;BaI06|jXXn@~?heXjxO!AF z(e+yJpm*8uC>d6{Fn#(6c=l$Qy^&&s+Jrji8fXElbDrH{7eshY)5agNoR^7mnq*Ez zZCJG%j#m}m8u0irY$?|#FYx_i-?B*PP|VJTuc!I@Bnu3W!V*u)-iknOE!n#vhuc=! zD8x`VL$gmm$zFD|viX^8wkhj%p+P@p1d$u5KNkPrRIKRAIP2mNr!=RgQ6T9p#3s54+mZRn17*4|kEAZ_xWFprT&u_PXVSA^VSN03sh9Zpq ztlXj`>kIbU6I*Xt=s$oD5j?9R8_+thb3}N)IvKjy4!rbEB9oEu6<&Z)f(- zl!w8Da=p8mY3iRPsf67wjO=+4=I-_^xZa<}K1)WB9D7%of6^c!yWLpslOVNGSBdt- zhHvwbV8`ulF}!Tj;r%hL1XY%)`l@~~IHAj<$k9}FCDQzl`Sl6hprVI&%G4Uaj^tBv zV>VvejqNqJH&jX?|14=)uIF)}`djPilO&pgCF&&-aIV#ub*)fDIll!N;Xyr}mvq%i zCSgY1{DM;_^#K4aa84tBP5YyQ=(!_@D0Y6G)AD@;sgK7-Wo$;!G<9XajoOZ7^3P;D z4D37iSuc+aPIwy5Z$GpvU5V?O=o|OQ{WC|#0{v_#w!Ro(qE|B{S8B!*fzl5GQPTTY z?kb%8px<^iqhD*8>QKgWOA&nQW#??I7p?BsK=|z>6`bBg2(gsJ)gu>jJvBsntvqd6 zMf0>7(gvn`yA=!cS)z=Rd}R!?#il&7-S}N05U*t5td)_D08t+W*`m$F^q;powL2{= zOm&?nD9G@_?Z0890bw^P21U$vCEIb(EN)c;gmz7@+j+Ix&SXT(QJ%2MX|S(`L4w2? zO1=7H@4Mf-uRK;v3&fOptS8dzW9QW;PSNg%wwujQjuy->j$zNSe0A@_p_$-fGMD%D#$HvBD>(AFWuMLa% z4MH0-{kBVq>0L0cEpQ!dA5R4%2Uob%x!3gh;k%D1o+aD4f|N$W#Y$H*9{2JJ{VS`J zYf}%>PB{WIpU*h2Ip2%9Y`CSn`RB%?t~V+}xZzXqkSj3ni4(*|b2(5o1>6(3KI8Lp zw7-f;ouNlqileGhfrQrbBkpr6c1Y^8_4^ge)fPTjm{OD4At!MB7=c%_`2Qlp;=!v0 zD>oE6ooSBMDwH7CvK)yS%;K-_-gBcoqBS3$z zntBldSnxxDE!m}^t_om*#gy{Otz|i?bU8sL6r)50^~Bbf0r>ZB)0ldj3GI}nHD+NL zE-0(TX#TJHY3eaM9T!W}!jIkPfb=+=UFBeZFpJja)WY!d56!=RSHLq>z$oo}RH~b4 z3ia|@*H7)gsd2UGAp`epdPfyu(!ZhY;fnr`Rj}*NU?Qe6`ZV|QG*JMKdALtOfXM5FB{@9|5 zFTJ0sAHEV2=6v(!!ppw#^jCgye`yFts0?yd{S7p273T9(HFF_JJ#7Z@kmS>;HPCYV zoSsCZkhF>G0m=j+AI}viS}clC9(Qv`rOj$QIgi0ez=O$f%9n!wIS$N%`QTK|^Ss~Z z(rdU62!6Ge20dlH@i#Z_w{>uQfE_3daf7|tdyenqy9TYauN)&M`vWvYqU+jP86u6H zj0Z{~iiKOHZON4qeL#*(GuE;qXxlLC4sz7=w6ZuoEHlr*w6A&JW~NynF?_kZ5aMB& zx>oMZspu)1fu|Q~#Bp=~0T%~YtS9u+m4P>GYe$y+3>&J65p0z7OQx(7MMwsGN9R%T&?S30IF{tB4**O?IZ@Ap^8F>qdAKxEk0 z_ehr-#S#Kuuj9pbx5_-*nk8G_wLww}{+3>VzMeSZ|@O4Vs{>?VG0n>#mJzwr(1D%AR58&0C zH^-!gj_7}vh7?4Z$2>sEG#2F)^Og@X?l$ga>~|M#>gbd!kDq8f1u`UDK@`z9$YpZy zt^Y2-^sigN<#8V{F+RbUov_S^hf4K$z@_YhHau{9wzG$EOP|ZX3KD-6Edg0jR(LkM zZ>`^j;Q`;;jK_;tv)E>zqn&3B+An)|s zl^hjGW_kxpf2{1s!1mRV!41lLjKS0=h_@gj^pKmf)@#Qe?6ktFSVG+2PwhB{zkO)E zeQFpmS*9Q*HT}b=2dm1kZhUDQz9x@Hv6TK&g^_>rDSBWS(QF{N%MY`C|*y?tND?mYi?W9-`^Z_oO31LwL zSAI^q+HUW?%F&K(qrNp*WV9rl*;<6W)BE}4=#}yyz;L+V8+59$>?S?w`_cF2L4Bpl zlS0qMhP=IBcn4^F0WY5qVN?gYdKWhW?`=Adr`Bb3$?UFSWk?Vt3A> zU;Mev-g0bUfZ$r^Q}XnAJ=Vo8?9|e~8{mQecTa{>H9O*;8cHMa_*djh}ydvgFYfwA1|BF)HQK^-zK#DN27lc#X++p0R1Zr zFpRNngB!vZLF^i=F8o}Xr?4Jo?tbN1#lt%*HfKprKe|cU?>|<*14H1b-Z#e>G28??buyJtae8BK!TAhwAffBElCd=(KX-DvcMNO= zEbv|6v|D$O-@px=p>HXnKx@b5)TFF}JE8#7pKm9YE zXeR>cK`44ZsrZVxR~(!5-<{uEiq5JI=b{FkwV4N0)M5^1>egdt<_|iS+sGOu%5(q` zOEx(FBGd5@zY>e#p{VA;1G`J};M%?Xe;+MCiHo@}8*AR_ESZ|b5C5Yzth_3wzJbm4 z;t9ZVkt!t2x{Zg$r^|Mxi*HaNLs_|HP{x*4Y1aW6|3LmFJI6?zLScSV9n4|e9Z?PR zqW39RNM_^&B5d!N3W%g`Cjh56n+v%b2*Z$S4*$0{>G*L?^ReQ?a@WLqef}J;Q-OJS z<)qV>=2Y9sp-;W^lMSYA2+CtXvwBDs=%NuW>a5ESP+MF?={ zqZm6Ld*|;WSteIrrVUOUJj}}A(P7DN`UfADVX-J4?qA*59bBmz%=fMZ(GJpQeYz7X z*E7-k1UO=ZOSRC?Ri228mFgWWq>Zw)dl{%Y@Tn6|(1udFSxM4TMd^B{;{gZM`hD1f zQ4evu8PKE9FKqpH;m)BtxXNW&M9+4?u$=;wM@Bx*86Jf<8{`>_yEjec$F42h#jywz zmQAgSS80r4sg?n`Fr!;#6UBOyp5}?=gYrEZ5bqd0NQKytg^^i&<=DaDE&=U$-FdD# zsJf|o{Ol{g?0Gd9&kqRbjL4*P@<(h9MTBs8Yn~GLgyLO-(12IFtLp}r1ej)qo!-*y zVf^^_5v1(Gh8C>7dEy(dyYRja<_M<}?4)}P-i_&Y&=1s?c?2xFNX_3FT0G6F^5Ab@(#+FqYKYTbnu z*ZMTmpjb!@0?FJsWvgmZl{N8Huu&a_$fXkg^!n;sx$eNzqtzXN-S&D0?9BAo?R^J3 z)yfhfUQfivVeY!@qX+OM_HEMwtd^c#DgROm%h_rkZxI?P*_5Md3}5cT%>4n5|s8Sig8iY}vj`M@LnYD&>3>RMCWswkj;h$G9fB<)_mdP-pTY_hd;o2zuS2O`$_-T7M2zpETwWV<%- z7fQ1nI-8^$gDyG@bL3U^nL5yC815Abrdfb0x70b@?~vi7JNV?E;ad4Ws^h|234+-Qc=zhVs!afMw(v1|e3JhKna(z|#rQK^qy9N$LSR!v)e zcHCcQRA{x6fH_oVA$9$?v~C&nYROqC1}mfYcgX6IWbN~6j1*1tyr6=99gbSF!!gIS zL92ZaoPB|JE;vg0AabxDB0#9-SoNuT9F`F($8)Nwyi z(IDzg26vyF+AKPGcF3c(@%mgir)iiYr;3%u zp6j*#CYdaiJji0?GzTL`GoInA0Fm_r74De_Kt#5_Jz3%qZ3TZtk5FMHu8IMakJ+D^G-yHGxIjU&BtCgd)5M$POs&9p9qa{=W zt@2(iNnnf|K}7AvQ)MV%g55XRr{HVq1_6X1m|?<^PCn%m{8Uz-y|QsHUG9aHrH+U) z3l#k}F4g3U=`+%?hRon5&b&%s%msg}z5s$Kyym@6{QNS-L3Pr2joB%`V6XUUwu7Va zq-Waa?h%vl>*6nq8T_kz=WI`#0}nm`+ERP6!+8SOWsIGsK?$I~LAXu1`TP`|IXpQG zOT&m+iFUaCnr9UD3sJYR)^X&?c)8Ff7ZBf)>Lu|DAxprhtkO6h^5V=@TAQ`xdexvX zrjdu5-VY~3DrNj^C*%z4nrd6e6LGI)4Z~cAH2n&K_Sf5+wupN2>H@a@6O7Upn(k;gSxmh3L`wKk;wzRZzc5`QW2UVe-Ruh0#4L0;_Ba@=hq zSam=pRp1qk6E9YZ#W(Q z;|@>UD*!6%y-DB1$Y4;g<6Ta2B&Bi<7GldvaefUWwiB#xFKqKmH0SOJCp;8tO%t{F zeIqNHhe`eGtUy24{c`X!DKUK7>0JQ7ui3?L+(sjbonPeEVj12tRBy_|Fw@w%ON>w{ z;%GLl9n1K&RD8;~aJx&|BB=6%?ZSzT5A}SP5V`M5(#CIovvCC09s(LULRJDyCpkDDw1+WV)M=6V%GL1N$QK!qLbNr=@MPypmn2*f zZ^?ck(Sqm83on35yZg!*bd^mB4sUCX9LVbm~lPd9mts~-JqYJ7ye1To@3|D_B$oCgNjLIY`5AVOGqZUDhHA~qNQG)d27JN z>34zAjreXc034mIi>o~9#H?*%7nlj){n#}bfQ#B^B=M3nD3NG*{$UqJ`p0jXPk<(X zCX4@m(jHhYN0#DfL=Rp1zJ09sz+&xl(}Z6WFZ&<;%j*c1Poyk?uD9?2g9L$8Cwq@Z zakaX*eG^DHd_eP&AO~I)9W*_@xh4{mW@YLNl8=pz)sfg~wA=LFE@@mij0fZfH#>A> z_U1^jtM>53ei_0_w1z10d^EL4p6Slg3tfWF+B?@QiJ#Li-%AeHl+}y>)p+)z=H!U+ zodU<}u;I>B_DI}hNxAWV7Xp$u;3^F%;y>I5mhNX~#Q^zh58FBtlU}yBy9~iLjvSaj z24BTGp%TFLdv;fmiv4)ISkyI)6nvrgbol{Em4fp1mDJ#BZ#h1JH_ZLJVf^>m`&jX7 zrVm*EUWN4pY~J($daRBy33AKL{!7|7c#P?l*NUTy`K_N;awBB+h4IpU=exd{3cJ$< z1BMe}*;NPRK&wB%45YuuLV`ihJLsJBvHvbyz}%y~qS#T@5nu|Ky|)d{+iTccWWCEV z|2<7gZF|F+|Mh(tk*xL&cy|?zgMACHt~pRf@y~GN#()^(M?KA(P)&t7nh+mV2h;1~ z;_7v}N%LA}h~|1ZxLWyL9-qYmsI1i^8UJDwil#b#SJ{U0l-N)3-!~)i_JJBAQ1--F z!dMK#1H(y@iQWg%@5Eki_}jvw5TO)3q*!q$)#r=X^X}Po^*Hq|k>OB&(5 z2AgkQ9gD{>!C{82lWsKmfHf)hYDeW`9arfurTuP2gZrM>mj__fd}Odx>g;R9$!>&f zjt4jvE-AxI*xF!UEmMn$I};pWS0RY0&cwV-MsrhVPTjNZ6vLyd_1V**Ci$zmvt~%> z&~TF7r{E@rE*M34tS6WQZvPZ0WBT*Ved$A$G@WV1%J)kYM}yS+5jU2etlC7xEUWtb zw8&)FjOJRsRRJeiTj1&PJqW&faZ2{u4?%A^`ZlSGQ=X)WwJb~ z)Y8|KC#6h7Yr*BEmtWkvt@=nWL>@87qM^*v>kGs$uSX1Q^);r8d)7e)6yG)Y>9yNP zNw#J8_XYp_@4}j6ugn~_ccqDQe>;FsqM<^2He0FAKupH{X^NF<;IS>08q{?5d=NTp zE@dqlSGMk!Jo33sp{iw%xY_-_nw0?Muf9zX-B3Y1Vvp|WOTqe-P9{Erc(%t@5cWB* z%^5?@iU)rUn=#Gy6(^1su3Nfk-8M4_otW>RG(ke&(S;{9`pz>O!3o&fl|60Z0{H@E zdJTIENH8C&o^wI+QS_^wo9f{)U1{A@HoOZ(P6g3#%{w;UCc88ZhfXn%tDu;1*$(}1 zy40Y@aqqg1jd)9@mnUu{(1Hqf)DwePH?JFbwwu*k$saseo@ES;;Ly|hP%>xZgjwHu zgSZjdhb5Yo2gif|hie0uaUSp5)lVJfF^6T=8Wb;3LUzWhUUg2nRqcsbNK5@{YtsE% zH>h4Z?)PPOVr=~*(b7T#93gu>*Q*mdlSdj%aq)uWh)tF=a6uI|wnqo3B=_yT64edc z3B}ay?V$P4Dj8)cVNwc9@*9O^^0V}Os^D4U~jnVM~S z!8bpcMVaY;8q^PZ)xGkU>4PtP3EwY%qk)+9A8=iY*SoI)<6Tco9DUgx%Yk6a|BJQvifU?$A9dNf6%i5XRoE)M zDiS(mTL2Rz^xig|fbm8!I;ln@|9dMDDQONUSc0@5TA2|+^kS^Gck7V(z#q{vd8$cpY>PtbH&b=)=Oh1-ZHlE>%=+bfp=$q<+(Yt%Uw zgQ^<_mZ(wB%KU;px=SMwf$xgGFkM>RGF{x{Wmx}pNuL3+Bw8^+RZL zKPy7DU~``HvvaL?B2E>G^U@0}{V*~HGqG(xoymPUrB0%*yAtNDMx-XOV=~^O+bVdJ z&XUPoG+>eX#17c*?$M2s)_$QIdfQW0UW9gHk=M!7K(OlTAEK?ED^(OxZ)XGB*V|C} zLOs4r(QX}trn6q8Agp?#c}Q&~8$*&osS?6(Ti#TtSr(K?6x|P;NKto`!Kn)LeN2Rn zj=&Q>ugQ)W5q*Sdg4AdKr-6Fxp*Q8%XNYo`_F(gZH% zrMQ3&q)aa)#M^fwJqu!bgntEy0ZNEXcm}ppt!c@~?L3V150TFx!51(*~Yy0l35R%tE%=XXL1cwFYru_MH{*ZQPu`rE zwO*06pNUU!$mdkHfFnlv)f-WM>A^R zarxgYQv5<}KD}DEP#>Au*r(O;^*BqVih&`X^1zJNz_3<0S3F)r z&C`nON5ywsP5Z~X=EJSM!;0nIAqtnx6jBvcG!jgy=wp|7hke^I?*A_nR|FaVt+g~T z=4b5{j+L7Pac!=zW&bIy!GP3}ocikz3ZVxav(n(%-Q1xLwA9@qr;hd5>h~4+ZJCj0 zQ+{X}U1%r7e(R`?n>h0K-8kD#7&cUPyg#s+BeU$ZTD zT-O+Tm_*7hD5VAWs&?E!jAFvME^SU?;y{Og#jeJhkMe(mb^8wnk0<33v^No&bg-JgF?|8K<_#l2VClYj#wZlvQy5{7MNjS#S!?*z`3hI*2?3 zYr+Xu9dX{gB~X>RB7%jF?Z9`Uzg0*YmT~b4a1l0UaG>V@ALK8W*{?@e0{(xU;r}o5 zm+Af0@U>Aah5aGTr)pP}MN8VfiuQ2k6$XqqCkmNsv-u7QkPt6~ZH*IMyumTx2$#x{1$c*(z0~hrdc!M>? zd7nNo`BU2s=I)67UkAx#n&r`luc2r6*Tz3i(Qhl-nEE8R9O}StStrT%-c%7JxD+}i zk|UfC>8hW4v}`lUe&y{?&DTLPY6Q>lOVF@mS4rjEOt-2u5KI6K5^xCGmVNSTMs+7G zk1h#BB|;Q^U>eF%0RSQ9t$P%aWf{Q0M4~@94jJybc5?9JBMlL9WY;Qw7ns)=xgDXk z`)oK#@CB5q{&(u#ZH||tLBkRbZ&%mfo!To|NNJe7bOaMsVbOc$B|NP9>3NU_VqL)~ zzuR(O5CELqm%q*!A>hXT0iHCAG3iv_-!1RCI-8907$ai3WXb4t|1>0MRaR(8w0qoX z=TYbbsSNAdsVk-D{*>)dT>8@5)hP1_pFqaPs@+xT-kh^Pl&d)VkYn8AQjAf*pGOsL ztCKO=Fr%%=oqg}H!(D$j{no1Y-ed^ohhf>07_t3qcmKQMGrA)%2ogz7>JnvRXd~`I zXz^tK-rt1Sqa-IHUw4>BP7j;$LuanVxthl{^Pr{V;79J}Iw4BBHyo0Nh69{-7!J8> zflY#wotxZPtC-K`Sfle-{rs$_VG1A~!HHyZ`}To8W21MecP%7gchXIhd{$~RejQmw zdu`C+YlIjb{X<0kBb>?;v4e{t&DK3A!`8cxVZ8(sV||bR4G5oL3m4fm?l$*D%{*(zx$MbTCc=P z(EL;S2dPsFy|JZinS2WsY~NMGrh2i_P*~<2rIP#TR+!1Aft4&yaV00pFUo&SlqOS; z?mbA=5j)Ew`~$$s<9pe!)0C)@C;WfWbMJ^%q?(Hw(mtEN~Vuw3hhgz^rDA^?mgXfqNjt4*q-F1gHX< z%B%G=M>uA z2e@v#CBee0sqLg#o7gde0MJ?;%x4ZxMhLO2=BFI z1;tw>RsgC&UwO6xy9YNbTL=3J44NfXZW!ePavhPg4oO6PYKgRQrYz{P%#fj-)#Rj| zmk0e04Y<<(d2&`pzg4{JRDc?~#gp97R~ZVl^xb~jzN`wG|Gf#b{g%-3?Nr_f z5y%78+%EOUZdsm|ox3BoV9qAsV9mK^g+Pw1S>9zeH2Gke<$bhLi&M2xHI(WbdK3I0 zPw(S&@1=hNjbZ7Vn4uxbu*&R;2eUZB6C;{rP72^}a-}NJcuq|*T~-uAH=Cvv4Ic4f zuHltq!6GJE>R$XS$ z!kHazVqu(-_tNF0#3V9FcQh4^`^WtfiDdR>z)@Sdy{>teP_6o+Zj1>Dn$c2pK6RtT zuLmz6T7C*0aMJQ@YTBD8{XTMZtGsm_Ret!>EoDfrdszQXXFn6tNo0N3Lmek`I0)Zp zn|i+v%a^%-HyJNA4J|HS(eR!y%IcM9X`GHtj8)|^8FN@L+W0`xpvf{Wa|i=hQXtbN z-@${(v8Rmy3&yALGEJN`V!PPw?!Njhn@=#Vz^&;tq*g}kg{q50Hv4PL+v(GxeuVdW z_o866`SwN@)}&`$Mi-;*LQJPxlxvu@6OJ+s8Sg${LNKq-lF5CT;W9}QSC!t&) zTcu#R%)$*33oQR62`}ko$RONFSA#7hxJkk=6*lz^#t;XTyU3)>6oIsob2a_=Qd}Jh zcW8wDF4_#XKV^x5#(@USQgF-y(mK9eo3^r=3wHBfdDSxv05W+2<&P##uIpv2qhEy$ zttxUczUoNTl8eDtW?17|8p(|83Hz#w$S0Lzk*w-tcX{-}v-#xCf1EuWyZFsscg^a` zY&@6CR?NW9FVmIS$z*PfZN-aNkZG~I;Y`_TKKI817+0WO?P%{tn?aAMX|KUtS8+Pk za#~M;K7t8{i+f@Y<+W$2%zG!Nz`vsNHjr@UrrCAchWAHS6zC`>TUm)*rNx$ei;`1! z4iTe7y9&)f-s#3u^O<3f)JqNy*Ii8-{#HWW>(;qV-c7v2U4#5sD0-Hf@ADPI?$6>Z zEInw7lh`pheq)klTLpzTM(CnFpAFU^B^)kuFXs~>-xsL_gN~twSGHdckmuKdFMez9 zl+wc(v~;{U)uD`tX5aJK2e0KM<;p7vv2heWQY>m|)ddqZx|$%_VksOS)#Z|zqLceC zkWidJGU#`w%=pkQ@O?XDgUy30)3YQm`!cq!Os{SLMJ1m{^_5YA!F}VnJ>Su~>1~W% z2mY6A^bF9eprgu|B-BL!U_+39Tr?{!ja;~ad_V@9PSYO|>zDB*jy4AF6^4-?Z}o5V zc0Agjuu^Dti8kwocfPB-*M(F(N`81pEtywcLv5}rw?r@$K9vIHz`XLd%F4h>mGHS` zS6HaMox&$@U_vxyD>AOC>5l z%~e`TAgR_(s-j-SrP!8`%p!}1Epof~aM9M+o*AtA*B+Ca#LYyfrKiNDrCjYs6W}+~ z>C9&}|1!B4aWF>Fbq|ARk!$@uqJPk84W^?x5hCALytlRM8pBNC4I{yvdLY$DN&P-j zR<2FuH8;FzGLF0yzVm@pQH=pYWDd!P_era7QAeH;r|Xgu|s$l87J z6p7#3P@lQI-0_q}%Vh)Nm%oBrlzx0D$N|gia|Mo?d=_>{8CBy_&9c{%DY39I0xD|8 zp**^K8#;)oq}&Pn>M+RB6&2npMP^vGQbDHaE^gl!RT{}0M|VB_o33z{-XRNYK_t3t zaEVvIj!JgnO)~B`{MDMnO>66$m4;HMSN7a^$3Nr*>&z^&UZz!AGRGbIDGhg13bKdy zZ^gX*{4MCwN%^~MNE!*^Zf}rn)nyjvc{FUOW{l-`Cf8$S0=zBT)XT-*=N`9c%lYz; zEtEGsO?2FnK@KcKmVVFu9wVXm2$b-i4goU0_h8`=NQzVZdkAsA`-*S~Njq|CR%nTh zSJyhsE*#>UO`4(1s-6#ahqmk+-;<;a&n5-gODJ+>lVb%lZ>u$#VQhKaFV|uREJoBu zx)gGwHEEG)8rPd3yVJmGnPf`F#9p9>>M=quCVZ& zT!}`$ct4~(Z_!%h(7=<*AM18li#IwzO2mzKf_-^#lTk;I!vO(M3uq5aitH(_{adiJ{{p~6J1;@3v2-@xuh31L-aiDE{L zqzO=Fsb9$9z3r^)QOju*Rnqk`#^iXLCcei5t=HkQ;!3D@>6OQ%U+bh+fHPvBNb`^* z^f@Wa>|{Mf1ze29ZMEYcqs5{!I0M*I3m&|Nw`E|f$!2Q`(bEB{?Bn7Jl7(L9`u-a< zj~1hg@XzW&; z_5s_Z>Vx;}|9kG1KQ4WF&pw8_K+9lU2J$IHvvvJGqj?myo#sjr?P9P|a5K-t$tRzQ=u6aEhw7Ye_I8v8?+PdB{ z3+6R-994(KM@%FGQnoCTj)PFRX|%F?YQfVisVP&)LiUL7#2KARSoDYy!p*fuPpS#{46EwRpsS$)`){9HuMK+vbb{XcT&xc`hu+_>~~ zdkxJlwLuRykXW^^;HJ>LtI^uFnLB3r+}ia5ieVfv`KD-b1L*R4V%D0czR*|tCJooMZWXmX;6=jziopx9c8#G<&69#K<%m)m;;D|+fvIWk#b|Zxp9RC7x^znHq za#yf}rGkN`sWqD!#aSEbK~0e0d)h=#U8J0>3+Q9M6`%w}D_|oU>qN!HH>dk>Br9 zg43-jt#I;P>f^JQC~rc7DA__Z%}FrSLBU_RA%jG0EsF|V^}K>U2$tS-6aCZw9j ze-U-h`j}EJ%L~8s+3g>#ww3N=KReR0&?^VMZ##ooPfhFG?;Yq-g0{}~%!}K5-SA<# z9#fR+LM3zGaplwFpI>`{6Za#k^Fcj$?(QmX1#pfLuF@6PhX_}_v(NWERVZ11^y}o8 zkkIUH+vP7w+!Ooh-})~z_So|qR?GTYkz(YDw1juRg7!RamI{K3z^-cJp|>nUW|g-~ zH!dyTZbP?^%c_d$Ij15tV1bEQjaIdgJ;oDC6pD)V|L-th09!%lJ)F)(`n~Z3f)`%c zOO*KsLl9|JF9_<7cQ&XPxLE#|#oK{fnc~;7IB)fZmqaa#zT|a(v#BL2=X?3}px5j$ z@2x9ml|HJMedZ2TS#_P3pElKt4~{}yTw%p`>~WF${I<{$pQ6U^k?6hMQvtdF&>9vF z(EJro1!&8%1wwrdR<7nW*AI^K1?RSU0y;$Y9zD-x8A$u$)qQDl_{}@k{Is#AywtnP zw+4dt(p~}PmTst4)4RUtCFgH-@v?BJ$g!5&WG0TgWaz`ZJ{vR(GX3#K!7oc-Bm&mI znMUV%u)e?;SrH0B^C4}?-9XN5S(&^Q7cGtGUZti5i(o=a5txUq!Co2Ork`S!o1Nnj z`8LdNJQ_KDS*2Ib%t-846{Nn%kZN`cXW8Ph37;o=M>GNpg}5&43w!kjw>=b>8q}HZ zQ{dWYU&9@qWJ~VMy=|_5+Sdfyo(^nR&D0-whWgfPpHkD#szZT+%En%!_{No5i~bi? z3=zOl>O+fP!#~?t$dfjz`dAu)Y=T-~rDD!%+GJPL=J|RYZ_&b6*%Kg9tLO`eydFV^eySfq9a5TM z_3Y$tvG4LrH{IS0-on1&8F}NF7Ku$%NDWSm6HREADR4iZ(!7Q;Km{!kzt>n9-H*N& zEwm6l4ovWCX=9KON>1!iJ;f+V>mJ2r!MJT=%Yd3@^yyP=_WjAIkJCjf@=c$AhJiKj z{Vrz+1t^$3AHK7worX^~mxSKVCm)`D6Tj+Rn?LcbWba$Exhez(ed z!nAEew*41G-N3-c>!_inaDcMD=Cnrv!ut9%bjTQyo!UsDmQZ~97%Zu4*ZF#W_XrwO ze5VVG%5<+(FInJDIrVFpN=q`gK=UaeSR0X8!#eR$r32O|0mrU?e1<*p{#VtPg zg3*Pw{@w%P7DMD72{q?qN%5#Crb#-qG*GN!w5-S-YNhR;CV$ba?cq8%65WG&Qo5Ng ztlqghNY>^3muaO2p{`@liK4JpYgxfEJrj#d?$^s11isv|G)QmYGzm1t8T#zul;302 ze=_zBo@NDtovg$5`O1B2mJ9}te;qa^13QjQ^c7kK^~X5!24!V+YcCY*1@sjB%an?z zOI86*1|m8lEK{LuDl=3rkph-OZYP@^#VuT0$?=1>0YNU=%cp4<4;Mw_vnUZT_dGq^ zX6Us0UkQr_Eb*D_B{|s1#&+ioH*LJeb#8HWe#x7TAicnzfCNpZ_8-=H0<$rzUin)JEYZNz$-7A0aLeg@yqC&6+j?pV27 zeKt$h#@E%6eC=A3pW?xVTWH2G_!2PnFyFd{N{$wVqw1YH!Q9ak9e+`F=z8Rwp0q@f z3px9iBBHH{gF%xH1Hys55z3qc0ld;C$OVl1-#pKL!{kPr#uAnCC6r2Sl8fFmVocHDsV6ubb6?B`%*N&^zt_PF*2&%xZb`U#7d`3nb5e zoB`uxLkjsu^Zyx^4N6_9yu zc=UMWB6g~+9IBG3{;{OJrJ`H`gdML%_e{1rg@2FuFAm9DXMe`HfV@RZ0#Yuj)0H|* zG_9R#nn4%gYKZ)0O>LpR+q=B(@^YZ-cikr7POiiqjsosK!!payF;55j>8E>WJ;+^c z;#C^CqlM?N;!tm%>2A|Dn8NDSlLQ&W?Ik_KB|W|j!$Z=}bS%FC-)Vh~0bq@uX=wa{ zC-;I^Q_z2cy`27JjB9xA-_o+QP3sx4gV2~)eI@lU_7CV*b-LYw`e zA(ijX{gosv6t?W=Y3pe6%v}j=4o1p(+q~a0^Ml5b*XdlcR{3c0LYkPXj&;}MWIB96 zPYQGP4%+4|{ezeYnb+p3&vDRd71fWP6Rn-?PfLmZgH}{R*P~6YMhSIW=Gf{rlArzz zY5AlhG9?%PcGCOs)qRJByl1$LXBD4#eCNN=yI(Zr#Mj96%NMdT+m=Mg)KTC;M#M?% z$5aumMhu9x%41=3Mx{P=(L%5uJ_3cv3qQ4~0+!jk$s+>-P5Q!*j3PjTp4N$aC3>+< zy5e7^E^P{?`{~$o1;4_>o-ilvZfl4%$IS}JpKlswMSH4(*q&y2b$9&^^BV5%-@{~t1~f}1w1mG?BGYtStgw8^A9p-;e4DG_F^{@Y zSk{>lMwXQN>3>R^|7k`4r?&QgL6Cw^E|j3ftd7O%+@g4PrNujub7*;n<9>c2?5rqw zzdNAWeUqIyyU%&<^-1!%la#J4$>)xxkl3NX`94whw=UYTETeY{9Ie2f7x$%q%DWHN zZ`iiK;SpDx^t%k;9FPEB`vNmrvU?Xi7rd^&Z@nx`v548;3G7$6n(F}e8FUUw$S~gUkRNcpwE5^HSIL6u$d_EhAPwxzQP7c zV}oIpJZ1Nm^eR7Qw9l`v7s1p7>xtfmvc*)NR)?03{tUz<)p7y_P}M}HJI*8RX&92z zt5Txf7i2i4yDR&5RC{CR2<*?=CiMLY=dAECpU?&i_;GcLDhq$LF~RlO`sHO_7r4iK zm|*GEovW#rE3ncY%HMYM)DnLt)p?t?*~ZJ5hJAxL(gt4!l0&w{b$(jb3D(y9Xo>d3 zM9)P3chDCgCC+k@tf!BNw2aPWttliZ6mLgc*C&f$oJ$bVfWM%wSuna`R-^3AjNSe0 znzKS?e-#^OT!^vJ0NGEd3%Qk8-7JQk>FTO^|9!O0+X630&eyKGem`C&5Es!;G*oz` zx36bpSZz8i?d)o~W9Ue&F|?Uq+V>+C4xQfd0dm`XJx+7Xt5(U%OOg7Gv{z-;-&N6E zZnQVWi~7n`xw~aIbuWL2BgecwR`{&P&lIF{D=A=EbffUrmUTpzKeK>Us(|wrZ{{pH zFEc+AD@mC@1eJ$>-F;69?lMdF$%FZ<_z`safdt~EnTl1Xh4XzF;F42a5}Ou_^d(b3 zMgnyBczqJ0p3TX+A-pjLlKoW?Eh}E3{AQ7NuC;-QEdp#?^fmy-zOXrweT&_pEA?tX z1_qWnkzb)#gnVOKmgx>#999x`NJv*vI9~A2tHW_R+6J58WSqTjFFytyx;U9v`f!O!~{BDE({C^j5#>emYi_ zfA$+SFkVZlS8~J+BQDMY<;~mcoUYn1#ksXtB-W`Ad{#VGaCHRNB1(LM&LvtBgN0)q z{RizlsRO&N9sD^wj1PTHM;P3P z_Y_mq;Nh_Hd&t#rke^M#u?$cqy}MQ1ruT?#OjwupMz zHX(v~G&3Uu+#V$X9gr*X!AyNxvd;ChtPrQ?gg-*ZUb3LbL)|mcQq@x-J~(eUF}MPH zGgY=M*Lwa+k{JA1veD=!zRzCq+y=jGMD#7?Y}Y)KUbQuEXaO|TRgc4jDm`dcJSB*% zQhHjK1E{pdcr-`Ms3D6{(;?HR+t^jn26j4kPLC}_2l5dJlSF_a|BWU;942!#?h-j>7gt~4&+Qr{en+iHHX#w zRfD=cz!o3$IQtBLR@!FrDNDjsF!3SkQF)a({)Kmor%>Tvw}EEL7gVSrkwr0l($GJ0 z0Xqa30b#Ykp>p@E{uh|YNA(8UNh43$=kbrDoF3Lr<6S4)?AH8wS#N0~OdnOfXei*8 zzip5c>XsT+d{;T>X4FNytgmFuvt76OO^Hg$e27_IV(9IbCTj{jG8EyK%(7Or+T!0uciUf>=(ifgBFlgO<{f! zEe70gG=T!*MFf|114X+oCFHe3Kh8Tmtd*@G*=*s2^IRp%6CKxJM-RJq8}_2z0xRqR ze!&lT^f}_G(>|6jKTSaMveb=>V94c(N|FwuwG{W`l=7eghA6MAaKR2LDAhn#wj^4d zqGqGmadnD3j6tUc`4K|D(KFymrDX@8LeJmBStBHSY*Vn=>wkCrL(MtwbD>Zw`I)}N zS5*wtYu#v7rwhGw4wwzh|MIWfh#b98Y%dY?56)C@mj$A~9J{cQjg!4QmHdf@kIsXc zw4*&6v1Cs=*X$a5GRpH{A^LP3ppx*dgOm0dQiw5K|MTB}C;v7~nT_$!I*R%o6&r`e z9Q@1l*yHp8F7wpmQ9<&%IYGjQHt0}*J>>K4K^i*?WcBvp@8Pu)Q?;i0`_tYQA1qf| z4AK?q6k%qN`?Fq@Pj|5feEWBTko!Tu0+(zgT23_K%|}2V!aYB_CP`EP>2QY8VqQHE zj2;8Z#Gwk!p`^P-1BwZ03HzlUshi6-Vs@dgoL#snHy?#x{CtkUOPSEXR;ffU_*$6bP62Oa=yg+T2A$t1#FULp`(djMA)qpc?q*@Lwi6S2xLNui*3{ zu=#-3X&DsN)eHEpNF!lH`ik+VsVasd%4?@XwQ*uYl{Z{97uVIR-Nmwuh#phgxRql5 zEY>_aZOy~K&;HJuX6HYFW7p+C>i12ojXVw5WGLUTf+07zE~#D+hvsRNrfWm6`W%Wr@mXhR*?P@G z-9FQt-c~Cgm)#8lF_Fhd0iuvNhDR9<|7Px7Asdg;Bo4aKuZT{2;8j#wA=fzF@Z-*H zn$aWjg_oRNGa0=JH>*?c@IPdY)n(dWWqNA0*#s!MOoxA#=UXIxp2prUc6SW@Ho2MH zzHRP1_~Y2O)&57S>UoxOj&wt~e^-Ap5(1oNuaVc!l97Td4Q%K=@iq1<2)@4DxY{U+ zfek@0EM?8BUe>N@PhP@TVbd-9%x@73F=0HS-hJMB{>M)O>*1(+KdK^VbbF?kw63S- zrB9shZV8U5FqLV$AvFBGO6&Zodk&N&1P@XaODARN^*Kow{aN@o zn5}cpJ0FyQd)Lor#-8i!2_cawC1&VrB@*RTh=uvGPStYc_PqRP+runGnHq-0@yE{i zKE}Z)iLjbG3;24&>71UOwmF}Th_zHn3OFJ9YUjGpJ1tS5fb!bfn;6@cqe@e?vdnH& z`XVpFG@GVouCmLQ(_ra->)44KOIA&OyA#pRzQw)m0ZX>9*S0dv6pRJGD1ZRdgdg*$ zCNV+OD*M@&W?IPB-3T}B6mP>xqowp(6ew)puXTGf4QOY15yt2%l%SyFw1O$X#Q1(7 zUvJt=QNE)UjvYa8_lG~)zxve;o&62*)r0`%1r}a@dg*giz#p3T)WhhfJ)>$}tAPkP z!XH^$SKXh*iE#BerMG#TV&J_pL0LLhlEc6fMf_eMIm`(wf5WJc<#PF!wA4mFr8m&~ z5NPV`Sq<0?|0;V{lncCy7A$>3ww(kD>~}~9SLssYD?P+Ba;W(Q8aOC#;HB>K@BBsZ<>?`W=9;8qS5OI#B(UoMe%a4 zyDWmIMv3eCO-V`)!xQ%QkDWb3-hiLJd&6>!)$c7|6v`Q5duyKcL`9;M?_8Orq=k)X zIVs^~9p=vumyz4Ly{GAQZrQS@>MjzCoTgB-j_m!A-^V*a=oy6lUQG9fV(2w3Kk1U1qf-6ROA9Wgsk;P{r|%a)YmG~*mS4%+ov_qp&7X`>Do87P7N?H1NNNhrfYjO)%}c*a4yz5XppC67 zzR+@OplUQG`Bl0(n94&(&Lw^D7yA6OsI@o1ji_f4i!yYxL0>03%KkO%gGuRkxgi)5 zkX6+Q44ma^Hid$SD{itz0&-@dl5#EF?i#hweBaUhlbgl$Nwv^1eOrKH1aE>s z<)wb^k1nOpVjMK$`;x%(V^j#mC;{a<53J)AZXF4vC`IQL98cG)ZK!XW2|-=%7k=Ga zItRB6oA6BAza+5Q=sVLR)_d8{Yd8^U)Q5lyKdN0+VOJ_rH|=g%*TaQPmDrX%orNlW z3rpUSwP<~j1IjFLa*fOTuva1l3ZGUOP;^`nupOiGqE|6{(@_z;A6dX=EQCr z-0NH}=b&W~vPgn74c;y>vtZ`_WoTHMdtWk=hCqGz|SPvi-M6K7g5=$UOPgeiXj)d+y|7|5{@|VZjGT$QPyo ziJTppJc?`tnW>i*V2DRgKE=mAYNhBD_&jm>#CvVIbHo0J?~o8XNN_%!?^&HQa57e8 zkhlH_aOA`by54#_g%POKaS-g-xSSh9PaI{OEYogI z97b6gIG_xwf1riiILPQ#tG%33q~zJBBPVux2!)D|2tvw=CMoZ-UES)}*i#yaa(5FE zvzFhu;F{w0MCxaE2W;I5?IsWx+#~F6cAHc-H58CJ6;)9plT{S=K@4kNHkFsZ_T$@H z{cN_%*Ik@o$fvd}oVqsNefZem%Skuma?J%g zB!|E35Pes5R1tM;E~?PLXQICzh6dLFpzD9}NtI?+VEt+hy`eSO_5fLM7xK?7Zw$tZ)qaTvhZ>%APlzatle ztk@K*xhZFDTy%)PuH_yl)NA{$%0Th~S6mkK8cwe$zd~v`Uq;qJ7h3S)$CC1o1;4F4 zxv=v$2Dit18&x%fI`!?SH8YDdj)uhn;LAGKfuD8-`xkh26|&Nv`%})tXu6T>_gk8$ z{Cu_4FTN@5z6Bf#H{w`N{;r41lP>ZlT1ox5&mc!zz1={-)bWWUwYKAfUVT~8)7csLRFl+a%1dnvi&VbguOiT1-(i^<35A=k>(&sU%OgsX>LGnZOhXr zZ8=_{3$QrW3nGsk?QnJ}g)KX1M~0=&OMtYc1@vKMpj`1641g%dm1;x z!m7og&3NTmWlMPHt8^gs{rs0gqx_&z{;NkD0s8EL?EI9DI{_CJj4=?()Z z2yFXn)onjYZ~A36gHj;N^_phKMKVG5gOIZ0E`IN$vbKk^>aCFtlTM(9v(dHg^|4OE zoS7-@f#iPsD*JW1!C6tLKa)2frZ<|G=EOtAvlTb8iZA73OPJn1FHPlrV_cEYojnx1 zYEBwH>=CpnCwc$69U-srYkjYL&0bnvsvZ^?dUQNxpJ@kE-Kc+4>|@py3HHk`uRAhu z0%2Ugv(ImJi2`wBKYL8H0>vM|5s2Jrn$*$Q-d|(WTR!ZqDJ}WfU1n1m?NDBElIv{# zB;jieck`_)vWL;)eH4j%h0XyqI*3QB#&J;I6jq=Q^jshvt$B)ji#H!SkiB?TrcZ$Px) zr3xx%0C3jCnv~4eg`!_S5TbN040WZIOz654EgC&tc%Bxus>TpQTF)Xi$*0ydi`AjN z3FQNhh0&Q~E5VmJro*qtwCS&?mU36lpdaM;emQY9UF2`uu^tu0IdPKT+JY*&d2G@3 zg(87wFX1wQF_|}X!A~mB(E9R1>zyvm@SoFAtqFJ##^+>Z%(eC`514U6uLIF%mwz%> z^t5Oly3Z-`4kErU`_rz5e{x+8xvaVAYfp9EZM)(WKVs<0+YiZJuawHo*H+adWUM)0p;A>4H`=C zE|qkaCrSnS+Fu}$pz)2f*CA}0eL8#;&-eqy4q+QalF<}Xf^8%4%)K*le>9{nxgqG5b3jK~(uJsHv%iTjPYH<(`&>C~kGN zJ=fF_9C=egO9*(r+mKA}EH;NCEPUOmN?I}jZ+joAH!?pHh7(*@&H7FdZ~BR_BWHSQE}E%l`Gdg3Rq#A+Sc;Y0sR zccb}7DQ}+|4{bmT1kBPiE1(&fQJJpnYxh6;IWE(&C5U?Eub-x{9>zVUF@7Zr1cRfW zK8+{Wt&&kb{w#>Q)ODH=nVGtER*2-FoL_fX-!VSHStSP9_FMGyOrd0zbu1DDY3i*#fFce!fg3%pU{U8{uEJ#)&t_QxQN*SLi8 z?X`f~_s!npB|Z;0G{$}JtN1A&RKN#3K{DL?uM$&0vNp0$?WU;y@oy{a18xX2Qx*n8+9G2oT`QtZe;lePwy_n=g4=DJ^lD-+4Him z`|EO@X?I5c2vQZhCV75#><}p;Sm>NkN>Qe82g;8@w8Fr4 zu9^}g5A`iVA~R*p(*r6f`e6;TwVq>6e=wM%J2ePtCi_+G3Z!Mk12fs%EW6Q?8N zh;T8q8g7rw!$jr{#xRuM`#dEc#WHZAo3C$- zUoJrRn(p5qc++L3bA$qnX{g(lWY}?dJHxXk9s1>m3==T)#{U2DNd6yUUDeo$n9m|& zw2D(z#4ZUR(1S`7k1Z)l~s^!Ns~I@v8ROUI|bK;CsYw;lf>_2$(Q7G1Fghp-d02Hg$VCS4J# zYqNANmldFFqAbEn(=7MyhD_H#(h@Ie|AB^M?N;ugLci(#>{g~IkGIISUNrwF;7$Vp z`h{-Q@75u0kW>w8aE1YZUk4j0^DOnrEE(iall)ua7xN&>#HYK#FB;A-xUX1R#=w2c zjlzBNtkjL>TuEC!qBKeNJsgl2od;|RakRS_L?e{^6w%)stprdXNA!et!B^U>a`>o} zgwhnr^fhbuzqpM}UZ>u>*p9k(SF5r2s$%b!fQo{-jMeXw%gQo(#s%(D_cK?N-Bv%a z=YqYrSlM$Y`;bt*z_wjM*QUhx8SyUC zS|16D=J-}2iaN1kjn#0Ku_wOEqidS_^>B}u%@58qAHG>s#k@87f?!PzMn*fmj`Cs4 znMf5u9%l*iHxwDpOONAxM&p(v^JO-fGB!=nt zMuVR)3S9*Qy33jzvjug!G6KC1(%G}1md6G4QCDfs(vu%aVaGGJ?MQmsuoF!}kuk|ttBZ>~3vj5s z56XwjFCtQ!ahOF^rTfzC$^OKl&%m(I6>u%!dW;2=O;KFi9SXGI%4Omb(w2tS0^CHc zq;{WEsOIj4J1-;ec?!zRjcw?;y?yq%MpsHeoP>1KMeinp&=MAQ6e+*S1Kw`S$djJhWalP!(5IsRO{m`p6hx zsYCCJ22vIPSI64FOai?m_P9dM#utYSjEJ5Va{ZxEoS4<^wESr5K;uTMvnCJp6Glk2#9d+qVM zW^W_Vp71_vYY5=NW4(Ucj{7=UW<0K4J9q}Xi!?fyCuE%9kG~W>Xp8S-PY~?yZe?BJ z?q7TC9ZVDL{b}Uam=++v;gi%?sQKzf(mxW5Jp%b3ET0=@WVTI z1ACzqM6S-D2`s)YP5e@y2{qk9ToR!Z|#-9$MF93S|{ydGv6P9rz6=LUAIf(56YW#@X=XrkxL#DqC3W zeC2Vb$I`57jg?Y2OOeq5-erY*w5{)o zUcrjxgra~PNK&vCG6EL?XjnJ`(4)HY!d7(uU#3%8L|8ZV0}ZvN7_SQ&QSE8TiMxt{ zgQjEq3L>ZptA)nt-ExK-=Scce-!3xe4oQy%iU>8`@`E~u5z_{a_W*;?LgXT+#ce3*r{lbue z(6vb^l16ncFCDgd*APW@5sI!Hi`+I3YMP~l`S9gE&X`wUs%=Dh#}QA$oUVGa&a2Jh zEh|Y1j~||h%OonJK?2F_u`RtnOz1z&X8NoK}-j)}i(5eiV zkA9UGc=Z9v!`1E&ed!*cG<~H&Ms3hIKhU~(gD0V9A}>AhrG2J_wD{Ns9SZ>{^K}gn zrEaRk1Zp+iTR+&U&tNxX{{UVsSovR!y>~d9ef<92-BP3WEN!itvG=&EMNv|FQ`AiD z6-3fji<);4YUWlWjg{K9YZparVkU}Ol~55R?%#Dk-{<%p$MgL4{fomNB)Kl1>pjl% zbrMZ=F2lQAxY}%(yFgc=&frVFxmW01*L;o)v6@!p+l$7a5)$qz)@qStJVupg8^ zhx;?aAq1~Pp7?|u8IFyH@=8ZB8D9yxIL-p48~sd~VY&I0OU4~Gp@b~7=gq4Ow+(|G zvKEfu?NXpPDj=1(YC#cNbxCl(N6Ox^r+yJy+~ zxV^a5&F7^F@|>ODqRzI?JmO0yl9iO$s2!Wx|_L;GK2 zj3nx&q^p!^I2&vbV^98o`>2RB zDa+b#`L^_z?L+x;!vNk}bi#48Ruw`uOE)oGfJ5lzfT`^36e(?iYCaaDj~}NXmet7e zXmNnM#5kn%{P%QL;d5EaJ2$>ILiLfK;xyT~^fX)@J6}h(qhS!w5FAt|QbZ4EE^k%f z{c2vpWy|cI7MpIG_4!J#fN<6_el*1|G~f_IcOa5!ENTav{not>=_eG*;00L%BdrAm z^WDqcGPfksd;9Z0nOP*Be#e}FmWNl8BRMjDT1RA+Wd>66`L~VO*M_~GVsTor0Lz-S>=rxA(j-e2G%13k*?&)zoLa>Qh9u}ODI>pw8*$^BW| z`u0xU#%?*;moZt~Ce<5uD!0cD8ug+o(t??;VsZj!qI=jD@@_fxtsJw=?+otcnb+J>3I zgjM&mEgZYh^0d`x#=qeH8d(!iYm=bC2T@VdB_4$~X0!WoC^$+GGGJgJKP6 z!OduPACsR_F#k1UPc@B;fyxt+}vwVs6 z8sP^@+QFyLuRJC(CrQB^(T>FZBtH9UBFThzKk*FG#zHSZJeF|H& zbT0pA#0!X5*16Fpv<8k-_j;#P<+k#W(n;8P90q3DmX1UOS5%C}7e<_vWfVF!tNzT$ zaCy1OQ}AR{u__f~%D!%HYN|*my0KE?R-d?=l~fjwHA2;v6-6&JZ#Qh@{@>6?xdv>) z3UiwZ){bJ+>#Q*zO0#(S?}ao*&*o^KR^{ix+3L zK3%@q?ZU3j3q3tJ1`|QOTFmxeCZErLdQh@WTx_rN;(qV$W`VNjtl4n5JU-V2{Wf5weJB#4=#ei zc$*g%3NrsptgaG3i{#mDvo5s!f092oIsQ=DKKwi};P#;G&Y$}=^lC1sMBJ>QFtn61z^=tZQUYMWl` zc!K~K84U>+^VQ~?(w3(h{Ghs$uAP}soIXJ-9#LMEZCmg7N_Wg3F4!6bai#Z%dOYq9 z@VJYL@VEIpD9*JfjMVlZF2&n}5;Ye^Z<}jtKWCKrd~;;?55{UTTmENyF!IDQ!>kr# z!^}&1EAEg}_GiN!Z0zEJ03B+7Coy*;7!chW9N3p_8b#i@{qKt%=b<{*X@9*2?~111 zOMLc(F@b5q-Mr}ao~8}{k3zC}Z&MORJ#*VszCs`p1o4XazF!fAGu=}OnMB?{IKzl$ z<-UMnh`f^o=3S99WvU*f6}TllX;q3ehy$s*J?QFp+}OL1b>qTu8g};@8Yl4{DN?1) zamtZ*bPe*pV5{Kmy%xhTT|)jf2mEgviO|o)BqR349npx18dR}9#BKv+^fO^F(P9W5&u_bPtS*UNDsRN>EKLIM|;5f6Z1B+F(Qho z^F_aF#fr;vbM(&rd+Ac#Q$w|GkG=GnnD^W0lK#D5)#i+S@3qgE@LhpEe_F0KJzwHS z?mAg<%fd*peALK=?Pt)jgoRJ-{jja$-ywpZJDQ2Zz_j$fklVWrmE`c7RioYHz(WGC5@h1x|*ClD&`7^9B_UFqw()te^oUY`ya!K z&1}6>dhh$b3E98d)ovtxpB&J$K5 zh$Os`Y_d&Xq@iMJJ{QBrNs6y(@^)Qrt$*R5p#oh3kw9^idW}CCbgof2p>pgjRp~q+PqyN3>EO2rxq;zVX$z8O z_(dB!*Bv+6FZrT?DW*U3ujd&ln$xjdd=Gi0+xY#hoT2STglHT1q3bAfOuYHW6>J+)(&sj zY(m>@P5Yp`AS@jtd8e$`&Gw=NNc!zY=gk3&ZnwkA+1vcXj7B$EO!`w)tx^S9c&wI@ z8V>X3&c{-_Q;KPAQR8hslW9W!V>XZ~^^V<>04t#U@d4!CDB4GDt{rWmv^Bxkia-hI z`6U!|oBDuM`a1&{bq!A0LmarVIXqQir3G)lXAdQJI6kh~_4LHf{Gwo9;%De3F1v7>_whSD2LK>koJP0 z7tD{=spH`?f4!Hib3t1LdT3|j0lP`VqGQkxn_JbF+8%YgzP8lO&K_HD&9fag8sZ`E zsbPEMnVG)yq{wEB9JI)Wwl~!w(KpV-0X}c0L%X^JQ1aHZ)kk8Bwx|1Di4&F^M-4Q@ z$cdmRVCSfD`HG;3U+-_-pHCX-yr#%}g@(nOq&AO-eX0J(V2n;MXeHv! z^Yp+>`_8yZr(}&X;0NbQ@u#D z-7CD{V(0|VpBYx4fB;Y4$5mC;kG~u~U)XqD%ONwzpdEdFPt={EMe|_}em$YA#%eRR z=v^`IoC@#I^i+9tZT?nt{`*cTdlS7EN2i&N?Lbm!hh+(2PqM1A!B8OCx>=3;3Z4s|R zsW;lAy8LwMPgBwH)rQSJm)GiEePG~Zl-@XM6aieSkBaPb>@5Fv38Tj1M+RK$2t-tLa5(*XdJl>H%M%@L9GY=yqo0=PGd6 zcfu@+K8j|U&l&Gs{m_~Hh1zgB8qq!H%xZUTkZoR?(ETHempk#O_-bOQ>XdK5wdTxx zFG-BOynjJ+WrM1Z4HDsD?uXI#Oz)Jmp3FO4oSj}FPtpESV&qzl-#a;DfIhUHK+imz zp=uCZ-fF9SX>B0RRFw6JEH#XN%!p*AP9|`&CqGVw^=0~f^_S4u7GpB6$_+r?OOobAd#YCwkC|arE-wO|OfxL)?Gv^(^ zLGv)}9sDw7EOKpy3+6*XtyV<=_ShdV2L%7DHLh>b!B?hEAEj^~ARf*sJz$?y8&l$^#=s=ZWHo%uUa!GTK&f#nMvS7M`RtZ(+rk z`7^KX_bCV@^aI#jW(d}E?T!O(Y@L#cHl@`uid8PS%XsPGUzGPBcaB*Gm|m6R{=HDL z&1$F`o=~jVzh2;29@%F~|5;FNjf;_FgR|yIa6Wnedm-hVl~w|DG${sz&Tc192eqRm z3)>dI%U#;n>guKpC+?>FM8fBl`iA_t$iIcYu;}wdanTI8y7>{^nxG6f`6n%^{QbGP zZ=NAxo)Tf=hNHAUoBZBIuz(WVTgc{FA@c2DDALJZMy8}Q#lC7y z;Q7uFbuKDB5p$zUU*g#0*JvV?m*=ex#J>1b!QQxZ=y;fe)AkFhIdE>k;9n6n@w;6l zE&@8SEnuw*3q63+U$qC%9uq+1AaG0NR?zz*KJC}c&??pMu^?nSYD z*+~kfb~5X~*^<(&czA8ApZoEYQMhCI@_xHY<&j_GJ|;}omj5>0bcPRZ0!iCJINJ-T zodrT2@St5FVDd_1?S#&17T^Jm*XE)G^xI#nDc|B{O7SC)7!ag~=ey%>E4#|(-o!4w z?q8HM530Wa`K@}HD<7~(XJ7{AJ)Zcz(A?4u$@__pP0TOYF+lcP9*tZ2C{-ka$%@@z9hk_CXMnx3uq5LSCfB1o_E3 zEP6N2*uUX!$~}Kv(vbQBfH@+}% zXomBs6K#_p*>_up=kwD_ogW{n>|1R5I#Qc#e#~;b>yhBk$VeK;>9FoVB+suWPzBUx zIz(9}&$+ykh%pEPLi(! z2eQk5_p#;2#E&RB-}h%585TrsctTym`|Sw7Gp7wHao$xt*LG zI*nMxS#{1wp{znQidbOxd-lCsdmT7ZBH+C8bF zdQJb)(s&xc0!TDUCMaG#aQ4ZRt(?-%cc5YxJ$`XM4V1$AySY_44w`gVzFqFB_XhYS z>BsPvWu{gkeYtJEUR2>2Qo=mcV?^Arf#dg%FcSBKSOYau%IB2l-*Z{E7umtO|4M<7 ztA2oBN*EXeaG*qbFSC#$Qm7iMDai$SzR%ivdLqfnR$}AXqjKt8r9(5KAR?qjx!t- zo|v~gITe&VpF)ZON)376X_vJ1-3!@&A>8mm8>R0rwv0!eGAmBye)%*&6C@! zrU~gO#|8z7-#Z$_U1i5sI*zv>OG;Y-IRu@?_`c4Ch*g8`s)v1ojkBq69*7{@Ihn#FU7C$!|ftodxQ#lU3Xe$GRSRX)Qr10H88fIjgqAh>bcXQXP=s?P8I5|F1PkyLs*bQ-1=_k{3! z?;5>d?E7&}?lv{fhCEKrO40gW3uZ~xy>b2SrP;kmnXs-CYe6}@09&cS#h1N50xN7- zRIIHe%(CV4CHlnmtez&K^_DY*f8x0h8>8)17+izZgDNu$94Z=GCvZ#cY^^^|$Ij`w z&K#+Jv=2w%H|LjVC~YoiL?8SvrFgB8I1S9Tj+$TGZPIbi1tO2!4ek)`$yy$992W8g zIzQ;M4AFEBdWX?XrH^m)&u3paUb`7QI8d2wu_ZT`I|qL}k?3!VYYqJk8`4?LLDcKS zBm5)z=%JX{_$q9yukCrwd;p7O0l%<3uH3~AZBy{C><%uqMnli{JMvl!&vr%A4tyU+{>w0E+?5M||FAqzsee{^Jc{leJ}O4OE^qI{3K# zwLGoDJUlbQ@`}$2F>m=Ht$^ue6ERj?^!|mz!~q`2`(y6=qM*w?+IIut7IFBf&OM$d z+hP(8;@#+}t>Fb@)-9v)3G+^oP2nOka@ZXErq|SJw$;%b_Rit~d1|IZC|nah&GpPBveB z6_}B}Y5jGgDgTH}XLRSvEJVwW=f|GC`egS5VGIv&iRY!=QPcGAF{mhud<4Z z#SGH9g_^Zu&c178WJ_f_)Tei%uT3T<;%hHK|cqh?vY{6ztXLq(3Y5`ES zJ})y*bqG<8ZPT7i{?P(kutGS0EI$4$iuNeG;PCV@e_J}HTPjFF;r^A`SiIoHpN>`u zeV#o3UTBEBdGorOsa%7&s*IOWsUJo?aXfa$)Z9>XHzkC@%AQU)B_Czla%7CnIY9TU zyhJt4?rMOP>?O}?SC1xbhh!^tzO#B-BwWepTwY@5!WmpU9hG;@(5X z#G>o`S`zi89J&q0VobiD(c%Y&!PB4ip65Y)R~$;SEzn#eDkQO1Fu~a2s4?&M>>jYd zyRuA)B!bCO(^Bx;FlLg?fD1*p&E_Mt0QXiCSNh#R$n6QeHY}*x z^kEs@TYU}L{Nm8ZFs8lM65PKg?t!u^wU3kJGD513R{E-#TS@o~l^glWS=}kVUl9!G zQe%XMG@fJzA5c4kLhgJS!h zEeY;mVp#V>{bCEUiFO}ezQGTRceo6W|oewIo;L&{iE-PNXPzNhcI|SBDN2%zW(LK40=j_YZOSf zuP~f}HZdq5jq>YaQNpgH>x#vu`^$+9saN@BEZ3Rg;f97Wc|*eiIz9WUIy~onjR<;# zht9kP*_G0BCg58rM`;dPOM&#m)rr}$FRVegT%ga|x6*l(u0RuwxfWiyL)(aE+4PV9 zg8T~9jIdB$W4b>U{2iwXYc?y6E4Hr8E8;i7;LJ*Sb2U2EV{|oaZ*lM67XEu!RxK?;dSKQHf))sEpN(0VurXaW{&9*ThXbzy!1Z)~7VHDhcYfss z^^Qane!sd_6Y00cmxAbN%#I3pwHj;E!s6(?zNWBsDbkbWv9-QDbM{@h#R(T1G^a;E zXr2E-az$L+rMfpFdb%ZR7Od;m{NufL2R7uOG(`}{&{17fVXELohpRwtZivxwM_Y@A z{b}{G7Yfn!1g_-bnU+ z8R;^7a4>3t{tm27h{Z`6eIdaz5&w1m%QKRah<#F<hGxITfDWSV-wTS#iRBK3MFtOCQUu=rQv4s1=nnun zqiI7xQ`yeQK9qqqnhk*~x&F4F2Z?LG6E8iX*vYx=!%W zrzy>Uv1hs=tHR(AE$s42N@GW3%L7p4iWkHwz<*_?U0DOrQIEOM!MrLVxTYkS{Ang! zlvoZ8v7gunmBwhts2RV%RWH4MSKIy4cF{K+-CceD^h^(~`doN~1B3?oB&lx(*4#0sjL*PwHwqJd>X}2$;oZfKwUrM6STFjsiiH~xzJX@9+!s^9MqS{Yov~{ zTxR9?t2$ESIJ|Xxuj%BZ-MQqxo^aL>*@@%$yhWNbzL*O1b(uxfdu!)D=#+mi{PB-B zw>uU3UoLL{XSXZwlYT}1@z?uTYQ!#FocfXB|Bd;*4g>|zibQF3I$kJ1n%{vsb6N6< z@_N(8$k{{!^&*(@TtJ)gqu_a#l^rbSpB6h;;Cb}+O4{dID9SOdHkT;@0(POLI>|5_ zwEO& z`-O&X3-xtH*bgIZj{r{zo2E+7&m2!?wxm?1cB6)x5DN_b)6imWi={99vdJ4K&6a)~ z?1Z1QU$sTD+zTtUAFpwUc&X_v#O#$8lEHRL5J}PVP6{(n>o|}QJt&+n2!{oJZC|Tk zGH*K|FJEkQz7q#sZzjQ_&H2hQfTzx*L`BO~@1+T++TTm8ETs8sR^3pBkC5A@VL?ab z4~*(h#OOmg^4pOreEqHIY5SJVnfJE(4yJMu#@R%ql&IQT5XWubD#>OCf_0stwDeF_ zs{tPX#p(*xd_d$QJ5$omtf+n@o0m!}x9lj1%uK&@F12Zd-kG8*RW1xFauJ=DzT+Ei zX!aU#$v%3@xB&YquTvhlVz8*g5)|&zbK)fN=hIMr1(?swxxiP!tU%o2jfEw82uBVR z3*Up=6m4m)%>$(Mlo02k+ZNj>_^BXRY3-nV$FGD8suD{XxvmymV_bD%wBI5xYa}k?B)yex@<}%NcqEkeP1S13lNg)d$GN{i=(^QWu`J!PtJMrC zH`b4c3cYTUHW;;G`gJwa(Cw+ROn1rdd^a?suZf;cq{~1GAeJZ8sBD_o8am`IC>H*E zLFms-e8BGUnG@87JWS#mNaKU)QNR&+#!yH5JU?c9k3BTePg{P|w6S?Ad1SMa@8s%V z!ZlA@YXI+cCu^W5=vCl}DHn5MswhedtEpRf+hk$Els(c$2;;w3`g|W!IIXVwf#77Q zI#0G=_}KaWr%rvqF8GWaKIl@fAA1&Tvf3HD%tlOoSGKZ9N$bXK##gcWx!5(n+Ydb} z;2VXm)=p*F{tPd;o+nQnSZC_=>EVwa(Ddq2qF7n?&Gt@Z3YnHjm`?o~DGzf`ST`@Q zXOb4Vc5>&)*oJE`p?j4WHX}NoY#w24Ute7{ztxP!N1g+Z_AXORD@C{}ajgGc2OHIv zR;XBD9l-3{VTFB5@8tZ>T(P+cp%xZcL$FLVdCkeQo>{2r7@|Wj`ws8>Y{vD~!1Qa3 zfR9@MJ*?`BNwB6uz+!NkLT>nct_TB+_S@g^fksRLwPEAW#KIp19bYUig6u*o0>Q%0 zSfRy0l7c1(7(s^gtKTA7B6wfC2&g$dqR@trgBs=zkIV{zWcw z-OrycU%%>(Nx3b*RXSxoV>M)PMYa3OM4zc*O~%ubseDJz+^6mTlnzH_PN2U}IW`x> z$5$XN3nVN{D=mWTPh-v<7D`hc@B>}@^DF1{K&N@tisZ8AgYQi2f!rIjX3k7&{vIGV$PI27s<(y?Rl$ z`CdGv>sK~8f}Yyu_pqoNbG#|!nXJ3-~DZA0($Uw zx5|1ta&nunzY!faw)c=I2yAGoH64gp@C=owRId~&zw#F)fOPzDMrvb9Xf`ZC6p|wL zr1?GX-DrLmy)bg9SGbGxviv{16jfsOEh6@sYY1I;{o;;Mwa{f%lLzBHLlPVn50pS2 z;zO3Sl1w+0qPw;`c85KPJ4a8cAv43Fo8is?n5D4(SzTGnyruNM@-0bb7>q7I=_ z5V+o}$fm3SVl?6APA=CQO))&T(v3EY@CjNuql3P+6_*OCjn(kp%R#v?rqL=#Tk2K& z=5yPFQBm_#+Et@4-)W?ZE?uxu>fN#vai3xC#!0j%;p6zzTub!W!_^2wNnlr<1mvfK z2`WjQerA}JWr_j*JeG8Mm9hU7K7iK;HBVk)N$qITC!1)1(=9fQ8N$maK3K|26@5rm zFpeWNJ2SshyHif6a19!-uug6-0a6^E;diI)%e8ksBvK3t8pLkuG1cbRsN*EeYNNzg zqGehI^ho_<-79n*{Lp}NdY$XL7>sc#>|yKpKEhjvj_T0V7{Iz6YuKQS+(UFIQ{O!p!&Cf#xQ>Esl zWNYfX{01QK*Ud^x#6L{ZY2MEJ^wc-}TnoqrbVuLhC3Aw<*_3s5vO7t3Y?@D}% z%DWEsr4`)R+6T5rhx!E}UL_5^HC7U?r8$A9Ka$B(QJR8bUB z@a`-CBF!L202x*e0F0Zrx=o9q!wTU=0MYWKj4lDS)SW(Yg3rv&q$)|X&xK+p@*B8m zzrE)sUywSH4Nu-MBl_SHco>N7nZgrgMu20*R%}3LpOnhCP1<}TX;#4_ZjClCF0j>D zW<8dfdQuBaDO}g-hDPR_#rB=HC!Kf~CVy+^(n_duq|5yXU<=+gc7x(h5bPgg+SyQwA%oMw}STG#&HUO zW${#lfS#_xjD&cP9}{#k_RW$2b^J(Aa=qHI0T$M;{`T7BD?`Lj&FJ_Md8!ICNl;k! zPo}#u2e0E?vaq{~)tQU|mv-d5F)F7|8Sm-ka8n`#>8lbP-G6Fa)`T0bA?Wb5=>dl( zA^>+AIIaN#^jDY5Fl~y-Dx-$}I7kNOh483(srKCOOrhh^jQpj zTaKF2HQJ+B3sGlLRGUeJui(4`xwwV6lF+75263T>OF&x=zas8O{UgKw`D;)O3_aw zT6F0M$-O2~K85zgUfaX!@5MB1LkD{I=OcPLFX{NUGvg!P>iBnFfi?kST#kUy0+s$# z7vNj^LBf(tuX1aV8?I`az+J1yaGhg!YarMBr=KKs2IaP}v%y=U8CpD z_n^<|kULYKC>>Fss4$Wrh`MdkQ{?BVsj_g&yyHB*FbrTst6A5KQT+K zIs*nC;T`5Rv|NOD+CrxxC3_WxGdQQ0W9;lj#Hv44fkp_CBa@y;*NYWbl3B~8^FZeVO zis(Jve7U<1(($a=`|B~$c5C)VnparN6%T8If|PQTHOZ*MuU6Q#Mm`HW2Qyh?5?u8c z?kBF?Fo!-73Gf2nHqA|r*^WrwG7E=~0f{>j>9IdQEmlSO3GD{wHxFDkGyw&{_hUHf zJK%NI@n_4gR;7#A>;%W=s1E1K}cT8>|JR;e*LM zL#uqzZSZn|YJXmx$&NekG{Erw24-JZ%-ZrUISqA)&`$jK!dv4r7|fbd2Qa!_SpBsb zsrQJq(#)AGoqCSA6yI~k(8o(3-*5PKvlrH#0j-jn+g3mr=X`cVTMo>|fLMOHteVR-ao;cz##!CoVoF zn@1kgDM(1^D;gJ+7vD^qh62X6qy(7sh_`#NZwU5f(TM8MtrYRT*{5hzqERh5Fvz6& z(6IX;s`cdP;B=~vJ~+i@SnRO9X|K97a*EPvJO$_XMX@0uh*TG%<;pFpBgKj6>}1g$ zWob?^RUv`iP$Q+R$?r$J&QmywoeiWm?*DYV3)a~T)a=$wzU^yQCDj@qT+NGqIj|vt zjMVX+5$K?ovEuiQJ}Ac+$!%nsZ)Ss9IZw<0#bEfhHO6k}R?C8wwDJ~0tCOva)~Mq< zcJq7!AY@;Fe-~uXgpgDQPQRaCd%w1yq)k6A%Bd|it0~Btd|c+0KE3t|`y91fd8Z*S zwj6#w4Js%qk`w~j5J+v}i1M?t8U*aatNZH3|5WP8HVsd5<3$CLTBiu)>Z8}k~ zq=#htDVPO`o$}DIahfXoew(+f6oiv1`kbzmx+-1JTeTte%SN2{OW2he*xjB(e5y+2 zC;aF6sr&fz8Zr8m$+xNpmdHnom~(QzjpQ4w=c1!SjcWN&Ba5?n$azN)fo~3eXWJpb!X|EmVCDU% zCV=7IlTZ00JkLtqu69O!Q;i8Ki!|oRCdjGUdLe=0y&Gv`%6w7(&k~O=iw}W+UB<~t z+W@lczw7~AUX%VHbFz={Uc~pK&eH6v5yAKlkr{11_zdcj&T84gvXAmg-9GSydtQC(y5sQVfh=&+M4H`__syEd4GHsCmvRYt@p^lKnSU#_MfSZlHhISB&8%j~@q* zl~wxbh=fw9s=4ED`2uxCu?Q}X2vg1pInyFBV>U1cpb^|4H+AETPMt>@PEJq=_;i*I z(ZYopiXe!Vo=F-L4;^DHEPvdg1QjiLZ>aqlj(G1jBcsG4@+DQ{Zev{~)#613ZjRg6Z-O*+KtU z$}b8B);oUfz2Ly=cb-ky=L|gY^pLq*%CB$tu3tA!Sr#*BuKLTutkft?i?dWWbM3k~ zX3I>nHM)uTc|IBgo--_epR&38U_P&Zf$dTaeiJOZxY@#V?&d$Ugmr*zoiG&Lq|D<5;vxveJFO;W4InpSluw zXQp#`7<)EH3_QfyUNYAeP+Yt14Bk>Y?hcbyaLl+a3#54eO=eT`dS}sOtde=Td16`B zw~1`UHB1VBf4d_L7>x32O~O|2>62iG6FzN`q;q;JVhA~zXwc7$6Ix>cyt&t@BKt)? zK)~twH42l9I=(?%GY>N2_xpLkAIV1o&odr=E`Eme5Vm1rb>`g6mrEWFej)a`KU&1v ziqtTj{;?U&Apgc@AEFa3i&C1&HWBp!VJCa_!$hFVGl~0k@W*Q~Jz~5Oty$;Ak`TFy zmH`aN$me%w;jA!l>ub>4^ZTEZ&UAVR+%`{U+~QbRow>Z1azxx*K@zGW;hT%yn@V3U zzbYpl-y)us8VklHL34xQ6IjK97n-GFVn%}{rR>d9ZiETs_jMCDl2H|JQ&6;afgtKv zbi^L13{t3(c-V#F&;d9QwS)~*V^tq2i5$r@dPHi$1P z#0DB2gB{QxYe-G+8ql<&e=h|5x6$pgsMJ~gASlqLRRop6nOyF@wMfxt1bow3&5Dgb z=2qI%7vEt+Dbnkq>DEIMu?O#227Yrp%HvT?B-mwb;jhyb3BFaz~3g@`e_3u z`>=9T3A4odyzP7>HOGN1B~E3|Fu20c$7#XA#mY~!<8Tz=ujR5Dzk3lVZAwXAy9TQZ z0SP#jM9{giUa9fg7;g_##wQA9?>Bx5J##+JKP)}+zA0f&FT7Y}LN)b=f(sZ=9@MT!+kkO11#0@xq?6pe09XXTa_Vnl+r^351Y+Zb(&j>pwi7w5eg>)+_HWxGl} zR}RTN3E+Tw#S?k@U0#1HAMbVZ(3h(MUmvkf$J}OnYqD+n@wlwn;!Sm9O@~WDg?av_ zl@i~t_2RmNEx!f;ROkAiwmP2n5$O8TocSnki8hWzR1cOO!t2r5bF(Um94NS)0XaOdI;4KLc4sX|O%U%zt z2rrU2QMvYD0%;W{0UIJA4WozXhW3U{hI-ArqaWdng2y!=(Ggl~M|;=A`^)~0bB_TErK*NacK)WiJJ>kB7^nuDKyI=Uux zO;p5VnEam;>%#7fn2CR~$Zy}0@O8{xLUZQ%IWF8Zo9^j1Q92j#D$6}ZU4jqt9``b{ zL&5#>q`j!*f`x%#uTy~v(N*%$8T=wB1`{V5Pz3bh**lf604&#gKUNUn ziYyU}3C9E2cQ~6jiWgUPcznho_LH(rTy?ia@CmzD*5Akr6x>QJx%@{H)P1tg?YRS3 zPbaVr$dPW&jh{)088gGC&pY5{N;?xhlbfG*8?}#U>2M*K9!cjb>e}M@4+NX$#VX29 zFRzgANYLtKDfRFoFUk6>L)^pQjqtQ@&NcUxPDlnoG33PmSjV3K6F0JnPI*sCfm z43qF|CxCBgc)f4K=%cow_!rI#HhKc=BbaBhIc2VVk2A1MR^8U znFC@m8MR#9SHuSFoEi+O$5T0s$rUJa6+o3!qGgHJ5%qIVJyS^3Up2RbkGl&+rm948 zwX{m#5p1O^yL%K*Um5xpirZdKnYIGd7HB-z4TD$`r6~vFhTfBS7Wwam5PC|KLb8(; zk9f0b!#aJaT9LIvVw(r&B5dAMHLbE+0@YH9_KS3I0Ob17un`2V^_+ejQ3U_NLS>*K zug8Zm@_kK#R8pfT7y`4p)Aeq3l@ED)Jqxcr+Om{2I1DAmSm^G>6zx$cI$ht~RQ)#E z9_-z(Hh7_kv@EF?-0JbkX+;En2@GGJbt-gSXAUrg7!p3pnvF zOZ9p7DqKFoio(LTr#Crl&F?2N z43B%FUD6Ejqo^!oPdGPy0bF;|vFGhTLH9Y#h8#Vmnh<3pYN)N<1&=0Z-malOSAKEo z`}vjVyi#hbN)S#kY}4-5_;Ga@`u8g2_Q=ndo$IOtn2#1cQjgTwij7&{WqudD*_i7L#58)gGFG;Ov9c6Mt{ z%f1QoqrS?%K=!|}3&}wqm#OlFpaaZ9Tp!eeR z745d939eB!z@^Y2v0Kp%o?1-9?3u4FcCpBcV#BI*{(+lxThYNgsy#0nuW{n5w!deD zq{ZXYj%CKujScqmcNaEiU!UR*;e<}F2dfD} z53SM#clQiT-{xdhmm4XSP1$r-#BKQ0j-i8m$)`~u4pDAzEN)5$^KDy`58-}}LFk`> zmJu$1F>Lo8LX~39&u7|P_uu$i1}t`FUS<^(=)4{Kr|Gn@gd7gcBot}c(!t+h+*RT8qosS3_pY;ebxP8BSu~+GN%HoT%qcTCK z+Q_?3EmZHn#VN@#)x^qNF5Yysafze7(OYA*fu8+D%6486=i1eSp-G!<*Vx{3!@npT z&M?XP%~>*THjB=5aHc??rHhQ?dAi7$zL0CN$x$0qZC3K`o_?QyvUYe19ra89Sv@a2 zk%^Vpey=lM^pwB;50}6>zY6aCgAAWhjwe_a_wsSuZN-Xa2=Kg#9-ps^Ki0FYZuLa@ z#a}9LtnT;iLBrY=9ONgFx57JKYTlyhQPaQ?0etPe3oj^Yxw!XS^A<71z$o~GGjrkb zU_Yr=i_JO1}TaV1>Tgel6heGN8bB>XB~ZLm z!ir|9GS5fg_WByn!b);}B$$+@2d@WCB6gMhVgM8Wx>mC&+CbwBWJn(gCtI-0eK?Mr z_6ITl{7x;_&+4%b`#^naIi(>Td^L>}-@m)O0idk6Ez|9Q=+1Ac`=;}QNzIoIy~N0{ z_$H^wkl*~O6>Np|5gt#>+@Hw5OxWqrJ=Dfdpxq?V$eCa68>W&9^%nJYfnnoFJ3S;X z@HlqUhwLS(!lg9C1Wj^{iqND#Y$J~*l;(EIDHL36YxsL3#~?uPwbFyn5dew>oay?K z`1UNQ2QJ#vq(Lt=Qmf;4)#E5bnb~kK^lM8p&f8BLdmiF~ax)Ga_m`b>9M`o>>r&eb z3Yq99t{V>L(F6}*+`NYVfaixBJl(^@xLnl~eb!VqXo;~m zN)0qnuxDqD!CqGt7CH#l+A5yV!Qry^!CVA)mJfuBxm~)H(7t2qiSj(_I4wvTk_W7JTq=;YoK1=W)a2YXRw474DhQ!d6;5H z_JUlu-RP5`y6E==SK0SDgx-}qTOn2Do~Y}oD^JKY*5PswAWxwhKoi_ZdLJ6gKV|&j zYqbi;L?_~5^4g6*nHCZ0j^fKlW%FprLx^#{uCR=ymdLuKRe&gaOcZZgxhz%YoGbef zoD2r2t94v`gn1?dsxr`9j#Gt+|6Tx5gLGQQ+yEUZR;PRV_z)hb>g|&J@=Mx_megf$ zO(y>%UQ?(>qpNmInnTU{@-6ZvGkNL7Xwt)s2lW*agDlz#>%vyOIT^sjhvT^~#5+T) z>_|&hyd-#H2xeYY6d9K~k-a>Q9jUFhXs%CkpI09*LDe` z2Jm+|C^rzUb&-m*JvI6Y@z5*v-DCIlTq5LesO$U_d>0}4txd3>YIycEhMEMo^>rX`|aIuxemI%Bt*D`mN zIP^Rvh($9|2yBKt4i}@#Z`=febT@eqr_TfK@xnT zEDwmcOxD+g4oG{X8O$vOB=F)B7wiBWxdYkjT9<+Rapbh-J>;0cgT@&;XsbXbbMx!U zP3cBk>m_JK*)(C^caT@3rZVb3BTuRn=~;x4~Y}#30Umw1MDRICtsAc{TVo z;Wl#Q82@Ne;}%^^>HTK+vOxXQAl|0|w|Db0mTRuJHJYo4?Os>KC9KLQV87DLqDEYw zsATBmOl~WGTPzY2ogUFx9D}-#*Xm3;kue<68ItqoFOk45`U|1Mdse@Li@<`swk;qQ zCi5FRI!Dtbh2}rEx$bm0cK2xZlodD%nb62zf8mle{xjP4xUY*Rr#H1+z!N$Vsp;i5 zwAgICkwKqmJ-Q*omdSjl?f}SJnwr@yETNwCY6?$dww*%GeBUS96RPK`Y~1qINjxv@IXN+^`4fyYYQ}Wzx1^7B`=TgM(lZUY zJZ2V-qiip?k1nT?8i7|U%co0Ei&a|nWLv^O*>zi;C3jq^vU}*GD>Xr#gt^d;Ke!0Z zTh<yP3`X0?^(mBzvfC}1udm7_uvOT;%|HWqZ9ET<_rBezZhzlGHKCM3gWUh z%&ndKHsRGqn&$vox_Mi-zZqhYUU2YKg4+WQSLyQny|uOe12IO)qBB$j8SeFCNFI;y z`ox*8B@0`#N&muxKmq=y$v3~Czsi@PuUf~kxjuI03|AVn0>rO?5rh3&pzA>=jHV-@D)%;Nd_w{iWR*Usor zzzmJ`faJOIHT)ui|Gz-#BTwT@quOFxY zk;I}*qlmo4+_d(ky-1y zkabm#5GNY3-`%OvE6s4q^FGg2%a??BP5MJ^X^QELR5dNKxGC%QB##|sz4%8Tum{A1@H?~Gw$6&DX$ANNl~6}kI;S7vB3*J+jvqUFHad4*j@tv}H&gE2 z==-aEw<`|ri(@BNQ(sg)=rS@&C~L_8H3Dh{jQWxIq=ERMwVHcMgqVe?Fpp_lp^fw- zE^oW1#|h_2h^J@Isq$Y1E>M*BxJbjYFUSp8Xc&pGE7#B{Af-g9>dA4>wx8u0d#!2I zv3^|wO77z$Hrene^}Zb3f}r373e5*%-#5MXAEtUB*M8V8KqVIgzSQ8ZYYk((y$I{& z^T530I?acoPc%oZdILxe-T>Js>*b=L%Uh%a<}LFXu9t5z?EfR!WWtxt`oiUl%8lng z7|B#W)xpDr1$l@y7~{swzy?o#XxK|*2AydpqFhu?EA{x4iS`u zWTPogAjByaYf31JXtx@oQN)lJ_6Gn>u6OE6s@>BMF#S)=Aou*$C+~xYWrRoG@{GVt zShH5wJ`~G1EOwftvm5EwZ7k-`Z%nl+yM8i4tG(6p-3SAcN`=BZI00Y+=G^ZkHH|!a z{L!6eKt3QjQm*a(z7|W<4GndLmO?!Dz5SPrx}SulEqC%aXb@Ur?_V)mg8ku=q|8K$ zzeK<9b8Re&?>dtTMM3gJB~msc)#|w9Be%x0B-$Jg`iGZ|;x#;)A@|S{eka9}oqKz& zhBH-vK$f(-=LL8Tg!Fk0Er?<*%j13mVn&1#F?{WY&zsxYn0h^5gqS3zH&@NQ`8j(52b3QJB$+qKVT#djeW}*e;1^b8|NJ`bqf42 z9$%7~Ex5{#QSD#JwyDo@p^a*Nr!&CUx(c~}Iq(6(LIK5fGBSBJ;CndH-qyN9y1r-p zIirWSZ`Y`NOkbvHwKhoUl1pI@uJF}EE8#cNFK%nr8aLJ-Z}sbHVWDE8{r$rSqA)DZ z^X8hiPen=Tsi&92^x5JMu-C!d(OOV%Ap_N+C%jfR!M~l41p2$p%o9U>?al6BFOn=K zI@p|a%x5gHb>pVUw|=9I%feCe_A}9oy8ryJT!er$iX}cu8Hk&dmG?4NoW1m4H+in< z-;8>F>Qy;Zoel#+6SS(_>!ubO^Y`$D$qOx0o-KYI+Yx@5w57OsKF{OExlncdAZ~Lzo%L_pOyxyev>= zCQq4)KY8en;_fNyvC=ls3hlT5vk#gBK!A*1ds<6&4f}1&n)eDhn@^iPUQw`{E|?4JrRCOmsk*$+P72y&V+LCpq;V`^ws9|sgjju z*=UP^Qha=UQcw?=YzR&Q0lP0s00rC^@*=!Wn(#HzoZ z=_Pzs?-?Lnk-fJ=J{q#s+$l^5etTQw&@B-am!aC3ixa*{6v>H?Z^P;irkP>)7Y(mi zmkJ!h=F6JUL7vFt7Q5M#gW1im1b#X1)c68ps=1-zBbYrJ`F{r#ef`_>W~`?j&t zg03y<5B|aGvv8Y1`=Kbnze6kpZtz2XYM%VWT6jYEuRTRX`S-x||8ed7|Db4=n^fYN zDjaiMbl#+SnR@MOA-@9=-&|q|FLoG1nC9H9Ds^so&nL!t(L3O*oC&)aeS@2%1pKsY z=ZzP9v{@o*TV{vsnRfguUgnFBZ|1A_nxK?rLXd~+{^R5G^+98Yq@RYYy4rHy40T z`JD8LLdgiB#XOrWX9hj)0n=?WlMi0g23u7J&Yj>lOb!b;V$hx=1!Qp^>jEU4d%{Te z?Vhsl+Q39_7Has*3A*60=Vhl8%UpAUQw{>ha4I!>Npvo#ETzP=u!#JE_GlQcE{pEb z?BmhD#vt)qVw4?HdJ|$e_cD=DSFJh$FHu1QGD@4uFccEL*^pH^y3KYuuD?7eC=@zD zoBQ2IW9I{QY(1k);T@XwEKw_bn!K9X6tJmUA5A1AJOQEOU4ciJ*#>`XYD*o<9gGU= zh{T_`J3I5XUb#x(rZ}tj`yhoT`dr~jh|7DnUKA7sKzBaQbi=z(% zlI89d5Zs~E2(fKWTYTh0=>I(S4ue% zjgE#}u=J=PTCc?vX;}0|AUcgF+$lj{6W2OKdj~8@)UQ7=Nw=w2 z*_}@Og;>cx)aeOlrmv`F(O9qbIn;^nEu1;odicT7`eOmtHAG2aYF+wC^8+^>hElKZ z*Zufw?aaKdKT&$);^RCW!NlRlW7|S@;*>1ttreJIU4k(I^LPp^kztcpW~JL%+op-J z$T2Rzx?tq@KG5P2{d>!m9TQuC74@1wu{n~2dX7TAYs!ar=+HUn9oFI9-at*yf?zFr zT1hR{Z=wqz%p2n#$paw=G5)8iQ&nxT*iG2m2J)i1hNprNWQ^OkXLP{H7tC}N&g${1 z*7|ovi+{QuLei@g{2;@!B`@!L`4y#2F)eL9_PpCu&q@Qdt2DWV#e}MkGrva{lpO&t ziQ}fWbL{F20cPh$lI>{^)&7oGcw9=ov?|)+d4HUb&+fHK!XH07k7=JC;q?eg_n@HN zX(0Lhi%@HV)8pTHMjh!?B~z8aOc0YE)|M|H5h&;9m%(`o^L5--?alY_P4zJit{9y= zda^hoa{HkyTmI{HS7||x8Ptj?Z8V&Ut^`tk+dOgZggUOh;WI&+K-Q{7L_I8=Q?%<` zX2yhat@|c3T{2Mr=^N?Jd4pj7#bRjz(5eq{uZ|cOnq&@X+S6XHXz$0? z%db-rCHW9!;C63%Iret_rrwsQ>zr~@dWIf3xz;?;!q*U;<_0Xh9LN@ifH3Q39r!Qm z;A&7O_%`6to{3j9a5I>xAHD2u(Gr2@YOQIoU|qECxFrA0OE`)%w%~sAKks{$tWT?W z$!>DPl5209t0XcR+pmx1-Lv-Js-R$$a0~-bp&}jwU2W)D#bCC)^<3V){$0|K{NK8* z)(czh%QJSN@~bSf@~ecsN8~gjxCcxX+e`wxVunRY=B?7p#r%!2qCs^O?dS@Rs|R)y zb;H-e^TvNf-ks;!avZ(*f{8L)Tp7dPcWV>PcjIxp;wUeyaZ{MvK1a`A@+E4QTn}@? z?kCpd?;VENm0%c{(pHi}vvHI(1*jt4Ok zV6x2N9d9(W03^anL%?!Axfb}I834XAywipR8|E_n_d-P2_$odh=6OMB=JU*e-Ttcl zUzZasSLxWa%{zRtWG6nNz}9)c^LQV zD5q~)EGD9`)A@B{3+tQZzYG)b%7ycz$8W~MT@U6(zY>^{avqxC_L^48Z*&(JxbNI% z;h`NfC&s!cc!toVQeBjyzQufWaIQ3Oei7_Qit{lY?PKufOavPC@Pt6ANf;j*{1xZGW`@UsV>Y_SATk^Z}-}n6uqB*^&A7_X*!Vg zl4HVI0NK*vLMJ;_eQiO%axl2e)`0t{?(CyRQ-rbIpmO$cw(uJb$G|c{(HRO~d{ZB& zzdu7dy-3=ieOO%n?#6-fO+PRSmJLSDE%e9U3a?V#2?w9T!7`QiM z1$ABPpcaWCoW>j5zZyoC!^>y?t5N#*f@g9TP;G(Ilvo9K{54~ z8H!hw*`8`fyFpp4_7$}ouIw$F>xcE-pm}PFMrd41p=^j`f>;yFr7RTI^lw6>n?fs$ zx=qU^J5>UV<}2Q3*huz1GS7~ZXyCAaXxr|xvYLflx(+yt3JSk)(b!j>Q?-cTdC6l# z3OJS)_NmMDcqOW_0Qgh&V!er{B(7WE-rV~qW_M$G{Ha{oCI8Uprv?_WNI`0vgL;ok z+f%&)&RRrMq+SA4uhO+&c+VwE@%fy1M`LZv;sdw_FN!xkH+3th5$!Gi4ZNC5xE8)z z%|)m?d8c^~_|2cvbWx_2iC zyW#37I_hNYLWZ?3wme2>-j$B)OyzY&-1@oOM`i7mcX2H4XyK4J+xV1c8(+tV=+!(< z=9%GPe^AAT)r<655c%aJoz;~%4Wml>aDhzggd!n|my_VWa#_QGC{~AY;2PzLEOe-E z$u5?kv%HsM{`|VKidbcpNzf?SF#7gUn+R_~kS-9K;xGJrAi&Pbk#w5c1<5l__n1Lc z$LDxtoaXp!G<+O-Q+70vHqCH`wE`=g$#$PE&>31Q5pRH@t(!L=Rq|_i&HM@iLJc4# za&?Dz#{wn83fDGoLA=|VWsbaPiqn(jt%`=!euanYo$?h0Pu+g4+;(@-VC|mOFqf5E z|4Q1LE|v%mlknfszb3RdY-XSMdRzNJ9+pce*IFTXF6;$Fo<*!TAI+J+v0ytGD$P57 zeDpKSh9nImW>y2PBd(5cvT^b}nuuD7|26v8mi@gtsrAbrdyCs6zg0aUG>b0uekT>eO^y%7fFMyRa@=706g1LBDx^tz;B1v+i9%^R;{|$!=j<5 z@_=I#Doec^)W^?s{GV~d&cawupb2j;_DHdUE%T1ooAG*Of7aW4^Ppc)dpgBtLqEzT zhUaop`K>n(&rLew@>tX1C{3X?y$qkK5;rw?+*adWPHVmJC_{h$NZuoAC!j~-`AdfR50*h$=8|NTWZiXW2U zZm6{jk|L9J4X`MQB#m;d(M%a5y%pD#R|1Uj39r$H5St*q(b8NS!>{LTcWzi5Ssg_F zubA)ugATZcUi%LyI~-Vw{ZOZX>4X2%;9dBC?cL=6v&OJIY9Ip+vN%9NO{mQu&P@Dl z-$Oj}=78lSAFmC49+~E|d0wzR+pX=DQsr!BG4xvXwXptW$$b~g0k|${O?*TK%P^iS zD!GwfVU!wiN?2b^=krp^QgC#06FS6j3G*uj(FE`<1&QRDRUnKW3@B&MJZL)SpMI%} zQk!vGErEY?Oyl12db2UMyZy(Ev^Wqw1TRs~fSBI7rTiDtFhWK6 zRmIC;Kihd#1J~Uh$9!uumu($VqK6l2YE8OXuDQ2o_Eb#w5t{MsalGm7bioTNJTD-G z<}Zvwav>K4*a4*sFuR7EkgAg1&ZM_qdMH2azd^Q^3PC_b5SpKAf=LQ5s)pM*FOS`s z&=?Yp=_9w>8rYg4q@k~kec~Z$iA*5-l%HuIC0?}Z&|igy#O zK2{T9gb0sl#%8_nK>b6^K*O}UO zJJ;*NHe9it|9%V1IcFTNj2v7czjQZQBkcB{dBNznC=NY^*E|X?Q$35|_$#^k1#5;) z`j~cY7M5k?{^9nm0i5K&7X~#|?#y6p?vhq+<_`ER7UUx|uVMl9kAH5W8E>`!)_A5& zVLK#mchLzy-SSTbkwR!knU6qwL>qEeGWJLM=!_O*x8oTqfgJu7e1+hGOVs2fmlk{C zEbXX-9_yrL&8*Nn=B4sHby17AGhBS`r7j&8e`1ZY>xqsgz7GBxEE1G7tP+3CyzP!C zuW9l1$q#<*=Ov{FTpV7yy@v_yJL*=;&N_VN3F5?!&wm>K2yYTl$(e7!#FlV(!UEtp zr85xD9I3bt2Ojz@+JkY0o#gmG2QeD50`Z<0X;S-o#*WqvR1seHLX;TE&x^7!G=86u z3H!aB+_le5KD^`E<&SYa%~T5DWV=p1D?}?tgEH{^w zV-Zq{?IIiMk7Nzw_1SOF33m5OPjvV;9NbEOXPR@|COQ0;`vtRdbW`6Y2v7QsW{^>s z1N$zlV-jawi)l@L4xx{=lw5bGVMYx!Vq- zY#Ywctci9@vQh}0psUwtGQea{ZQ9{w&D35=!_A}F+fdxJl5XnQTb{OYM){gG@)oJ7 z!B(v)RH{gJw}MJI)}zLVLGse~P&Q@8z7Uz#DH(@YE%iU!D&erbQeaJ0d?55IByi`4 z4Hc;2uG~4#2fK!u5ViIQyJsXoxkupghb1}~QA+cPT(ynl?uSBGRRi3OZ%u!D_U{Gt z0n;bd-)tgP`lQKSu~dAf+qLA#7xsVopn2sg&=UI)+kuEYtTO!P=R$QKqp42?YDqj3 zC%g&2+Z&GDd(Inxk_u}MwB$liveI(Nvd<4O{yA7F zGT|hd_wztG?}IGg`}so`_f|nyQ9Wi9ZiKedZJ#C!WfKN-4nbvJTkMf(O{Aj8sZDxX zWL`ns57Ln=rexBa$9mizX&0LLUwb(CI$eRrLx#knseV1v1yWQC(m69QjmbGkKp2%Q z{-lfJDPhN-#_iZkZ?js>$zAo~d7a|oq-tw!FS}{Q9Qx5bKLirx7@a5fBtuoZidRL? zbUgZCf8DquFg{g}S>h~N24$Vjfr6{I)amAN7Z?xt4i2xuBIMyp6ST)G^ReptDQ4NyRISy-?t#=h2$C8u$7rXrg%*1=DSz#0g@iOSt>$ zR?KeO-~`)aEX84F1vU#Rx0|&RE(xaFRdC`PBdHS)$UDhL4!U6 zE?U-O&#Y5HqQ7jZe@<9*XhGG7`}x}2mzJ@z?z`!kqc&Uh`;GrzxNjH(uFXm$td=_5 zpg%$m;<>5WpO$D3C_^C{D>smGKk1xb3c7R~Yw!`aaG!gPaMxy~39D9y0$WLlsn~Bi*ODs4qSOOk)TA z2=qzS*MH=E*l@D*eR_uGN8vh-r=}4>AHr)zfiWjAOFj9Dmubyeo);o}%u!c*)3&tT z72}ygZ8A*XFYNBt^o4Olo!q;`#Qbb6-w>pT2{?}I&E_!M8Lr17|6V|Be(2IBNPYP& zYJ79RZxbS4EK(%2JD*zZWhOcK5~X;3aA4fi{`j!bZfpXf4iu3vfLs?(a3kEI+N>4! z!RrZ;Im!vZh5xr#TbNgY_j|=>#x^gT@XXlId#!1sD!TeHJF zc64&N77Uep9~O)!$rS^7B|AnlC`9qW_ioiQkAeXo+g~W0oNxWS zPHuF!6Muj?p`A$uBZ@Jws&8lDWGFBs!uUI9MIlliLhbs9`hNslSn|@ zJ)u8-KojTBC#N%P8aw7pzeNuvfwD;{(Kmd-EW|dM$C*Gtjd7Jzrd?VRz6R~aP(`;>@V8a^eE`AfGCCjB7Y_7_XIAv@ zMmBI*Pl#7D#kpf19l1|4LBW)GOKKJIxu1)Rlq%9*Fx3}%ODJ4lyWsq@W)$lKGz~S2 z<`#eZV)al`(w0+Eyja!mMkbh8C`wtZZ^;ZhDzeTMRAsW>MG{q+EJ#$9v{V0;OuK|V z{|wZXR3YWPFtT^YO1<0ODAC}r!T)4#pJg}@PTl3&}BK2K z?hwfKg;X6NTbdVGtrim8Mj5EJUDjPd9duzv1B~g+LJCcnTx9zLjj!~Z2WQ{#kON*D z4F8m0K{6$8y*;`4gD22IpUZ+Hf542xRw}^KQp;g(0DN0Q+y2+|2urqbzX&2zIqB_3 z+X2fL8XUUH1C`?^3r2vwa(}6=JqOzQ)3*SyLB9{7c>rIN5gwFj+}SJocjR@lVIRK< zF%fn0L6hgF1*_fCPbD9{P9AUU=>28Y&5XdzkEdDp5=ta`k$yt`O=%AY<#xllzhf=# z6~`HyI_?_>SjS^P(1BC5n*XFr{*Usb-gM%yh^q{LpBpvSY($hp#%vHGJr^GDJ+-uw z`+Q*qVL{>-Jl3H;1ft|#k!Si?-u-*wDiV0^pj3Bw@$(PHQLN?e$q3^=^ZmHHIV2xn zXP4wa?r+TedK&~sq9*%5wPLM?y+a0xVs%r+=~1+l(3ILhp`z;4v0uXdts`-RrL)#@ zkuU=Z(;Awzl%g`DuWgI8!VYX{=UhIM9NtsNLLUN=O_O5_`RSqnr=eqYOH(R0OwfX? zMpN`ec6EEggaUc(+c_~VJW^QNN3=urVC=;lT_NEY{|Spy7U}kJi^vW%c?V!_rC1c7 zoB!!7Qj>sA;iCN|tj$D6#R#5EJ!QQQEKHht<5@mJDkrlPGqC=9pMz{dys01~YxuR} z4f3^aTq2;ayQ%1K3H+gyT$&I13cj}Txx=k=o6_;H6*kq-ko4@mO;ij;2<=gA7g_C) zW;%q>9P(`|;Ql%NX8>ceGv#~$@y{#XJulQ)=TdpB3*(loE0nWPKYjR5KExdB`mIG2 z@Nowmxi!&La{C&=EOqM1ahYm%xY!@#(z)H{^LGxU(=B?1*3%Lzh*E%+<$uLD zXS~2-*!vDFM`!u>!nYt&_&HEmaQ}N@Yu@9+-v9j!Fc3RU&U<-nu#hv{J2?T#M^WxR zH(5Q{?Shd;FCn<|rD>tKMJi!8XhxaID=X-qt;~4uyUn4Y!OqSb{nvv$<0k^1RcIH0 z7AD8JU_bKn>TA{^JII8oiFPdr^I`qoPF|b_7h;B_U5m#u-IdJ^DAbb z20Qz*usxM>93ybNf_bE`YkRSeVR<4|dn<1j*Vbw{AHO+o^p~CYKK>g3suXu!QLO!?KZnx+swOxZSsM z!t%>x@Z0gFEY6pJ8~2$15Hrl z7Ozqfc(NbFQcLgQ%LKdSc=J&crl;)M#sMDU4t2&egzUlpDkaa0!ry>+R}gIH2?3z1 zR5+Zk+r*OEM-ole;Ftcr8TmWLSbPsPURibPaoC3TFrPvDvnO@~L#C(@n*4iW6~ou3 z3MBU_%m)adEm!H#AQ3r!~M3^Yg}M5@23}>Vx*!F~~*m7mGyNEre&KRt1%hlsL7XmFsx>*4+G~Hc9+5xuLOs zwbOrEuAjKUUV-NQz?_rBIl&Q+Z(K&hDXrjd~17PAug})wb*WT$vUY|iQW~mVp z1MKW4HEud%madcPUv&>E&s}(OAt5IE+G_2KBaU9P0>_^5NYGv+L_zXNZK9N-l*XQ- z1q(COz-9@(mz(OHt=bN$@Gpw8AH5m0+h{)3P*+#59H`=Ok;Xv<13gd<6$j{)vZ-C< zCb%1E^Xt)_aLzW#GOCGbU1M90syA;Rqz<3?%!I%Fm!W(=lYXl(cY4~jpYk_O)XB;s zL%veA?0Yr40|!jzithbAiUwvFH6!Doa&0}=ef7m2O$Fx?U^3z*M3kJoDxRVah{#aDZ)nqyo5|FcL=&duHNK zN(v;{%efCt-fsLrUoD?kvKxpPFTL7S7cyop_rJXkG#uBT=LP&1o7b zMIR0d!F@o0$wyxuIM%0t_&XdhffjV&hBLjC5zg!+IbVFJIp>mM?kC^1nJk6QxM)~S zlI1?qNMp&^^hxw+S~TZ)%B9a`aBji@S*$MSK0*n@%Nnm-A5A$b_nS1{KxIzg#3urc z5^!8x2U^GBWN+`(#tJy@c$IoYnK{;{=2FJmw20n-znz$wTVj9)R8_ZV!5%HW0HWM_ z`~AqS?N-g3_wHVT=1EIIoWUY5ioHz1f)T6C{6xCkU=7aALZJ`h;n(#YIgpDsPOd}u zTiN?$s47ZS^=m&w9@eIeY1oC#T8(Vyh1Li8@BUh_F9`RUfPeU}>ZLFVTnkW!y*H@= zZ>5k-mfH`geAX@0ps>q$fu?}CWh>%X!@U&q$4nI;V;rR9oV~UW-%<_Pe3>P2oghow z(}ePt@0M}CW=?r%?m_mz&+{Ac9v&xkxKJ+T_n0RtNp|;YYsdD;v7u|>u`7HEg^a*o zUQ-JECYb@A+sjT>Th~;hwssYW7+mU|*D&zBoY_*4U;4F5`bS_>bZ{8vRth7=>#P4E z4Ra40yT-Gw=uXUVZ{v_iUqbL}qlMMXFuG_(4hG-DrD1d+*0;IB%;-~vsAT9cRCo^c z{nyg{&EtIPy)&(Os+;YUqIaz3MM`=DZ&387nsMn*SznE;ElH#!;})pK0ww6d{K#6-wwmqPYS^bIG?;AnXp=Bt<%>EWC;GDr;z1|%AH{_qwh36 zrD*wbNMd}_j<4UaB-rDCGiHC~_=C8CEHElA+dQ&{6Z6E$aj?}KLaJ@!3L&e_tj5hxUT zVCrU{<{_gdZI`>_wscTrc+3WrP((XhTx{)&+UR@_1(Zsd1C!XaZ_n9iHgUJ4 zV!W85jnWBzYPwj({UW4XJ8#DdUtHHV>H#mJG9z(Di9{) z8hQl}#=SJO$KXMoCk;-gGE%gMn8k`Z_MT(tE&Vr!g&OKEf~iwGWKpI~l{YIld#oUj zt$D)qyjg@H)PxtWx0+0Qh^zB?!lPXM#>*r5`W=r_GG*$;C*Z-;kkFkHYr0jCy`7=i zc_#fKkVdgc#>E1LN{1SJdu1QVkOdxUObr4C(~*C&l8g;6Zd*s@kLv}P>bvwW4>>2T z-s)YHx#flXhqM@f<*Vfo_}V7!^R&|K?Z?2U=}=o9*yKij)7}dx>=&|?9^Bk)j_}3d_u#MK zKQ5uNoIRp(jjdBMl2RxZBrQPil>58Tl#uq+CSI&=8vpoqoKw^-O0hPfC1apg+u^9B;p1#*vf{`%j*M#c!8UXic;&`C_G9Rl1JbR$h zk;A`a|M&Rz%%hp(N9P3^jJtPv+jMk)Ah2j(bp4_JEe@Vx7b^#9;VM&H})JvFLMEkd;T+H_)#yO$AR4= zn&=RLP$xT(bfd=nu{Or<)n!?07N1?_?S8Y1`rcCFobY39aKmfy3iEaXqsK<((FpoVp@ux&t=z^S$?`B3#We9`tRa5UX}!y5LWTcP)kQz^>