diff --git a/data/2023-03-13-emacs/emacs-packages.json b/data/2023-03-13-emacs/emacs-packages.json new file mode 100644 index 0000000..afd1b90 --- /dev/null +++ b/data/2023-03-13-emacs/emacs-packages.json @@ -0,0 +1,78 @@ +[ +{"name":"org-journal-tags","hours":45.80413027777777}, +{"name":"Unknown Project","hours":30.883538055555544}, +{"name":"elfeed-summary","hours":24.781949999999995}, +{"name":"lyrics-fetcher","hours":19.423725}, +{"name":"reverso","hours":16.14068888888889}, +{"name":"pomm","hours":15.724073888888888}, +{"name":"elfeed_sync","hours":10.33835}, +{"name":"perspective-exwm","hours":7.68676111111111}, +{"name":"ivy-pass","hours":4.8407888888888895}, +{"name":"exwm-modeline","hours":4.785227777777777}, +{"name":"elfeed","hours":1.9590416666666668}, +{"name":"elfeed-recommender","hours":1.606401111111111}, +{"name":"avy-dired","hours":1.5198916666666664}, +{"name":"sqrtminusone.xyz","hours":1.4861027777777778}, +{"name":"copilot","hours":1.393622222222222}, +{"name":"SEM10_DataP","hours":1.3383138888888888}, +{"name":"org-mode","hours":1.285122222222222}, +{"name":"emms","hours":1.2402194444444448}, +{"name":"digital-trajectories-backend","hours":0.817338888888889}, +{"name":"SEM11_SD","hours":0.6001722222222221}, +{"name":"dank-mode","hours":0.5951249999999999}, +{"name":"org-roam","hours":0.5180888888888888}, +{"name":"sqrtminusone.github.io","hours":0.4424444444444445}, +{"name":"eshell-info-banner","hours":0.3441305555555555}, +{"name":"org-ref","hours":0.3417222222222222}, +{"name":"org","hours":0.33160555555555554}, +{"name":"org-contrib","hours":0.2974138888888889}, +{"name":"perspective-el","hours":0.291275}, +{"name":"wakatime-mode","hours":0.2859333333333333}, +{"name":"exwm","hours":0.2593944444444445}, +{"name":"elcord","hours":0.25727777777777777}, +{"name":"general","hours":0.2553944444444444}, +{"name":"digital-trajectories-frontend","hours":0.25507222222222226}, +{"name":"flycheck-mix-alphabets","hours":0.1779611111111111}, +{"name":"evil-collection","hours":0.17116388888888892}, +{"name":"lispy","hours":0.16847222222222222}, +{"name":"devdocs","hours":0.16563333333333333}, +{"name":"mmm-mode","hours":0.14494444444444443}, +{"name":"posframe","hours":0.13803333333333334}, +{"name":"ytel","hours":0.13270833333333334}, +{"name":"melpa","hours":0.11238055555555555}, +{"name":"tldr","hours":0.11088888888888888}, +{"name":"org-journal","hours":0.10692777777777777}, +{"name":"deft","hours":0.09949999999999999}, +{"name":"org-transclusion","hours":0.08256666666666668}, +{"name":"transient","hours":0.08187777777777777}, +{"name":"treemacs","hours":0.08161666666666667}, +{"name":"lsp-treemacs","hours":0.07749722222222223}, +{"name":"web-mode","hours":0.07611666666666667}, +{"name":"dap-mode","hours":0.070775}, +{"name":"themes","hours":0.06796666666666668}, +{"name":"Emacs-langtool","hours":0.06696388888888888}, +{"name":"projectile","hours":0.0635}, +{"name":"doom-modeline","hours":0.06344999999999999}, +{"name":"package-build","hours":0.06199444444444445}, +{"name":"emacs-which-key","hours":0.06048055555555555}, +{"name":"jest-test-mode","hours":0.05506944444444444}, +{"name":"gazprom-classes-frontend","hours":0.04866388888888889}, +{"name":"digital-schedule-backend","hours":0.04549166666666667}, +{"name":"company-mode","hours":0.04083888888888889}, +{"name":"emacs-jupyter","hours":0.03719166666666666}, +{"name":"swiper","hours":0.03139444444444444}, +{"name":"org-habit-stats","hours":0.028275}, +{"name":"SEM9_AMOS","hours":0.016411111111111112}, +{"name":"elfeed-org","hours":0.014444444444444446}, +{"name":"org-agenda-conflict","hours":0.013563888888888887}, +{"name":"org-ql","hours":0.013541666666666667}, +{"name":"test","hours":0.013236111111111112}, +{"name":"alert","hours":0.012311111111111111}, +{"name":"prodigy","hours":0.0079}, +{"name":"lsp-mode","hours":0.007405555555555556}, +{"name":"google-translate","hours":0.007016666666666668}, +{"name":"err","hours":0.005344444444444444}, +{"name":"testing","hours":0.004497222222222223}, +{"name":"dired-plus","hours":0.003427777777777778}, +{"name":"magit","hours":0.0} +] \ No newline at end of file diff --git a/data/2023-03-13-emacs/emacs-related-time-per-month.json b/data/2023-03-13-emacs/emacs-related-time-per-month.json new file mode 100644 index 0000000..4a8190c --- /dev/null +++ b/data/2023-03-13-emacs/emacs-related-time-per-month.json @@ -0,0 +1,33 @@ +[ +{"period":"2020-10-01T00:00:00Z","misc_hours":21.499994166666667,"other_code_hours":45.492286944444444,"config_hours":16.605819444444446,"orgmode_hours":7.039610277777778,"package_hours":0.4319083333333334,"sqrt_hours":0.0}, +{"period":"2020-11-01T00:00:00Z","misc_hours":7.922545277777687,"other_code_hours":130.25115500000007,"config_hours":12.954636111111114,"orgmode_hours":8.673049444444446,"package_hours":0.6693083333333334,"sqrt_hours":0.0}, +{"period":"2020-12-01T00:00:00Z","misc_hours":44.62867111111112,"other_code_hours":172.2617105555556,"config_hours":7.404536111111111,"orgmode_hours":5.94598888888889,"package_hours":0.016411111111111112,"sqrt_hours":0.0}, +{"period":"2021-01-01T00:00:00Z","misc_hours":40.97078361111109,"other_code_hours":108.33508166666668,"config_hours":6.398185833333335,"orgmode_hours":1.7350899999999998,"package_hours":0.0,"sqrt_hours":0.0}, +{"period":"2021-02-01T00:00:00Z","misc_hours":23.105469444444452,"other_code_hours":103.90097305555558,"config_hours":9.639255277777778,"orgmode_hours":6.35959,"package_hours":0.1454027777777778,"sqrt_hours":9.579580555555557}, +{"period":"2021-03-01T00:00:00Z","misc_hours":85.43768361111111,"other_code_hours":70.83901499999999,"config_hours":5.351164444444444,"orgmode_hours":3.7601916666666666,"package_hours":0.050147222222222225,"sqrt_hours":0.0}, +{"period":"2021-04-01T00:00:00Z","misc_hours":39.610666111111044,"other_code_hours":125.15684861111119,"config_hours":17.82253972222222,"orgmode_hours":5.481723333333335,"package_hours":0.0683388888888889,"sqrt_hours":9.427069444444443}, +{"period":"2021-05-01T00:00:00Z","misc_hours":57.33526833333332,"other_code_hours":113.36815361111115,"config_hours":20.12919444444444,"orgmode_hours":9.530327777777776,"package_hours":3.1570388888888887,"sqrt_hours":0.85215}, +{"period":"2021-06-01T00:00:00Z","misc_hours":19.274042777777794,"other_code_hours":126.66362527777778,"config_hours":6.006847222222222,"orgmode_hours":1.051963888888889,"package_hours":0.0,"sqrt_hours":0.0}, +{"period":"2021-07-01T00:00:00Z","misc_hours":81.67501916666666,"other_code_hours":51.52624416666663,"config_hours":22.17445277777778,"orgmode_hours":12.676333333333334,"package_hours":0.6769444444444445,"sqrt_hours":0.0}, +{"period":"2021-08-01T00:00:00Z","misc_hours":61.93839333333341,"other_code_hours":130.07233138888884,"config_hours":11.854841666666667,"orgmode_hours":11.899877777777776,"package_hours":17.619797222222225,"sqrt_hours":2.2672416666666666}, +{"period":"2021-09-01T00:00:00Z","misc_hours":71.1573447222222,"other_code_hours":120.12417027777782,"config_hours":9.464760000000004,"orgmode_hours":12.50451666666667,"package_hours":0.01851111111111111,"sqrt_hours":6.370205555555555}, +{"period":"2021-10-01T00:00:00Z","misc_hours":81.92015388888885,"other_code_hours":116.64286166666663,"config_hours":11.370164166666664,"orgmode_hours":7.676310277777775,"package_hours":0.29834166666666667,"sqrt_hours":2.6114666666666664}, +{"period":"2021-11-01T00:00:00Z","misc_hours":54.09148222222214,"other_code_hours":83.06970250000002,"config_hours":26.667271388888892,"orgmode_hours":17.463530277777775,"package_hours":12.023868333333331,"sqrt_hours":2.957238888888889}, +{"period":"2021-12-01T00:00:00Z","misc_hours":73.14686083333333,"other_code_hours":98.72174722222223,"config_hours":18.940516666666674,"orgmode_hours":9.036408333333334,"package_hours":8.266713888888889,"sqrt_hours":2.5470305555555557}, +{"period":"2022-01-01T00:00:00Z","misc_hours":78.7037844444445,"other_code_hours":90.03770083333329,"config_hours":9.120791666666667,"orgmode_hours":12.36731388888889,"package_hours":20.481719166666664,"sqrt_hours":5.263049999999999}, +{"period":"2022-02-01T00:00:00Z","misc_hours":65.48075472222229,"other_code_hours":59.16844611111107,"config_hours":6.861180555555555,"orgmode_hours":11.32403333333334,"package_hours":22.03164722222222,"sqrt_hours":3.680427777777778}, +{"period":"2022-03-01T00:00:00Z","misc_hours":59.85770472222208,"other_code_hours":101.48262166666677,"config_hours":3.2610216666666663,"orgmode_hours":7.583500000000001,"package_hours":18.58566944444444,"sqrt_hours":0.11891944444444444}, +{"period":"2022-04-01T00:00:00Z","misc_hours":68.30733527777787,"other_code_hours":112.87104388888886,"config_hours":7.927665277777777,"orgmode_hours":7.156380555555556,"package_hours":6.058352777777777,"sqrt_hours":0.0}, +{"period":"2022-05-01T00:00:00Z","misc_hours":72.09807583333335,"other_code_hours":109.0747988888889,"config_hours":2.0066166666666665,"orgmode_hours":4.990799999999998,"package_hours":12.661681666666665,"sqrt_hours":5.370564722222222}, +{"period":"2022-06-01T00:00:00Z","misc_hours":79.17945000000002,"other_code_hours":99.92501694444441,"config_hours":2.295294722222222,"orgmode_hours":4.66531138888889,"package_hours":1.937625,"sqrt_hours":4.099763888888889}, +{"period":"2022-07-01T00:00:00Z","misc_hours":100.25373388888889,"other_code_hours":80.96754916666667,"config_hours":7.048831944444444,"orgmode_hours":6.63810111111111,"package_hours":8.259250000000002,"sqrt_hours":0.30644166666666667}, +{"period":"2022-08-01T00:00:00Z","misc_hours":51.45677333333333,"other_code_hours":42.76726638888889,"config_hours":5.659562777777778,"orgmode_hours":33.62366111111111,"package_hours":25.84174444444444,"sqrt_hours":0.007108333333333333}, +{"period":"2022-09-01T00:00:00Z","misc_hours":93.71000527777774,"other_code_hours":59.957424166666726,"config_hours":2.910955555555555,"orgmode_hours":20.163738888888883,"package_hours":0.0,"sqrt_hours":5.0835}, +{"period":"2022-10-01T00:00:00Z","misc_hours":100.06510222222227,"other_code_hours":75.89180972222216,"config_hours":1.3981391666666667,"orgmode_hours":16.778726111111112,"package_hours":0.03719166666666666,"sqrt_hours":0.31931388888888895}, +{"period":"2022-11-01T00:00:00Z","misc_hours":72.92531194444443,"other_code_hours":88.36294638888896,"config_hours":0.3248416666666667,"orgmode_hours":19.864126388888884,"package_hours":0.71435,"sqrt_hours":0.16440277777777776}, +{"period":"2022-12-01T00:00:00Z","misc_hours":90.02505416666664,"other_code_hours":70.48672027777783,"config_hours":3.6556722222222215,"orgmode_hours":24.646485833333337,"package_hours":6.301308333333334,"sqrt_hours":0.0}, +{"period":"2023-01-01T00:00:00Z","misc_hours":81.74121027777785,"other_code_hours":74.15600861111108,"config_hours":8.502313888888889,"orgmode_hours":23.546456388888878,"package_hours":1.2940805555555555,"sqrt_hours":3.091511111111111}, +{"period":"2023-02-01T00:00:00Z","misc_hours":59.22556611111115,"other_code_hours":71.66723777777779,"config_hours":6.266827777777776,"orgmode_hours":21.286059722222213,"package_hours":1.6511055555555558,"sqrt_hours":0.0}, +{"period":"2023-03-01T00:00:00Z","misc_hours":80.38888166666672,"other_code_hours":65.02923749999997,"config_hours":1.528583333333333,"orgmode_hours":56.1532963888889,"package_hours":0.737786111111111,"sqrt_hours":0.027744444444444447}, +{"period":"2023-04-01T00:00:00Z","misc_hours":6.3998452777777715,"other_code_hours":0.0,"config_hours":10.446358333333334,"orgmode_hours":9.446027777777772,"package_hours":0.7153416666666667,"sqrt_hours":15.621758333333334} +] \ No newline at end of file diff --git a/data/2023-03-13-emacs/emacs-screen-time.json b/data/2023-03-13-emacs/emacs-screen-time.json new file mode 100644 index 0000000..021aff2 --- /dev/null +++ b/data/2023-03-13-emacs/emacs-screen-time.json @@ -0,0 +1,33 @@ +[ +{"date_trunc":"2020-10-01T00:00:00Z","percent":0.20421706158872063}, +{"date_trunc":"2020-11-01T00:00:00Z","percent":0.2656396332934231}, +{"date_trunc":"2020-12-01T00:00:00Z","percent":0.328156158373562}, +{"date_trunc":"2021-01-01T00:00:00Z","percent":0.30293494692052564}, +{"date_trunc":"2021-02-01T00:00:00Z","percent":0.29825278394208066}, +{"date_trunc":"2021-03-01T00:00:00Z","percent":0.24318066017980156}, +{"date_trunc":"2021-04-01T00:00:00Z","percent":0.3774396720741769}, +{"date_trunc":"2021-05-01T00:00:00Z","percent":0.2907218886830386}, +{"date_trunc":"2021-06-01T00:00:00Z","percent":0.37853346779023606}, +{"date_trunc":"2021-07-01T00:00:00Z","percent":0.3451648046146705}, +{"date_trunc":"2021-08-01T00:00:00Z","percent":0.5261220707445486}, +{"date_trunc":"2021-09-01T00:00:00Z","percent":0.4095219799672908}, +{"date_trunc":"2021-10-01T00:00:00Z","percent":0.3562719759085607}, +{"date_trunc":"2021-11-01T00:00:00Z","percent":0.3946809530892407}, +{"date_trunc":"2021-12-01T00:00:00Z","percent":0.46327503042546997}, +{"date_trunc":"2022-01-01T00:00:00Z","percent":0.5318326577174478}, +{"date_trunc":"2022-02-01T00:00:00Z","percent":0.4358549401255391}, +{"date_trunc":"2022-03-01T00:00:00Z","percent":0.41948172412528684}, +{"date_trunc":"2022-04-01T00:00:00Z","percent":0.4430246367606649}, +{"date_trunc":"2022-05-01T00:00:00Z","percent":0.39880827117107315}, +{"date_trunc":"2022-06-01T00:00:00Z","percent":0.39962422579568685}, +{"date_trunc":"2022-07-01T00:00:00Z","percent":0.3741313993218909}, +{"date_trunc":"2022-08-01T00:00:00Z","percent":0.5678526580569381}, +{"date_trunc":"2022-09-01T00:00:00Z","percent":0.3912379067398905}, +{"date_trunc":"2022-10-01T00:00:00Z","percent":0.3807843143331747}, +{"date_trunc":"2022-11-01T00:00:00Z","percent":0.36358283951988357}, +{"date_trunc":"2022-12-01T00:00:00Z","percent":0.3664672426322652}, +{"date_trunc":"2023-01-01T00:00:00Z","percent":0.5015832592260838}, +{"date_trunc":"2023-02-01T00:00:00Z","percent":0.48874221007685836}, +{"date_trunc":"2023-03-01T00:00:00Z","percent":0.43940966116785446}, +{"date_trunc":"2023-04-01T00:00:00Z","percent":0.5047683251058214} +] \ No newline at end of file diff --git a/data/2023-03-13-emacs/emacs-vim-switch.json b/data/2023-03-13-emacs/emacs-vim-switch.json new file mode 100644 index 0000000..cd34d8f --- /dev/null +++ b/data/2023-03-13-emacs/emacs-vim-switch.json @@ -0,0 +1,42 @@ +[ +{"period":"2020-10-01T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":4.593828333333334,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-02T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":5.804007777777778,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-03T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":0.7722222222222223,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-04T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":4.997453333333334,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-05T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":3.792777777777778,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-06T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":1.2219444444444443,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-07T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":0.6566666666666666,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-08T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":2.1977777777777776,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-09T00:00:00Z","misc_emacs_hours":1.544538888888889,"emacs_other_code_hours":0.0,"vim_other_code_hours":2.2808333333333333,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-10T00:00:00Z","misc_emacs_hours":2.166045,"emacs_other_code_hours":0.0,"vim_other_code_hours":2.765833333333333,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-11T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":1.522777777777778,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-12T00:00:00Z","misc_emacs_hours":3.373538055555555,"emacs_other_code_hours":0.0,"vim_other_code_hours":2.8524999999999996,"config_hours":1.1968416666666668,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-13T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.0,"vim_other_code_hours":3.1955855555555557,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-14T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.6688305555555559,"vim_other_code_hours":0.07459444444444445,"config_hours":2.822041666666667,"orgmode_hours":0.0,"package_hours":0.06048055555555555}, +{"period":"2020-10-15T00:00:00Z","misc_emacs_hours":1.0370783333333335,"emacs_other_code_hours":4.3661255555555565,"vim_other_code_hours":0.24187555555555554,"config_hours":3.7891083333333335,"orgmode_hours":0.0,"package_hours":0.2898111111111111}, +{"period":"2020-10-16T00:00:00Z","misc_emacs_hours":1.2085813888888888,"emacs_other_code_hours":2.804672222222222,"vim_other_code_hours":0.0020166666666666666,"config_hours":0.4711361111111111,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-10-17T00:00:00Z","misc_emacs_hours":1.5149327777777772,"emacs_other_code_hours":1.431163888888889,"vim_other_code_hours":0.24356111111111112,"config_hours":2.4144055555555557,"orgmode_hours":1.0415694444444443,"package_hours":0.0}, +{"period":"2020-10-18T00:00:00Z","misc_emacs_hours":1.185498611111111,"emacs_other_code_hours":4.190124999999999,"vim_other_code_hours":0.0,"config_hours":0.1758361111111111,"orgmode_hours":0.5317666666666666,"package_hours":0.0}, +{"period":"2020-10-19T00:00:00Z","misc_emacs_hours":1.0136511111111104,"emacs_other_code_hours":2.7192686111111115,"vim_other_code_hours":0.0022222222222222222,"config_hours":0.03091111111111111,"orgmode_hours":0.3985694444444444,"package_hours":0.0}, +{"period":"2020-10-20T00:00:00Z","misc_emacs_hours":1.6019416666666655,"emacs_other_code_hours":1.8278999999999996,"vim_other_code_hours":0.0,"config_hours":0.09761388888888889,"orgmode_hours":1.1227472222222223,"package_hours":0.0}, +{"period":"2020-10-21T00:00:00Z","misc_emacs_hours":0.10150999999999932,"emacs_other_code_hours":4.24669138888889,"vim_other_code_hours":0.014744444444444444,"config_hours":0.4583833333333333,"orgmode_hours":0.1297222222222222,"package_hours":0.0}, +{"period":"2020-10-22T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":5.37636388888889,"vim_other_code_hours":0.05089722222222222,"config_hours":0.024694444444444446,"orgmode_hours":0.21722777777777777,"package_hours":0.0}, +{"period":"2020-10-23T00:00:00Z","misc_emacs_hours":0.40990444444444485,"emacs_other_code_hours":4.576274999999999,"vim_other_code_hours":0.09225833333333333,"config_hours":0.6420833333333333,"orgmode_hours":0.5016444444444444,"package_hours":0.08161666666666667}, +{"period":"2020-10-24T00:00:00Z","misc_emacs_hours":0.07689472222222271,"emacs_other_code_hours":1.2494466666666666,"vim_other_code_hours":0.0061111111111111106,"config_hours":0.4475111111111111,"orgmode_hours":0.8585111111111111,"package_hours":0.0}, +{"period":"2020-10-25T00:00:00Z","misc_emacs_hours":1.3529136111111115,"emacs_other_code_hours":2.2984227777777777,"vim_other_code_hours":0.0,"config_hours":0.22775833333333334,"orgmode_hours":0.03581666666666667,"package_hours":0.0}, +{"period":"2020-10-26T00:00:00Z","misc_emacs_hours":2.2822991666666663,"emacs_other_code_hours":1.8299355555555556,"vim_other_code_hours":0.21062777777777777,"config_hours":0.5299861111111112,"orgmode_hours":0.9724463888888889,"package_hours":0.0}, +{"period":"2020-10-27T00:00:00Z","misc_emacs_hours":2.4492977777777787,"emacs_other_code_hours":1.3149833333333336,"vim_other_code_hours":0.0,"config_hours":1.6067777777777779,"orgmode_hours":0.7547583333333333,"package_hours":0.0}, +{"period":"2020-10-28T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":0.9042833333333333,"vim_other_code_hours":0.08348333333333334,"config_hours":0.7079055555555556,"orgmode_hours":0.14482499999999998,"package_hours":0.0}, +{"period":"2020-10-29T00:00:00Z","misc_emacs_hours":0.328835555555556,"emacs_other_code_hours":3.784140277777778,"vim_other_code_hours":0.15638888888888888,"config_hours":0.4212972222222222,"orgmode_hours":0.07462222222222221,"package_hours":0.0}, +{"period":"2020-10-30T00:00:00Z","misc_emacs_hours":0.27459194444444435,"emacs_other_code_hours":0.07239999999999996,"vim_other_code_hours":0.2136111111111111,"config_hours":0.38052222222222226,"orgmode_hours":0.20900277777777776,"package_hours":0.0}, +{"period":"2020-10-31T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":2.46487,"vim_other_code_hours":0.0,"config_hours":0.16100555555555557,"orgmode_hours":0.04638055555555556,"package_hours":0.0}, +{"period":"2020-11-01T00:00:00Z","misc_emacs_hours":0.609663055555556,"emacs_other_code_hours":5.329877777777778,"vim_other_code_hours":0.0,"config_hours":0.02627777777777778,"orgmode_hours":0.30374999999999996,"package_hours":0.0}, +{"period":"2020-11-02T00:00:00Z","misc_emacs_hours":1.6059166666666673,"emacs_other_code_hours":2.984023055555556,"vim_other_code_hours":0.02325,"config_hours":0.8176666666666665,"orgmode_hours":0.016177777777777777,"package_hours":0.003427777777777778}, +{"period":"2020-11-03T00:00:00Z","misc_emacs_hours":0.3323786111111109,"emacs_other_code_hours":2.076485,"vim_other_code_hours":0.0,"config_hours":0.0,"orgmode_hours":0.44376611111111114,"package_hours":0.0}, +{"period":"2020-11-04T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":5.921964722222222,"vim_other_code_hours":0.0,"config_hours":0.500686111111111,"orgmode_hours":1.411311111111111,"package_hours":0.0}, +{"period":"2020-11-05T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":7.012325,"vim_other_code_hours":0.0,"config_hours":0.3160166666666667,"orgmode_hours":0.008994444444444446,"package_hours":0.0}, +{"period":"2020-11-06T00:00:00Z","misc_emacs_hours":0.8303497222222229,"emacs_other_code_hours":1.9601530555555557,"vim_other_code_hours":0.0,"config_hours":0.0,"orgmode_hours":1.155611111111111,"package_hours":0.0}, +{"period":"2020-11-07T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":5.815349444444445,"vim_other_code_hours":0.0,"config_hours":0.0,"orgmode_hours":0.0,"package_hours":0.0}, +{"period":"2020-11-08T00:00:00Z","misc_emacs_hours":0.5992686111111123,"emacs_other_code_hours":7.439156111111109,"vim_other_code_hours":0.0,"config_hours":0.0,"orgmode_hours":0.08499444444444444,"package_hours":0.0}, +{"period":"2020-11-09T00:00:00Z","misc_emacs_hours":0.0,"emacs_other_code_hours":2.465256666666667,"vim_other_code_hours":0.0,"config_hours":0.0,"orgmode_hours":0.620813888888889,"package_hours":0.0} +] \ No newline at end of file diff --git a/data/2023-03-13-emacs/lengths.csv b/data/2023-03-13-emacs/lengths.csv new file mode 100644 index 0000000..da2fd24 --- /dev/null +++ b/data/2023-03-13-emacs/lengths.csv @@ -0,0 +1,685 @@ +commit,date,Emacs.org,init.el,init.vim,Desktop.org,Console.org,Mail.org,Guix.org +19911d3c96fda1f2eb0d6b0b9ca863498eebae7f,2023-04-03T11:30:26+03:00,8867,6235,1053,3747,1018,616,726 +516f7b0ffde496e5b6f073fde840f048132993ea,2023-04-03T11:28:32+03:00,8867,6235,1053,3747,1018,616,726 +d7f69b10715ddc43a38c3c9e84804dfd25f62cd2,2023-04-03T11:28:01+03:00,8867,6235,1053,3747,1018,616,726 +2a69f52ca0979437f5f8872a180c4fc5fa46257c,2023-03-20T13:29:04+03:00,8866,6234,1053,3747,1018,616,726 +cd7e9934a7f2e4b8cf3633a4c546ede9d7ac0ef4,2023-03-15T17:38:28+03:00,8866,6234,1053,3747,1018,616,726 +89d9a729e091c8bffadce98ddd598cbde7af0cbc,2023-03-14T12:34:56+03:00,8866,6234,1053,3747,1018,616,726 +9b52defcc8df025f6f80b59ce7bbd5018b5019af,2023-03-14T12:31:41+03:00,8866,6234,1053,3747,1018,616,726 +aefff14a6a25b2afcce3048e3ded8fc309b00423,2023-03-14T12:31:28+03:00,8866,6234,1053,3747,1018,616,726 +128c7d8020e52b22acd9d97ef7e661c3583bb1a4,2023-03-14T12:31:06+03:00,8866,6234,1053,3747,1018,616,726 +c8b995d6db6c83e326f13f908a11ad27a2f05e81,2023-03-07T23:06:01+03:00,8855,6227,1053,3747,1018,616,726 +5e0d3dc8e28cb8cecf1aec536e1c2fb867efc986,2023-03-01T22:16:33+03:00,8856,6227,1053,3747,1018,616,726 +a346ca31760f7367d41b2b6054a2b4142adb1cd6,2023-03-01T18:18:37+03:00,8835,6211,1053,3747,1018,616,726 +8017eea0ca1e9d4e9ec4da0175625370b25ea5cb,2023-03-01T18:18:16+03:00,8835,6211,1053,3747,1017,616,726 +f1780832f0f2065324fad65e242815e7f0c1b5b1,2023-03-01T18:17:57+03:00,8835,6211,1053,3743,1017,616,726 +018c35dba99112e8e444fda9408ca80e32e85104,2023-03-01T11:06:42+03:00,8831,6207,1053,3743,1017,616,726 +8a82a52ed017516c00a1d6753cea989253ae78e1,2023-02-22T18:54:45+03:00,8831,6207,1053,3741,1017,616,726 +ce2b447f15e7f1d790870abccc787cbbe3ce9115,2023-02-20T15:12:44+03:00,8814,6196,1053,3741,1017,616,726 +3adca25f883641cc7d43a7e8b8774fb6316aa399,2023-02-19T23:58:25+03:00,8813,6196,1053,3741,1017,616,726 +978e5f682676d2546506f9b26a8d3f1198f4f91a,2023-02-19T23:57:30+03:00,8813,6196,1053,3740,1017,616,726 +9831d1909245c818551660d1df6ed2e572445c3f,2023-02-18T17:33:37+03:00,8788,6178,1053,3740,1017,616,726 +6bbf74279c1e4f8c246bedb737318f02ddde75bd,2023-02-18T17:33:11+03:00,8788,6178,1053,3740,1017,616,726 +bd718b254d9bfb0d14c4f408350087eb220cf5d6,2023-02-17T21:07:13+03:00,8670,6087,1053,3740,1017,616,726 +739d92c5ed11d011852f9e2c18e45393d266c92e,2023-02-17T20:45:32+03:00,8670,6087,1053,3767,1017,616,726 +5056dceda84def0c791601f3d32196c7065ec466,2023-02-14T23:52:48+03:00,8657,6076,1053,3740,1017,616,726 +5ec42f4356a34f8577adfab5645f6a7181acd103,2023-02-13T18:38:57+03:00,8657,6076,1053,3740,1014,616,726 +45cc0e249d450a228211919c288ceca6a40dfd40,2023-02-13T18:30:50+03:00,8657,6076,1053,3740,1014,616,726 +868e94ef20694e583c9fad77d896ad371dc33bf6,2023-02-13T18:30:33+03:00,8657,6076,1053,3740,1014,616,726 +d2620549b86ce8beaeba45a88296946853183ae7,2023-02-12T23:37:13+03:00,8636,6061,1053,3740,1014,616,726 +41464749cfcdd17640b1ca8272cae373abf966c3,2023-02-08T23:54:00+03:00,8526,5998,1053,3740,1014,616,726 +5fe019fbd5cc653c73bb8702bcb59135350367df,2023-02-08T23:52:16+03:00,8509,5985,1053,3728,1009,616,726 +a1b77e233021fe22c6fcf1c2bc33da13586fe0c3,2023-02-08T13:08:16+03:00,8526,5998,1053,3740,1014,616,726 +b96a7f62fb09f662336676cbcb40430ea91ac95f,2023-02-08T13:02:35+03:00,8526,5998,1053,3740,1009,616,726 +8b954419fe17d0a32093d7b1b72eefbb555a5e68,2023-02-08T13:02:26+03:00,8526,5998,1053,3728,1009,616,726 +87626e053967305056f0d9c4463ababe63282368,2023-01-30T22:50:09+03:00,8509,5985,1053,3728,1009,616,726 +49398d4cb8f216858b0d0ce9c000ba2e8affd24f,2023-01-30T01:37:41+03:00,8509,5985,1053,3728,1002,616,726 +e966318c57215f6678eefbe1807520d98def61d7,2023-01-30T01:09:21+03:00,8488,5968,1053,3728,1002,616,726 +2b11ae1f67b2e7c1ef3e64f4076e45ac9b8095c2,2023-01-30T01:07:51+03:00,8388,5897,1053,3728,1001,616,726 +8516c33edccf7e60942344459f5842d9a6885b10,2023-01-27T13:52:21+03:00,8475,5958,1053,3728,1002,616,726 +be08c8b2b6f5dd021567d65a390746d6abbe5b33,2023-01-27T13:49:36+03:00,8474,5957,1053,3728,1002,616,726 +1b6951cf398a9ac04f5a8839d5a9fb2d7ad5d8d1,2023-01-27T13:48:45+03:00,8474,5957,1053,3728,1002,616,726 +2136be197ff9a9235cca896d8aa13423dd75b049,2023-01-25T17:30:47+03:00,8474,5957,1053,3728,1002,616,726 +c1532698cdb86c982a17e50b784af20b3205fbe9,2023-01-24T23:33:42+03:00,8474,5957,1053,3728,1001,616,726 +f5255ccecb0519a2dd21dd51c3a44e00f8eeddfe,2023-01-24T11:46:06+03:00,8375,5885,1053,3728,1001,616,726 +c8ba987151e70c01f4821b7a79da5f0bd1c88c35,2023-01-24T08:13:45+00:00,8375,5885,1053,3728,1001,616,726 +b2536657d2aba6975e286dd7a719ebe34683d11e,2023-01-21T23:53:09+03:00,8375,5885,1053,3728,1001,616,726 +44142f3c4b7a9f21d9281de00125f35ab382a512,2023-01-14T23:39:28+03:00,8353,5878,1053,3728,1001,616,726 +2cc69241abe26f090418006c10b906ddf53f8887,2023-01-14T23:39:21+03:00,8353,5878,1053,3728,1001,616,726 +0c6c2e6acfa4707426429c0dbe887ad57c1e2c4e,2023-01-14T23:39:07+03:00,8353,5878,1053,3728,1001,616,726 +86798c2875c81c6f89196efbd3dc77b781d62236,2023-01-08T23:52:07+03:00,8327,5856,1053,3728,1001,616,726 +2009a87910aa21337afeee73dd0e36190b8b7d6a,2023-01-07T23:13:43+03:00,8304,5840,1053,3728,1001,616,726 +eb20f672ebb17a1619a96108b2f6c5ab9b448968,2023-01-05T00:03:39+03:00,8146,5716,1053,3728,1001,616,726 +3f5967a5f63928ea9c8567d8d9f31e84cdbbc21f,2023-01-03T18:31:37+03:00,8142,5715,1053,3728,1001,616,726 +66c1734309a4c0b1655b99e24f79ac94cbaadee0,2023-01-02T12:05:25+03:00,8037,5688,1053,3728,1001,616,726 +33bac98368bf7f78482b843722bb6fa26dcd006a,2023-01-02T12:01:39+03:00,8037,5688,1053,3728,1001,616,726 +e7391ff0888d21b0f485bd1498ae37fd41a7349e,2023-01-02T12:01:25+03:00,8027,5683,1053,3728,1001,616,726 +1e5a588ef5c4e71466a3c09e1061c329eb4bc441,2022-12-27T10:25:02+03:00,8027,5683,1053,3728,1040,616,726 +fc68c8d0eb8ce9455a8fb12358d83515d073e82c,2022-12-27T10:24:40+03:00,7857,5538,1053,3728,1040,616,726 +33ecd0197e0ebbeb996ad0c98ee231d2cc770248,2022-12-03T23:35:48+03:00,7857,5538,1053,3728,1040,616,726 +d0be119ad6b38bf30dd313ece7de474d0c0af3a3,2022-12-03T23:35:27+03:00,7827,5513,1053,3728,1040,616,726 +f5e612afe9fdcd999e07cc9c479e7db4ee68385a,2022-12-02T15:26:27+03:00,7827,5513,1053,3730,1040,616,726 +d9cc1e6690ceb3ad5612233f7d1f8f6991631e6b,2022-12-02T15:21:55+03:00,7827,5513,1053,3730,1040,616,726 +e9e3899c9ecf07ed57dcc87cc8889ff6d0193527,2022-12-02T15:21:40+03:00,7827,5513,1053,3730,1040,616,726 +a05697a4236674aab9f1df3612ce08862a9a2687,2022-11-15T22:46:44+03:00,7827,5513,1053,3745,1040,616,726 +12ea14e42b0e938d6ae9644eb4e0a21e264115f5,2022-10-28T09:45:20+03:00,7720,5429,1053,3745,1040,616,726 +bf70b39efea5e957690e5d2cde668ddbe353db28,2022-10-28T09:44:59+03:00,7720,5429,1053,3745,1040,633,726 +d093e755fd97a88157d10f4df7353a1729071ee5,2022-10-22T13:29:27+03:00,7720,5429,1053,3745,1040,633,726 +cf592a86e2e4d034e2d966116683dca98bf796d7,2022-10-13T23:00:11+03:00,7720,5429,1053,3745,1040,633,726 +e855da1a9f7a8148a2a4fc880b4157c1f10f005e,2022-10-13T22:51:59+03:00,7699,5413,1053,3745,1040,633,726 +dee410617f609530771f94f6f42c429b00ef4a98,2022-09-23T16:32:30+03:00,7699,5413,1053,3744,1040,633,726 +1d3e2940b419f96ac1957647387154132071962e,2022-09-18T18:33:36+03:00,7678,5399,1053,3744,1040,633,726 +ca3b1781eb70346e0e253ca72fb40d68e34e4e30,2022-09-15T12:44:33+03:00,7599,5394,1053,3744,1040,633,726 +56b2711f52b201497582b1d884f63567d96b500f,2022-09-15T12:43:53+03:00,7599,5394,1053,3744,1040,633,726 +44cf90eb363e4c8b2649800272d31321e1c20938,2022-09-15T12:43:32+03:00,7599,5394,1053,3744,1040,633,726 +7c0e26d42c4385bd4e967d02f72dd0e2438a2ad8,2022-09-15T12:43:02+03:00,7559,5360,1053,3744,1040,633,726 +71c78397bb3b2fb479ff214348bc9a226aae5a1d,2022-09-03T12:49:12+03:00,7559,5360,1053,3743,1040,633,726 +86ed4185e13a4b1f95321e431b8e4fe27f34174e,2022-08-31T21:07:19+03:00,7493,5316,1053,3743,1040,625,726 +4c52cf6e80c3b540a778c601d128bef8e659309b,2022-08-31T16:22:43+03:00,7493,5316,1053,3743,1040,625,723 +804e6c2932477169a6374661d614e2424e55479e,2022-08-28T18:38:43+03:00,7489,5312,1053,3743,1040,625,723 +07cc13ad5c098e9ba3a9b1a0f5f63dbcb498e667,2022-08-19T10:08:00+05:00,7385,5228,1053,3743,1040,625,723 +46904ca73bec195a5a845e1433973e94abd42175,2022-08-19T10:04:54+05:00,7385,5228,1053,3743,1040,625,723 +749c354ef369e6376dfd4f76108426f5daf964ac,2022-08-19T10:04:38+05:00,7386,5229,1053,3743,1040,625,723 +182d01ace4468f53c8014ddd602946bd220721d9,2022-08-15T19:01:17+05:00,7386,5229,1053,3743,1040,625,723 +7f69c7851ee48f9ceede4d0d68c69bd1d0c9500e,2022-08-15T19:00:37+05:00,7386,5229,1053,3743,1040,625,723 +b5a3ed89e30e9f3dbfe8648a7f1cc06239f3d79e,2022-08-15T19:00:03+05:00,7386,5229,1053,3743,1035,625,723 +3a9eaa14421993917cd45758ed41f246c31f31df,2022-08-15T18:59:26+05:00,7308,5171,1053,3743,1035,625,723 +22762966dca788e0b88092cb52eb644b6d4fb237,2022-08-03T20:24:05+03:00,7308,5171,1053,3743,1035,625,723 +fbe878c3121ac4d3ab796b066cdb88a7050d08c7,2022-08-03T14:45:30+03:00,7308,5171,1053,3743,1035,625,723 +973be91ef9efec381e374fc0d38a577d5ee63ba6,2022-08-03T14:45:16+03:00,7308,5171,1053,3743,1025,625,723 +e2717a0ca8b3501ddd007003b34aad3784181e14,2022-07-28T23:20:51+03:00,7308,5171,1053,3741,1025,625,722 +ed580177698f2e65656335fafe33c1c0e5812341,2022-07-25T23:34:39+03:00,7291,5158,1053,3741,1025,625,722 +1af534fcd24c14cbe65d22301cb85821008210eb,2022-07-25T23:34:24+03:00,7291,5158,1053,3741,1025,625,722 +194aadcd1da9a68fb3e1aed4eb40a4f6218efacc,2022-07-25T00:15:53+03:00,7287,5154,1053,3741,1025,625,722 +36eccc1af1c85a01511d239f03626ea8be86e2dd,2022-07-24T23:30:41+03:00,7271,5138,1053,3741,1025,625,722 +ae469d99c9c172e1eedb6868abe936e404ee9db8,2022-07-24T23:30:23+03:00,7239,5113,1053,3741,1025,625,722 +7954f46715baf611f9bcf90586edee83e0dfa4f1,2022-07-24T20:53:41+03:00,7239,5113,1053,3626,1025,625,722 +bd688bdc866d3bba3bd6672e091746127ca54734,2022-07-24T19:36:39+03:00,7484,5113,1053,3760,1062,648,753 +4c97ef1a9c8c31d225bcee1ec49b5184c1936c53,2022-07-20T22:36:10+03:00,7469,5103,1053,3760,1062,648,753 +ce79da5b3f20539c4e29ed375c99ec4c0965cc39,2022-07-20T16:19:01+03:00,7462,5130,1053,3760,1062,648,753 +777c37245b62c326edee3ff60f7defd980c54b14,2022-07-14T23:01:01+03:00,7422,5120,1053,3760,1062,648,753 +23cb747ae8b560adfd416bc22a12aa025b6a6b34,2022-07-11T12:56:33+03:00,7386,5076,1053,3760,1062,648,753 +82ab1fa96e98e2e2331f954454262f702f7fb96e,2022-07-09T23:12:54+03:00,7386,5076,1053,3759,1062,648,753 +977c0c2be111287d056937827d569b5cbbcf77f0,2022-07-09T23:12:07+03:00,7386,5076,1053,3755,1062,648,753 +ae66dcacc14c9ca018cbe26a46b6546dfb55b906,2022-07-09T23:11:37+03:00,7372,5096,1053,3755,1062,648,753 +460e6a8d32b845fbebd51d0f07485ec349083abd,2022-07-02T14:56:16+03:00,7372,5096,1053,3755,1060,648,753 +7de55fa15f09b8e5229fc54471dcfcb642a8ff93,2022-06-26T22:03:18+03:00,7372,5096,1053,3755,1060,570,753 +f12737bb44edafecec2b79b8d9a70d5ed1a1ff99,2022-06-26T21:53:26+03:00,7372,5096,1053,3755,1060,570,753 +fbca334a3585ef6a1d595402ed708917a785789d,2022-06-26T21:53:11+03:00,7372,5096,1053,3756,1062,572,753 +3d1df15f9adf7d9ed734c2cd3664e3dd6c3e989c,2022-06-26T21:52:54+03:00,7372,5096,1053,3756,1062,572,755 +17d6192394e6321e80fde5417954f84256fb6f57,2022-06-17T23:36:47+03:00,7396,5092,1053,3756,1062,572,755 +0b1d5457a6a942d8b2f1c20400d09d4ffd0cfb81,2022-06-17T23:36:29+03:00,7396,5092,1053,3756,1062,572,755 +ca3ee40b6eb65e49f140c890853ef6e885aa210b,2022-06-09T22:26:56+03:00,7401,5097,1053,3756,1062,572,755 +a2c6f501ea650454dd1eebce9beec9dd67c1afd6,2022-06-06T22:31:53+03:00,7393,5089,1053,3756,1062,572,755 +95ac6c9e27eacf96208fac83763be6211f5ddf47,2022-06-06T22:29:27+03:00,7393,5089,1053,3756,1062,572,755 +8e591e0d2afd909ae5be00caf17f9b17c6cd8b61,2022-05-29T23:01:58+03:00,7408,5114,1053,3756,1062,572,755 +062233413d50c91bc4665ce3f6470e5bc7a425c6,2022-05-29T23:01:38+03:00,7408,5114,1053,3756,1062,572,755 +4b176a5bb1a5e20a7fdd7398b74df79701267a7e,2022-05-14T21:53:15+03:00,7322,5045,1053,3756,1062,572,755 +c838c4ca10392e6786d9f22d31bbd41196e4b1d9,2022-05-14T20:32:31+03:00,7153,4949,1053,3756,1062,572,755 +bf3a0c19d7aedb6cf35d1421113cfb1170fad053,2022-05-14T20:31:16+03:00,7153,4949,1053,3756,1062,572,755 +cbf772803b505ef7ca72b01c7e78aff91fee8605,2022-05-14T20:31:01+03:00,7153,4949,1053,3754,1062,572,755 +c6e3c19c31cd0e2ccfd42903bb21788276444798,2022-05-03T23:16:37+03:00,7145,4939,1053,3754,1062,572,755 +9010944b8b42c6d193896a29b2867126f2cf4c00,2022-05-03T23:15:53+03:00,7145,4939,1053,3753,1062,572,755 +586d0c9cd51e248b2e8cb4b4656d20c1182f8b42,2022-05-03T23:15:31+03:00,7103,4900,1053,3753,1062,572,755 +c42b693c51dcf11179573439ebfc9fe40adb1a59,2022-04-30T20:21:07+03:00,7103,4900,1053,3753,1062,572,755 +a33abd485d58bf20be4c3667feaa6897c7f401a4,2022-04-30T20:20:16+03:00,7103,4900,1053,3753,1062,572,755 +86bb113b322dcd94bc865c89b5a18836f5dd0fa0,2022-04-19T20:36:47+03:00,6825,4663,1053,3753,1062,572,755 +4d10d68737842c9629b678bb58b4d1878f9f6c10,2022-04-19T20:32:42+03:00,6825,4663,1053,3751,1062,572,755 +e6ce327e69cb1a7609a71a58bac62859e5efff8d,2022-04-16T12:47:29+03:00,6779,4629,1053,3751,1062,572,755 +cded48d484676b2a85a71a305a0a43c7a44ba3d9,2022-04-14T22:59:58+03:00,6831,4676,1053,3751,1062,572,755 +9b1a3b4b43986d5b0c9c2b96ac1f55fb1c3deb3e,2022-04-14T12:34:51+03:00,6831,4676,1053,3751,1062,572,755 +53eb9132dc38e042badd77fe63cf619141d4a895,2022-04-14T12:33:33+03:00,6714,4570,1053,3751,1062,572,755 +efe1aadaa1bb5b77607840c82405d3fab1abd2fd,2022-04-14T12:33:24+03:00,6714,4570,1053,3751,1062,551,755 +a1eef2a025e25fa1d58da52475e2fefe57c27943,2022-04-09T12:53:58+03:00,6714,4570,1053,3747,1062,551,755 +33a8a2b3382b0cd866b07d2c347b56036080a571,2022-04-09T12:51:02+03:00,6714,4570,1053,3747,1062,551,755 +9028fc32356e6874709bbff1883176fa9f2ae682,2022-04-09T12:20:05+03:00,6714,4570,1053,3747,1062,551,755 +24665dea142b613a6317c89bf215fef8823cac6b,2022-04-09T12:18:36+03:00,6714,4570,1053,3747,1062,551,755 +7190f2c42bdbd8233e734221f9676dfdcbd03fa8,2022-04-08T23:17:37+03:00,6714,4570,1053,3765,1062,551,755 +8145157f01ca6579e5909725ac78b774e89f3f7e,2022-04-08T23:17:01+03:00,6714,4570,1053,3765,1062,551,731 +ac1b6a54341bacce0c52a1674e56f695ae7c85dd,2022-04-01T00:11:48+03:00,6640,4449,1053,3765,1062,551,731 +93ef763b716832b852b35613543e474d8785af4d,2022-03-31T23:40:56+03:00,6588,4449,1053,3765,1062,551,731 +fb88d105ea4cbc0943d2164fae6d9776e01de32e,2022-03-30T14:48:38+03:00,6573,4449,1053,3765,1062,551,731 +64020613192947d106659c30e655619b5f67bf88,2022-03-30T14:48:22+03:00,6573,4449,1053,3765,1058,551,731 +f22856746acf6313ae0e48116c78e035ca9b41aa,2022-03-28T12:17:32+03:00,6573,4449,1053,3762,1058,551,731 +7380dfeb2b9ba65079bc02321de9a82358aa9ade,2022-03-28T12:14:04+03:00,6573,4449,1053,3762,1058,551,731 +025278a1e180e86f3aade20242e4ac1cdc1a2f13,2022-03-22T11:14:12+03:00,6682,4541,1053,3762,1058,551,731 +fc758b407365f7a582ab6c08c3c24a82afcada78,2022-03-22T11:11:08+03:00,6667,4533,1053,3762,1058,551,731 +5aba1733029458ddd880575e89cf5826ef167b70,2022-03-21T22:56:53+03:00,6667,4533,1053,3761,1058,551,731 +97f41fdca43b844b29f92bb767f6f8f24390305a,2022-03-19T23:05:35+03:00,6667,4533,1053,3761,1058,551,731 +c0957bacc87f56ed517d55904e0b46dfc2c34e96,2022-03-17T16:43:50+03:00,6667,4533,1053,3761,1058,551,731 +026f211498252ba4756170f7f243d18c928443af,2022-03-17T16:43:26+03:00,6667,4533,1053,3741,1058,551,731 +1a6c6cf01edcb351c41791e0e27ecce3564175bd,2022-02-25T10:10:00+03:00,6638,4514,1053,3741,1058,551,731 +68d2b3317dc38231d6ee441eaa189d3c798fda98,2022-02-17T23:01:26+03:00,6608,4496,1053,3741,1058,551,731 +4d922dad493f73994b6d7625e19f9456dbbcfa4f,2022-02-17T22:58:22+03:00,6608,4496,1053,3741,1058,551,731 +00ca2648ed3c3c7f926646f319a2064f80bfa691,2022-02-17T22:57:31+03:00,6608,4496,1053,3741,1058,548,731 +78447d47496920c06a47dac0249bc3da26474966,2022-02-15T21:56:26+03:00,6608,4496,1053,3728,1058,548,731 +a02a8c1466fb8362601b352a5f79361f64bd22b8,2022-02-13T18:36:34+03:00,6600,4489,1053,3728,1058,548,731 +33e22565a0c33d37f7547f1863cd4d4dc95f5106,2022-02-13T14:30:27+03:00,6588,4478,1053,3728,1058,548,731 +bb976c89dfb954ff178b8a202423b6f686007de2,2022-02-12T23:11:17+03:00,6588,4478,1053,3705,1058,548,731 +53e45a5e38f0fa2c8ec5372358e95955c5cbccf0,2022-02-12T23:10:16+03:00,6523,4475,1053,3705,1058,548,731 +fa4856faef8f8b2f0d7111c079132a1fd6068410,2022-02-12T23:09:39+03:00,6523,4475,1053,3589,1058,548,731 +f2ab0a59cf1ce70554c42952a9bf3c23d4db87f5,2022-02-10T11:09:40+03:00,6523,4475,1053,3589,1058,548,731 +51ba1ce4d91f46d00eb7445eb94a183a9445f606,2022-02-09T22:31:04+03:00,6523,4475,1053,3570,1058,548,731 +906f66c9e50b7074776568c466a985606414dfe3,2022-02-07T23:00:19+03:00,6523,4475,1053,3570,1058,548,731 +840c3607d1b070d2b296d19a826afc5cab547543,2022-02-02T23:35:19+03:00,6501,4459,1053,3570,1058,548,731 +a3690db9567574bbea77a85fecce20bb4c5cf349,2022-01-31T10:54:36+03:00,6501,4459,1053,3570,1058,548,731 +d2648918fcc338bd5c1cd6d5c0aa60a65077ccf7,2022-01-24T12:40:41+03:00,6802,4677,1053,3570,1058,548,731 +8c32db93f31b72454ecf7002e083e044dec3cfd3,2022-01-24T12:40:00+03:00,6796,4665,1053,3570,1058,545,731 +f3c770650359ba851c2a4f562ae60ee7de59c881,2022-01-22T22:28:23+03:00,6796,4665,1053,3570,1058,543,731 +c83041584d44537c35d2d8beb7b19911db258991,2022-01-22T22:27:27+03:00,6796,4665,1053,3570,1058,542,731 +cea6bbf45c11f675f6be66bdb7de9460ff8dd651,2022-01-20T00:00:25+03:00,6772,4624,1053,3570,1058,542,731 +9612c69ffc2dba30bfa8a697e032e7a04913b2be,2022-01-19T22:34:11+03:00,6772,4624,1053,3570,1042,542,731 +7971eb63e5c684757215a852dba8b53e1297f86e,2022-01-18T18:31:26+03:00,6739,4612,1053,3570,1042,540,731 +90d7c91f0c319554edbfc434419960a175ba21cf,2022-01-17T14:41:31+03:00,6739,4612,1053,3570,1042,540,731 +5b9d5db173b0d16e2485c8a18bb900e37dafe464,2022-01-17T14:41:18+03:00,6739,4612,1053,3569,1042,540,731 +2733147293b7f5b39f0b1a8c814414ebf48b4408,2022-01-17T11:00:52+03:00,6739,4612,1053,3569,1037,540,731 +2210e8f81b0ba08f69af3ee0cdbccf520fbcc69b,2022-01-15T18:34:06+03:00,6725,4605,1053,3569,1037,540,731 +3d87852745caacc0863c747f1fa9871d367240d2,2022-01-15T13:26:12+03:00,6725,4629,1053,3569,1037,540,731 +0f0b664922416ec4a409df3abecdb1d8c1161aff,2022-01-13T11:24:11+03:00,6718,4622,1053,3569,1037,540,731 +e606c96d2b3c35b3d107a25a889c68bd04e1deb7,2022-01-13T11:23:50+03:00,6718,4622,1053,3546,1037,540,731 +269a416e5b1c595927ed9da9f351521dc0792bd1,2022-01-13T11:23:19+03:00,6717,4621,1053,3546,1037,540,731 +e68db3ed0da46f27ea2e84ca3da9cd8230ef2de5,2022-01-12T12:01:05+03:00,6717,4621,1053,3546,1037,540,716 +d697aab011bb08f4b58b2833823ebdcdc431117d,2022-01-11T10:19:16+03:00,6717,4621,1053,3546,1037,540,716 +7d1d5b5b725dee8fcb83fa987abd6ac350643353,2022-01-11T08:56:47+03:00,6717,4621,1053,3546,1037,540,716 +aff8463412f03195747071c7d19e610487d5adee,2022-01-11T08:55:30+03:00,6717,4621,1053,3546,1037,540,716 +fcca97d5547876ec6dfa3347ef57bd890d26db00,2022-01-11T08:54:57+03:00,6717,4621,1053,3535,1037,540,716 +d5409891f023ea22d7f7384e0497ef79205fe3f5,2022-01-11T08:54:25+03:00,6696,4604,1053,3535,1037,540,716 +a4d42098976e591bd95096c713e956118f49a199,2022-01-09T21:52:55+03:00,6696,4604,1053,3535,1037,540,706 +b02ccf4aa79ee83eb8c79629c299462e4fe34755,2022-01-09T21:51:44+03:00,6696,4604,1053,3518,1037,540,706 +aaf9b8725f6fa8ff7c9f4da8edfec756dd5ad4a8,2022-01-09T21:19:39+03:00,6696,4604,1053,3518,1037,540,706 +b7896679f5d11e2371648e55bd20c09778b95f35,2022-01-09T21:19:01+03:00,6690,4596,1053,3518,1037,540,706 +49add5c0fbb0105f139e458131886145fcb41fe4,2022-01-07T00:27:09+03:00,6685,4593,1053,3518,1037,536,706 +803ab24b1e16760e1ac8dd0c3bc83e3176359ef6,2022-01-05T10:44:17+03:00,6679,4585,1053,3518,1037,540,706 +d8d1bb83edd3f44fb4d2c473f474547a5867c186,2022-01-05T10:15:34+03:00,6679,4585,1053,3518,1037,536,706 +4b1e141a6ee2a3039382619b39877cda36926318,2022-01-04T22:09:43+03:00,6679,4585,1053,3518,1031,536,706 +35ea3ab7964ea1c58411bd8167082814d5ed6798,2022-01-04T15:44:48+03:00,6679,4585,1053,3518,1031,535,706 +554c8b85ebff5952a6442b3653e660eefe2f5e98,2022-01-04T12:05:35+03:00,6679,4585,1053,3518,1031,535,706 +82aca7bad4a42334c885405de6710de586dd67af,2022-01-04T12:05:13+03:00,6679,4585,1053,3518,1024,535,706 +941c1d44ee5527bd5a037993c6f7c0ee939d53ad,2022-01-04T12:03:45+03:00,6679,4585,1053,3448,1024,535,706 +4617e07cfdce1cbcaf4da2abc7ca01681cf65891,2022-01-02T13:33:01+03:00,6634,4552,1053,3448,1024,535,706 +03c986cfb8246c3509a9010508ce953a7760de1a,2022-01-01T17:59:04+03:00,6634,4553,1053,3448,1024,535,706 +135b3419e4174754e9fcb173a36d29d42a9c0bd0,2022-01-01T17:58:21+03:00,6632,4551,1053,3448,1024,535,706 +ba38d54cf6366c742eb1f68fd2861911a292173a,2022-01-01T17:53:01+03:00,6633,4551,1053,3448,1024,535,706 +1121bd865cb9ed019e9e4c257155e2fb483d98c5,2021-12-29T13:22:38+03:00,6635,4553,1053,3379,1024,535,706 +623df333e4e115ddd540478b46b603ddbfb85f2f,2021-12-28T23:10:44+03:00,6633,4551,1053,3379,1024,535,706 +79bb3e8a687d4281f84f6e2497b2cc678b7ccf18,2021-12-28T23:10:27+03:00,6633,4551,1053,3384,1024,535,706 +5a3ff8d2554b4c9a18a8b088d4717010e73fa79d,2021-12-22T22:10:24+03:00,6625,4541,1053,3384,1024,535,706 +62eba36159f8cd6eb15faece59cb4904ead2105b,2021-12-20T17:12:33+03:00,6625,4541,1053,3383,1024,535,706 +a3ac781355ec59c44e7cbdad8f7d92bb36433bbc,2021-12-19T22:10:27+03:00,6562,4488,1053,3383,1024,535,706 +40c5ef92a017856f89a00862ded93382894d5fc6,2021-12-18T15:45:28+03:00,6554,4482,1053,3383,1024,535,706 +b0e93e10eecc2e7cbb703dca423dddc4ed130d48,2021-12-14T23:01:28+03:00,6091,4168,1053,3383,1024,535,706 +f4476648fad0b6be8675d74fb06efe23a372ad86,2021-12-12T22:28:56+03:00,6054,4146,1053,3383,1024,535,706 +f8eb4f63ceb9485e4c31dc91981ccd34e7ece12a,2021-12-08T21:56:14+03:00,6053,4145,1053,3356,1024,535,706 +5ae655b39c6f33eed21567023841047f77a919b8,2021-12-08T21:55:55+03:00,6043,4138,1053,3356,1024,535,706 +dcdb7d0109fb27b0610888320eecc1d46bf73982,2021-12-07T22:14:37+03:00,6043,4138,1053,3328,1024,535,706 +3c02a9ee3da300d58fece97f39e5773f94677981,2021-12-07T22:13:57+03:00,6032,4134,1053,3328,1024,535,706 +2cf8314c1f222f3f18a0ab16b3d6e8cfef7d9371,2021-12-06T23:38:47+03:00,6043,4138,1053,3328,1024,535,706 +5be9577a2eade9ee13f2f4c0cc641a9572a51467,2021-12-06T14:56:49+03:00,6032,4134,1053,3328,1024,535,706 +bcbea86087c7103de1780ba081aa251313abb327,2021-12-04T00:08:06+03:00,6035,4134,1053,3328,1024,535,706 +c6987720e980de48461f1682e5d6323a66950bca,2021-12-04T00:07:43+03:00,6035,4134,1053,3322,1024,535,706 +df2f07f949e9ec3efccc9af3f4ba082362e6520f,2021-12-03T17:57:42+03:00,6037,4120,1053,3322,1024,535,706 +9b0bee3ddd4a285b468e2279388dc8b599e1c985,2021-12-03T17:55:00+03:00,6037,4120,1053,3322,1024,535,706 +ff990dc88990a6b1079f5e73e25ad31c2a9408a7,2021-12-02T22:31:31+03:00,6033,4120,1053,3322,1024,535,706 +3c22b441befa8d4ed552f0d8432895ef967a92cf,2021-12-02T22:29:39+03:00,6033,4120,1053,3311,1024,535,706 +a17dee9be51d7f9e62f50ccd414ae0a3bdd8d0eb,2021-12-01T12:59:19+03:00,5959,4070,1053,3311,1024,535,706 +267fb8a98ed4bd60a46b627fb8d7befe5a27f785,2021-12-01T12:24:09+03:00,5959,4070,1053,3311,1024,535,706 +1bd1d0fe95f81bd860e7065c5697ca222f7a3c33,2021-12-01T12:23:02+03:00,5959,4070,1053,3328,1024,535,706 +8594d6f53e42c70bbf903e168607841854818a38,2021-11-27T14:44:54+03:00,6162,4213,1053,3328,1024,535,706 +19ff54db9fe21fd5bdf404a8d2612176baa8a6f5,2021-11-26T22:49:34+03:00,6312,4332,1053,3328,1024,535,706 +78ecd7e1bba152ac73ea6206906384aea384c58a,2021-11-26T21:01:20+03:00,6311,4330,1053,3327,1024,535,706 +ba92551ade9d231b2c13663f815b82804bcc60d3,2021-11-26T17:46:40+03:00,6311,4330,1053,3327,1024,535,706 +c30062c70f8a0b7ef2454996a670ab9eb6193c86,2021-11-25T09:37:31+03:00,6311,4330,1053,3327,1024,535,706 +739e0f69d928eccdcd7e7eec3d039d8b7d1e0d7d,2021-11-25T09:36:56+03:00,6184,4227,1053,3327,1024,535,706 +f31ada645dfd9f90fb09447e6b527af201e3a475,2021-11-23T18:24:51+03:00,6184,4227,1053,3326,1024,535,706 +b85731122cb10b324db0f511218ad87d0fa62360,2021-11-23T15:12:49+03:00,6184,4227,1053,3325,1024,535,706 +96175214c64351daf54edac73c4e8f9edc8e85d6,2021-11-21T10:24:19+03:00,6184,4227,1053,3086,1024,535,706 +45a5439661f26889a2ca5133672079679d7edaa9,2021-11-20T17:55:20+03:00,6184,4227,1053,3082,1024,535,706 +867644c28e482adf2440716e44a0bbd779c311d6,2021-11-20T17:47:25+03:00,6184,4227,1053,3081,1024,535,706 +aa530b1c732ebc391619efa052b179f987deea1e,2021-11-18T07:05:50+03:00,6180,4223,1053,3081,1024,535,706 +d3f9973d63d64a20fa05021357e61730b3e63b1a,2021-11-18T07:05:30+03:00,6176,4219,1053,3081,1024,535,706 +a8a2ea0b00339577023419fe0864fb128d5a0c65,2021-11-15T14:13:09+03:00,6176,4219,1053,3034,1024,535,706 +92f88b798f050b98d69df224aca73f887b2438b7,2021-11-15T14:07:34+03:00,6177,4219,1053,3016,1024,535,706 +851bb9bc974c18e9c906a0ba4e50a6821d8ca1cf,2021-11-09T22:03:45+03:00,6171,4207,1053,2533,1024,535,706 +54e1ee0ea70f38dd6b9f07323b8c91bc8e42e974,2021-11-05T22:17:26+03:00,6017,3999,1053,2533,1024,535,706 +67dabb3f4bc5cca24d5bb75f5bab42b5ee68a9a0,2021-11-05T22:17:11+03:00,6017,3999,1053,2518,1024,535,706 +785a6609f31f4573bf6cdf34599d9a566278995c,2021-11-01T19:15:36+03:00,6001,3989,1053,2518,1024,535,706 +90f60f3cc303f1543c41deeb3e625386bcc9ca1a,2021-11-01T19:15:08+03:00,6001,3989,1053,2513,1024,535,706 +e7aeb61ba2a9ee3a121a64f9def1410a7679d56d,2021-10-29T18:07:41+03:00,5973,3963,1053,2513,1024,535,706 +9df931b94c291851b6e9afc22e640cd20def6f4a,2021-10-28T15:49:32+03:00,5944,3948,1053,2513,1024,535,706 +0dc4420eccf84062659cf819b087215901d8d7da,2021-10-28T15:48:50+03:00,5923,3931,1053,2513,1024,535,706 +770a2421a6e0c719662d1fac29abddf5145bb9f2,2021-10-25T10:41:43+03:00,5923,3931,1053,2509,1024,535,706 +515101ffcde32dc4ac5889e92e841d6f069fc43d,2021-10-24T21:37:29+03:00,5918,3927,1053,2509,1024,535,706 +182125df06fab50aacb51b462f7f299300552d06,2021-10-24T21:35:14+03:00,5918,3927,1053,2509,1024,535,706 +710e838db4074fd51d945f668082e9db207aa8c9,2021-10-24T21:34:49+03:00,5918,3927,1053,2507,1023,535,706 +c87c2029c0f6196528f9c8fdbbc2ff36af335f4d,2021-10-21T20:56:29+03:00,5841,3874,1053,2507,1023,535,706 +1ed3800f8d3d9c4085e411222b821b832c7ac252,2021-10-21T20:55:12+03:00,5841,3874,1053,2507,1023,535,706 +7ac1215aded90d5c50f80d9df2b81f99948a3481,2021-10-21T20:54:42+03:00,5841,3874,1053,2507,1022,535,706 +b781888b847636e9fc33899ab08d0287b1e1fd53,2021-10-13T10:50:00+03:00,5778,3817,1053,2507,1022,535,706 +f8f21351a19dcbc8f3b6c29c23494fe6ea3804b0,2021-10-13T10:49:39+03:00,5750,3817,1053,2507,1022,535,706 +53692feda00bf0ccf246222dc7d0a06e86f97a6e,2021-10-13T10:49:03+03:00,5750,3817,1053,2506,1022,535,706 +a19a36e2d388570fc9610f9e87656fa19e6dfe68,2021-10-06T16:30:53+03:00,5750,3817,1053,2506,1008,535,706 +3331e30435c2eefb0587839d0aa417558f3a8a26,2021-10-04T11:21:26+03:00,5685,3779,1053,2506,1008,535,706 +20af706fa28d1c33e594b99e531aa385bb9ce26d,2021-10-03T20:46:40+03:00,5685,3779,1053,2495,1008,535,706 +a0f25dd23f9ca2e592676fc6a72d7e446c3a1edb,2021-10-01T18:55:52+03:00,5573,3705,1053,2480,1008,535,706 +c14a738f2abfa813b56e90745e99f5e13a770459,2021-10-01T18:49:37+03:00,5573,3705,1053,2480,1008,535,706 +44ce42a6f035235535e033242bf8ca5a97de5604,2021-09-30T19:15:18+03:00,5573,3705,1053,2480,1008,535,704 +138d5522f9e7fa0faf7b8e2a0bc40c73c21a8206,2021-09-30T19:14:03+03:00,5573,3705,1053,2480,1008,533,704 +f1e4731ca5cae8f383f48254d94eae954bc48561,2021-09-30T19:13:31+03:00,5573,3705,1053,2480,1000,533,704 +3d56b8db18ea22388751e9e3cf5b6297e583d097,2021-09-22T11:55:05+03:00,5549,3697,1053,2480,1000,533,704 +9f226b54be2e926c8957937259c1ae292d0199aa,2021-09-22T11:53:46+03:00,5489,3666,1053,2480,1000,533,704 +2dfa789d641564cea5e7bf1160c29936d20f7cd2,2021-09-18T23:08:20+03:00,5489,3666,1053,2465,1000,533,704 +0fb670bf083539ce5920eb0fc4cdcde1dc9cdaf9,2021-09-18T11:45:13+03:00,5489,3666,1053,2465,1000,533,704 +4f0dbc0529179b7d1fd49ba0292e844e1a7729c8,2021-09-18T10:04:12+03:00,5455,3645,1053,2465,1000,533,704 +15295971dbad55d7964de9e40dbea3bbc9898480,2021-09-18T10:03:46+03:00,5452,3635,1053,2465,1000,533,704 +9d89de7053f0be08e16a6fca550db4608928e514,2021-09-17T21:17:00+03:00,5452,3635,1053,2463,1000,533,703 +cbed53fc072960a10865371b2dc37f5a4c87753a,2021-09-11T10:35:17+03:00,5452,3635,1053,2462,1000,533,701 +456b4a24a0ad8d3213b0606f248627c63cfe6bd5,2021-09-11T10:35:07+03:00,5440,3636,1053,2462,1000,533,701 +1b9a46394b4bf9add804d4842ed4835d37bf79a6,2021-09-11T10:34:49+03:00,5440,3636,1053,2462,1000,533,701 +ba29177f960f2cd1d12c7eba4320dc9121fa7d55,2021-09-08T15:02:34+05:00,5440,3636,1053,2459,1000,533,701 +f9cecf57bb21e89b7d74d3079a1dd556762b667e,2021-09-03T13:43:07+05:00,5440,3636,1053,2459,1000,533,701 +50979e53c722d90eefb3a7272e1d6743c07bf0b0,2021-09-03T13:42:42+05:00,5440,3636,1053,2459,1000,533,701 +d6d6f40f2c756db7b8c7bbdf4e4ed3f805c00dfd,2021-08-31T16:40:49+05:00,5209,3454,1053,2459,1000,533,701 +3576f37d27585fda81e52f65c4015a278adbb95f,2021-08-31T16:39:15+05:00,5209,3454,1053,2458,1000,533,701 +4d759a129ccb08dc4ac4f604557e34775e3159f3,2021-08-25T19:32:09+03:00,5249,3487,1053,2458,1000,533,701 +08801fc5ecc77de57738797cb1b490a0630f737e,2021-08-25T19:25:57+03:00,5249,3487,1053,2458,1000,533,701 +c5294aea224ff136f5441094b9dde2424cf41659,2021-08-22T21:50:41+03:00,5242,3482,1053,2458,1000,533,701 +9148fea7cfec4dd19e3e023685820156568adee7,2021-08-22T12:50:42+03:00,5242,3482,1053,2458,1000,533,701 +bf5ad786470627382da83fde64c034a683b9c8eb,2021-08-19T14:29:56+03:00,5226,3475,1053,2453,997,529,698 +d22dc6c645b22ea6c7c0d5d53e11053c396ab0c4,2021-08-18T22:27:53+03:00,5226,3475,1053,2453,997,529,698 +0ad807a8416146c9a5b124fc6c5219fbd8239373,2021-08-18T22:27:14+03:00,5226,3475,1053,2444,997,529,698 +0ae6b3127d0486f1271b2279b9422160b7d8309a,2021-08-18T22:26:19+03:00,5150,3415,1053,2444,997,529,698 +ab7832732b8ecf58cb5cee9ff0b0194cb151443d,2021-08-18T14:25:04+03:00,5150,3415,1053,2444,990,529,698 +1a47ddbcc0cb26981a66b87651376be07942c24f,2021-08-13T21:16:35+03:00,5150,3415,1053,2444,990,529,698 +1a74ee8b6c93b91077394db40440501ca3a4c101,2021-08-13T21:15:44+03:00,5123,3392,1053,2444,990,529,698 +d1c61211df1f9253bc505cee2584e163071d6572,2021-08-12T10:10:33+03:00,5123,3392,1053,2441,990,529,698 +f2e42b9212e97dc390799ccfb2f24843873e0c4d,2021-08-11T22:17:21+03:00,5091,3363,1053,2441,990,529,698 +36106c8f47d48930512eb94fd1c31c3301ac0cd3,2021-08-11T13:14:55+03:00,5067,3352,1053,2441,990,529,698 +750b12ef7655f5b422e97e9a2d9d391784078616,2021-08-09T13:53:23+03:00,5065,3336,1053,2441,990,529,698 +cc296f08e8a96ce00be46f4a8684db7828fb6f30,2021-08-09T13:28:39+03:00,5065,3336,1053,2441,990,529,698 +e13ab60bb4acc1dbe3d4852f8572d51646c06713,2021-08-08T21:12:13+03:00,5027,3322,1053,2441,990,529,698 +0a3127d4254bb2ac9a1316cdbafa3981dfb3417a,2021-08-08T21:01:40+03:00,5027,3322,1053,2441,990,529,698 +32b2794b76288b8236ad688dcfa2db284c6be577,2021-08-07T18:57:23+03:00,4973,3283,1053,2441,990,529,698 +6fa7b9334ce28a8efccafc649576c6a92d39a56f,2021-08-07T18:57:06+03:00,4973,3283,1053,2441,983,529,698 +9854573203e6aa4e1bbd3ef5b342799a2e79d5b3,2021-08-07T09:58:55+03:00,4947,3255,1053,2441,983,529,698 +57559ee47d5763ceb77627d2be26d9301dc1810c,2021-08-05T17:07:51+03:00,4947,3255,1053,2441,983,529,698 +79e89529509d1711904e26f7576886b101a01601,2021-08-05T17:03:15+03:00,4947,3255,1053,2441,983,529,698 +0e769a951f5d9adee9e0e16a50a06f2105f7b959,2021-08-05T17:02:42+03:00,4947,3255,1053,2439,983,529,698 +56e87062d74149287e081ddf4b2889182a5be551,2021-08-05T17:02:23+03:00,4894,3214,1053,2439,983,529,698 +52bb3c9d2917c9fec02541fb73ea1f1a78640cea,2021-08-04T18:46:14+03:00,4894,3214,1053,2439,968,529,698 +624b24a4d3fcc79bab9ffd5b58a7b1542a33b466,2021-08-04T16:39:40+03:00,4894,3214,1053,2432,968,529,698 +7049a698224c1ea6078cf8a078ca9f58bf465db5,2021-08-04T16:29:03+03:00,4894,3214,1053,2432,968,529,698 +09aace32d759bc1a3503316e38d008ef8fd91d68,2021-08-04T16:28:32+03:00,4894,3214,1053,2432,968,527,698 +a2d1135165ab9a13311e5449e63499ebe2d60356,2021-08-04T12:02:45+03:00,4895,3214,1053,2432,968,527,698 +bc243cd1d3e44eb382031a54080ba1c9f3199b26,2021-08-04T11:29:35+03:00,4895,3209,1053,2432,968,527,698 +4c544d850853a45ef35eb678ad23c9a7512e6ad2,2021-08-04T11:29:27+03:00,4895,3209,1053,2432,968,527,698 +9f4a0b1e09601bd30e942cac5530b26357ea4602,2021-08-04T11:27:50+03:00,4759,3139,1053,2432,968,527,698 +1be22593a48bdc277971b24233dfbf4bf3de0521,2021-07-31T21:25:59+03:00,4759,3139,1053,2418,968,273,698 +304993a14eecf3292ea357a15b2304f4e8f1815b,2021-07-31T16:46:08+03:00,4767,3124,1053,2418,970,273,698 +b9f06e77275ef032dbc1a2fae36394b1c4fe171e,2021-07-31T16:44:20+03:00,4767,3124,1053,2418,968,273,698 +9ac94c39670da168de60daedbd77da029ad4a7fb,2021-07-31T16:28:25+03:00,4767,3124,1053,2418,930,273,698 +48fd28b543cf411bfc069e20818eb60e113b3df0,2021-07-31T09:46:48+03:00,4767,3124,1053,2418,916,273,698 +f92bd16c509fdbad1c18636341b1d5e2e23c0b69,2021-07-29T16:48:45+03:00,4736,3118,1053,2418,916,273,698 +d14808fa7fece33dd31eb3e62b96edf5401a9825,2021-07-29T16:47:57+03:00,4670,3087,1053,2418,916,273,698 +7f50bdb82ce941dce8fb109841346c38fe0e4aa1,2021-07-27T18:27:50+03:00,4670,3087,1053,2418,915,273,698 +a26e5fa8ef4cb2b4cc90dccfdf82a960306051b3,2021-07-27T12:49:23+03:00,4670,3087,1053,2416,915,252,698 +6070c4bca93967753399a95d14ab7b6fb4867c14,2021-07-27T12:46:27+03:00,4647,3073,1053,2416,914,252,698 +349b0fd5dd5665950a9c09a2651e72ae68f4473d,2021-07-26T17:39:15+03:00,4695,3073,1053,2416,807,252,697 +776cab2b89971e284a5413d7c7d0ed824a55ed14,2021-07-26T17:38:55+03:00,4620,3015,1053,2416,807,252,697 +3a441661bb2de23bf1a39121d22f315c1e4668ac,2021-07-26T17:37:05+03:00,4620,3015,1053,2412,807,252,697 +bd3743e3a370309d36d957188c7272dbe2f4279b,2021-07-22T22:06:24+03:00,4620,3015,1053,2412,807,252,697 +d209886abc2ddc8282e1a53f20afe3ad291fd582,2021-07-22T17:49:10+03:00,4498,2927,1053,2412,807,252,697 +ba9d50d4914cab4cc7270bbb90f073e2865469a1,2021-07-22T14:29:10+03:00,4472,2927,1053,2412,807,252,697 +740753d69683c4e04748f000e996e59ac9974833,2021-07-22T12:16:10+03:00,4472,2927,1053,2412,807,252,697 +b880e8a2e10c148b6aa1dd937315c21409587c63,2021-07-21T20:59:26+03:00,4426,2890,1053,2412,807,252,697 +57b757a78f3fb151ba012da56791686d90b74a07,2021-07-21T15:14:59+03:00,4423,2890,1053,2412,807,252,697 +4785f72fec3efa497cea17ac79b3c366185a90e3,2021-07-20T21:43:59+03:00,4423,2890,1053,2387,807,252,694 +7973aec28eedf4e40a4e1ad82d939dfc89acd24d,2021-07-20T21:43:08+03:00,4321,2801,1053,2387,807,252,694 +bd7d246fef7a25aaa2b21ed40499891b822c1b50,2021-07-20T21:41:58+03:00,4319,2799,1053,2387,799,252,694 +b89a27b39010799ad06db6004b7fccdd5af39b2f,2021-07-17T20:32:04+03:00,4319,2799,1053,2387,799,252,694 +f319f1a31f8dbdee045b06385bf7eace899b4fb1,2021-07-17T10:53:14+03:00,4257,2783,1053,2387,799,252,694 +99505117b4568d8c57a2b9fdd3c6c627c9e2b041,2021-07-17T10:50:50+03:00,4257,2783,1053,2384,799,252,689 +2615f584d2ea741b0b6da6dd45d4637c3f27327f,2021-07-14T21:57:17+03:00,4078,2698,1053,2384,799,252,689 +82d66af51b9ae6d1ba843f86df41bf6e9f707ca5,2021-07-14T21:57:02+03:00,4078,2698,1053,2384,799,236,689 +42065f16eec254a212622e51248dc258c80cb84b,2021-07-14T18:43:29+03:00,4060,2665,1053,2384,799,236,689 +68c28de2c6a72d36ffd7deb71a56d24c621dbaba,2021-07-14T18:43:00+03:00,4035,2665,1053,2384,799,236,689 +59d56cfb8aee27d5822f2127462bcd0d2729acd5,2021-07-13T16:04:41+03:00,4035,2665,1053,2384,749,236,689 +ab011b826f9cc1f8a4c33f974f3879171f1a1c98,2021-07-12T19:38:21+03:00,4027,2665,1053,2384,749,236,689 +342b9f5d485af8164856c5ae1a32d5de03c2a7c1,2021-07-12T19:33:35+03:00,4028,2666,1053,2384,749,236,689 +c138635f6aa5c79b1c058529b7186d64ea37864e,2021-07-12T12:14:23+03:00,4028,2666,1053,2384,716,236,649 +00141e7dca1a7c7fc381fa9399b17cc23f699b04,2021-07-12T10:10:38+03:00,4028,2666,1053,2387,716,236,632 +21d8917821634fe8b79200cb79e6c74197036fab,2021-07-10T19:49:10+03:00,4028,2666,1053,2387,716,249,632 +f5e7d44aedeb3c9e0969ad200072ae0fa271ad8d,2021-07-10T19:44:11+03:00,4028,2666,1053,2387,711,249,570 +e298ab4c667ad0e8ffa60bb92b2cebb7b4cd408c,2021-07-10T19:43:37+03:00,4028,2666,1053,2387,711,239,570 +2c3505505f8e5acb05370a564a9aec37016f47f8,2021-07-10T19:42:57+03:00,4025,2663,1053,2387,711,239,570 +b046e1dd06d181a252e76c0ca86ee1a04ffc85dc,2021-07-02T17:09:52+03:00,4025,2663,1053,2374,711,239,570 +53ce1053565d920e0cd7d511ef3e3f964a8b1d4f,2021-07-01T12:45:59+03:00,3986,2663,1053,2374,711,239,570 +5e4b4a6087c4ac9da53639f9cbddac8d8f522ded,2021-06-30T20:54:13+03:00,3986,2663,1053,2374,711,239,570 +9b2179110d1c133cc68c1b72883b0d19416c931f,2021-06-29T13:59:38+03:00,3905,2618,1053,2374,711,239,570 +27301786daa82dd29285abff0c2fa5a0ade6ceee,2021-06-26T18:34:06+03:00,3905,2618,1053,2365,711,239,565 +c2b1b0a66a3e5c3e627db5fb1513187dd38c6498,2021-06-25T20:30:45+03:00,3905,2618,1053,2365,711,239,580 +88fab62141ce1af37bff70f81f2784beb5f72ee2,2021-06-25T19:57:56+03:00,3901,2602,1053,2365,711,239,580 +d43a07adcf87eb032ab4ab1f158ca4b9895f7a2f,2021-06-23T20:32:52+03:00,3901,2602,1053,2355,711,239,580 +c2231d32b9f7cf9361a404926077f7d4cf70e05a,2021-06-23T20:01:12+03:00,3900,2602,1053,2331,711,215,574 +557a6765d879dd6392fcd3d9b3a56f47fb11c129,2021-06-23T19:59:48+03:00,3900,2602,1053,2331,711,215,556 +12e25acdeb334916fdd269e9743d02019b365ba4,2021-06-22T08:54:46+03:00,3900,2602,1053,2326,711,215,556 +f39b410440fe71da7b9029216c5785f234eda5fd,2021-06-22T08:54:38+03:00,3900,2602,1053,2323,696,215,555 +02664b08f71e63f0c5f41e334586e4845fccadff,2021-06-21T09:23:36+03:00,3901,2602,1053,2323,686,215,555 +b887ae0c7dd17923eabd91b747120b32c46f98d5,2021-06-20T20:16:34+03:00,3901,2602,1053,2277,685,215,518 +2747239adda94a6580646b39a50189e1fe7fbfe5,2021-06-20T19:05:05+03:00,3901,2602,1053,2282,685,215,507 +35d0a94387dc7f27ce4e59c400a6bcd4be20f2c8,2021-06-20T08:35:45+03:00,3901,2602,1053,2282,685,215,490 +fc674b814237648f3c004b2398ae62d99d00a88e,2021-06-20T07:40:24+03:00,3901,2602,1053,2282,685,215,490 +2380ebf4d101ce6269f48559db9983ff0cc3e92f,2021-06-20T07:40:14+03:00,3901,2602,1053,2282,685,215,490 +5e4504b764c313f72a393aa5885f419c24b36ed9,2021-06-20T07:37:55+03:00,3890,2585,1053,2282,685,215,490 +2d0893ed6d1fcda879640f34a17e389d7eaa5977,2021-06-20T07:37:26+03:00,3890,2585,1053,2278,685,215,489 +c38db5027e0f5efebb406683ab3d1334e429164c,2021-06-19T20:11:45+03:00,3890,2585,1053,2278,684,215,489 +12a25ded4ba3de9a96ff1b0953b5ce243cbe81b5,2021-06-19T17:18:51+03:00,3890,2585,1053,2278,684,215,489 +eec899a0b089d13ad70514489d6e2209f6ebb3a9,2021-06-18T21:36:50+03:00,3890,2585,1053,2277,684,215,418 +cd54e345e5f0cad99c9d4188b973faddd6bb5a09,2021-06-18T18:14:30+03:00,3890,2585,1053,2266,684,215,445 +a37ab00e9bbb2cf781f4eeb94bbc4ae2f3b42fdb,2021-06-18T18:13:55+03:00,3889,2584,1053,2266,684,215,445 +7d61969160b9a669335656a149cbda17f857d4dc,2021-06-18T17:06:12+03:00,3889,2584,1053,2249,677,215,443 +198156ab889643ca5397e7824201e9b40af9ac26,2021-06-18T17:05:28+03:00,3889,2584,1053,2249,676,215,443 +470794016384374b86129197385edf47965911ad,2021-06-18T17:03:51+03:00,3889,2584,1053,2191,676,215,443 +973062cca2f5f24e22fa7046807b335954b68823,2021-06-18T17:02:20+03:00,3900,2589,1053,2191,676,215,443 +c53d3a39322720d0f147fa402d80f91112e1e0cd,2021-06-18T09:50:42+03:00,3790,2547,1053,1932,554,0,0 +bee1990318a5a36cbc7394183c8c39fdf1c0b777,2021-06-17T11:46:49+03:00,3900,2589,1053,2191,676,0,443 +738595780fa6dd70e39e927f0a8fcbc3e540dba1,2021-06-17T11:45:59+03:00,3890,2562,1053,2191,676,0,443 +a3f937cd44640831db2183b81473037b83fedfa2,2021-06-11T19:13:03+03:00,3890,2562,1053,2149,676,0,443 +f63a3d7c98da8412dca75a5ed793d58bac87989f,2021-06-11T11:39:31+03:00,3890,2562,1053,2082,676,0,488 +e055f895d9b8d6b775755c34cfbd94cf9cea9eed,2021-06-11T11:39:31+03:00,3886,2562,1053,2082,676,0,488 +87124deb8c3eebf6f9721de05352c8205e6cf8ca,2021-06-11T11:39:31+03:00,3886,2562,1053,2081,676,0,488 +912ca5d181056723ada8c48629741bca0d0cb778,2021-06-11T11:39:31+03:00,3886,2562,1053,2081,676,0,488 +695629551ff9641e92bc2fe52ca4e5cb5d865dcb,2021-06-11T11:39:31+03:00,3886,2562,1053,2081,663,0,488 +d91c66288433fa864f7fb6021f33832328acd134,2021-06-11T11:39:31+03:00,3873,2562,1053,2081,663,0,488 +0f98e475c1785c2dc6adc42a79125859eae5eaae,2021-06-11T11:39:31+03:00,3873,2562,1053,2081,663,0,458 +07c4551000f45c7c9910db9662ba6b4ea3f5a992,2021-06-11T11:39:31+03:00,3873,2562,1053,2078,663,0,411 +9ea0f5834b1451fb7d15dc4b7a6032e180aa5fe8,2021-06-11T11:39:31+03:00,3873,2562,1053,1998,663,0,411 +8b6f2f37517758455c356866e3263478cbb1ae74,2021-06-11T11:39:31+03:00,3873,2562,1053,1998,663,0,360 +8c7105de9d64696b1fe2ed2d387ba0551073a84e,2021-06-11T11:39:30+03:00,3873,2562,1053,1998,655,0,360 +c40d199aad7fa076a155ed0d82f73090b722baf6,2021-06-11T11:39:30+03:00,3868,2561,1053,1989,650,0,324 +5d006c082ce4f9a43f391d354723512302a071f1,2021-06-11T11:39:30+03:00,3868,2561,1053,1989,650,0,278 +762ae0e5bc0c9eba00cb8e3738b9334481167cd0,2021-06-11T11:39:30+03:00,3868,2561,1053,1932,650,0,278 +d1dd4b8929b3be7e8c39f392416af948ab2a8ceb,2021-06-11T11:39:30+03:00,3868,2561,1053,1932,650,0,280 +349e9c66aa7066a85c23914657473b3ce577df3b,2021-06-11T11:39:30+03:00,3868,2561,1053,1932,650,0,148 +87e4cd15797198ce514e305f93e558d867a5caf8,2021-06-11T11:39:30+03:00,3868,2561,1053,1932,554,0,148 +fd2e6ea2adf1bb98528aac859f43093b79aaa07b,2021-06-11T11:39:28+03:00,3868,2561,1053,1932,554,0,144 +02540932bf150d4693731513ee08f13bcb008c1a,2021-06-11T11:33:48+03:00,3779,2530,1053,1932,554,0,144 +8aef8f37a65d824a5ce7612faaadf56e2dab21d8,2021-06-11T11:33:48+03:00,3779,2530,1053,1932,554,0,0 +338d1fcb59b4d712b4d4b10e54312e900a4bd1d5,2021-06-11T11:33:48+03:00,3779,2530,1053,1932,554,0,0 +11d91f9ad67d8674ac66e302506d57e9ec699964,2021-06-10T12:25:33+03:00,3779,2530,1053,1932,554,0,0 +24a43d5e0f3c6a27f8cdd290a719044a5dc76281,2021-05-29T22:02:49+03:00,3716,2471,1053,1932,554,0,0 +a09570538230bec8d2051282e09937d2d3a0f514,2021-05-28T19:12:53+03:00,3693,2471,1053,1932,554,0,0 +4ac1cc194ce62efeeff04c33d0a2b3185bb4c825,2021-05-26T21:13:43+03:00,3659,2444,1053,1932,554,0,0 +3ac14ed61736343e953d79ac621500dde4498fb3,2021-05-24T16:11:09+03:00,3623,2417,1053,1932,554,0,0 +6d896e9002dfd6509b14fcce53ae4432e6888e53,2021-05-24T16:10:17+03:00,3617,2417,1053,1932,554,0,0 +99d53def658470d765476a4398d07bf5283637c0,2021-05-21T09:31:26+03:00,3541,2364,1053,1932,554,0,0 +57fbd4ea49b483363d095f190e1058394c048411,2021-05-19T20:42:30+03:00,3534,2363,1053,1932,554,0,0 +9685c77a707d1f924a9af222ef1fe9b471fb4dae,2021-05-19T17:25:24+03:00,3534,2363,1053,1931,554,0,0 +4f50f53ae11c1fc64f7e23db1f1023d08c893830,2021-05-18T12:59:12+03:00,3503,2350,1053,1931,554,0,0 +741c6d77fa5fba19484cdaa96d98fa30424dcc42,2021-05-18T11:22:25+03:00,3497,2347,1053,1931,554,0,0 +ae58af4e7d5cf79e464c5a6def1f53b43e5e1a99,2021-05-16T10:11:27+03:00,3496,2346,1053,1931,554,0,0 +1b91184f12a3e71d008acdb5e7eb76b1e86f5a65,2021-05-15T12:56:49+03:00,3391,2251,1053,1931,554,0,0 +3a01bee95c8ae0cc1288e251fcdd538c624eea95,2021-05-14T19:52:08+03:00,3350,2228,1053,1931,554,0,0 +20590a08317ae7f712c59e5ce33d82ef2f183676,2021-05-09T19:21:32+03:00,3342,2221,1053,1931,554,0,0 +b576436028e544d6e751bd88bfd6168346411445,2021-05-08T17:23:37+03:00,3281,2175,1053,1931,554,0,0 +9b8459b5879e6954cb62edd6710bd48deb3ff51f,2021-05-08T12:52:35+03:00,3273,2174,1053,1931,554,0,0 +21d6ccd089f43ce0e6ba441b8497fff920f967ac,2021-05-06T22:46:13+03:00,3270,2171,1053,1931,554,0,0 +e0e0da8364bcacfda6846abc513c8d70e2af3316,2021-05-04T22:23:06+03:00,3220,2143,1053,1931,554,0,0 +edd7cfd8cef803f0124d083aac4de3d658443b2d,2021-05-04T20:11:15+03:00,3187,2117,1053,1931,554,0,0 +6b06c6f73af0e4b61d736ae940d4db19ef3cacd9,2021-05-04T12:11:09+03:00,3096,2061,1053,1931,554,0,0 +b5f98822bb56047cd39565f154a8cadfcb15f6c6,2021-05-02T18:16:22+03:00,3046,2020,1053,1931,554,0,0 +d4d65c6fcf696bb7dcf3a06d1b5a3ea87bb437ea,2021-05-02T18:07:13+03:00,3019,2006,1053,1931,554,0,0 +24db4458c03014010f050c832b8633084b249014,2021-05-01T19:03:07+03:00,3019,2006,1053,1931,555,0,0 +8654bd179bafccd3460d3373249d5aee6bcf2409,2021-05-01T18:56:52+03:00,3019,2006,1053,1931,555,0,0 +fe7ad2de8f642b89b7086114f661490dc50cf4d1,2021-05-01T18:52:59+03:00,2996,1990,1053,1930,555,0,0 +6b70df8719785bfb0100e27d14f5df7146053c2c,2021-04-29T20:43:34+03:00,2996,1990,1053,1857,544,0,0 +7f38639fc477a6640fce04774018114a9c328c9c,2021-04-26T16:33:34+03:00,2935,1959,1053,1857,544,0,0 +c0c9bdb65eb3136f7029df8bcc55035dc7b415f1,2021-04-26T16:16:10+03:00,2934,1945,1053,1857,544,0,0 +022afcfb98219cf13d9c2074f5b871fb571f90d5,2021-04-25T21:39:47+03:00,2888,1923,1053,1857,544,0,0 +31cab6a7872705ec7a11c7ee38740e6dcaf884fa,2021-04-22T22:01:59+03:00,2862,1909,1053,1857,544,0,0 +382bc7b3f3097e025a1262d2f58d889f624d679d,2021-04-22T18:47:30+03:00,2809,1820,1053,1857,544,0,0 +8eeee8e301bf266745a2efad22b01075644ccd44,2021-04-22T16:17:49+03:00,2809,1820,1053,1857,544,0,0 +aa9c57e331ba9fbb929f741ff4798e20a91616b4,2021-04-22T10:18:36+03:00,2793,1810,1053,1857,544,0,0 +b2ba760b8207b93914e748bb28e7acbe35ed839d,2021-04-22T10:18:17+03:00,2793,1810,1053,1857,544,0,0 +e78acbbcf965f718fa58f96ea66187a8d35e1e48,2021-04-21T22:43:08+03:00,2781,1801,1053,1857,544,0,0 +e49d12622ee3e14751215df9aed907e3fa069e14,2021-04-21T18:01:56+03:00,2781,1801,1053,1857,544,0,0 +35fa298833248615bde7e95fcf5647f0452dd23f,2021-04-21T17:57:41+03:00,2780,1801,1053,1857,544,0,0 +4f9cddd68771a81f3eb66cf5ad02cb17dab3980f,2021-04-21T17:55:42+03:00,2780,1801,1053,1857,544,0,0 +c7630813c36eac9cf8067af35fe743b8b9dc4064,2021-04-19T15:05:27+03:00,2768,1797,1053,1857,544,0,0 +81efbdf27277de7a7e9dde154f96081524a36ce1,2021-04-18T19:20:58+03:00,2724,1762,1053,1857,544,0,0 +9592cad3afd6e210157d77eba18560f8f0053cc2,2021-04-17T14:43:06+03:00,2697,1720,1053,1857,544,0,0 +f756d6c4fe42cd4bfc7a8596cba956f57d0ba0b1,2021-04-17T12:17:42+03:00,2696,1720,1053,1857,544,0,0 +c50e6ed2673fcebdad5a50e198c26de75636a57f,2021-04-17T10:56:53+03:00,2624,1603,1053,1857,544,0,0 +244da2546eb15f2dd8a68126d1e48489087985be,2021-04-17T10:56:20+03:00,2624,1603,1053,1857,544,0,0 +2b4935ba773f35238fdcc0a2056b316163f5cafc,2021-04-16T21:50:01+03:00,2624,1603,1053,1857,0,0,0 +6ebf968c017f93e3a8b4c33acd2cfd291f22963e,2021-04-16T16:48:18+03:00,2624,1603,1053,1857,0,0,0 +2fe8ce6f0dc0a3e09cd9ec426689b6157e62bee3,2021-04-15T11:36:07+03:00,2624,1603,1053,1857,0,0,0 +52618736ca77e5ecb39719807384f0c49c92822b,2021-04-13T20:12:47+03:00,2596,1572,1053,1857,0,0,0 +be475e702cf41aaab7540ac30569ac4c2311b21c,2021-04-13T20:00:37+03:00,2570,1556,1053,1857,0,0,0 +751106d8c86fb4056d8d79b82f7d92fcdbfbbacb,2021-04-10T22:00:55+03:00,2540,1517,1053,1857,0,0,0 +32014e97d2bcca6d0060afad8a1a2216e43d65c2,2021-04-10T20:02:07+03:00,2539,1514,1053,1857,0,0,0 +03faea8c65d0f55c8910dbbb91f0b0d69745075f,2021-04-09T21:34:32+03:00,2503,1484,1053,1857,0,0,0 +43c3446e9fb34636ea80aa149ac5c86e4f1f74c0,2021-04-06T20:17:51+03:00,2491,1483,1053,1857,0,0,0 +d55b62899800e9b6d317542eff153e8c1b63ac7d,2021-04-06T20:17:34+03:00,2486,1480,1053,1857,0,0,0 +af0211208a41462a160a466d26178ec7280dd696,2021-04-06T13:46:00+03:00,2487,1479,1053,1857,0,0,0 +87ad371915306dcd9ca563814193a54635a0b100,2021-04-05T20:56:04+03:00,2482,1476,1053,1857,0,0,0 +c41a2567b68db24153e2f78d2bef482ca77c3490,2021-04-05T18:59:22+03:00,2461,1460,1053,1857,0,0,0 +c777b0b4b2f5394d05c2d12fd6e91064284f196a,2021-04-04T21:41:53+03:00,2442,1446,1053,1857,0,0,0 +09c09ac94285b62722e26c4ccf25906e41a3e697,2021-04-04T11:38:40+03:00,2442,1446,1053,1857,0,0,0 +07a34b94fbb037e37d9e5479209a2807514e8d9c,2021-04-04T11:35:15+03:00,2442,1446,1053,1816,0,0,0 +9197605658b64f71b3d53e1ab8aabd1fc1975769,2021-04-03T22:13:29+03:00,2435,1442,1053,1816,0,0,0 +718014f5db3d3358e171b24e9218c2f9452e3b78,2021-04-03T22:08:17+03:00,2426,1433,1053,1816,0,0,0 +da773a1d4bd1e75bc0d8d20a8e1d999b9fa70e2d,2021-04-03T16:00:16+03:00,2381,1407,1053,1816,0,0,0 +5e5c243ba8ef363dcf6a443832341ea44d35666d,2021-04-03T15:55:16+03:00,2381,1407,1053,1816,0,0,0 +6bbf600710719bf844bd884e055b8e79bfbb6167,2021-04-03T15:53:08+03:00,2230,1407,1053,1816,0,0,0 +1fff2396552149436ff13fa5893cf16bb3bbb228,2021-04-03T15:40:12+03:00,2230,1407,1053,1816,0,0,0 +97d5d2bb699691f5220281cc075b6e78d6c0e765,2021-04-03T15:39:01+03:00,2230,1407,1053,1816,0,0,0 +dcffb1658060c093c38a6adada1de5c55630d09f,2021-04-03T15:38:41+03:00,2230,1407,1053,1816,0,0,0 +ab84a36a1348d6226df8c730f65b88ac3bbdd11b,2021-03-31T21:49:31+03:00,2098,1533,1053,1816,0,0,0 +80d6256f5ec9c43e53e4aca4cabae8de4a57506b,2021-03-31T21:48:20+03:00,2098,1533,1053,1812,0,0,0 +286994dd42913a27f78c9c7f2239915ef7fd9bc0,2021-03-31T21:47:03+03:00,2098,1533,1053,1812,0,0,0 +e46c512575f3dbdd375853a24bcefec6677fde61,2021-03-30T22:07:14+03:00,2098,1533,1053,1812,0,0,0 +9c30ffa3a198dbccd4ed4fafec8d844991d2e449,2021-03-30T21:45:27+03:00,2098,1533,1053,1716,0,0,0 +e7fce64a54f376f727c9c6d046665ac8f41d431e,2021-03-28T22:32:21+03:00,2098,1533,1053,1716,0,0,0 +78cfd6586b9352b6347f772922b075050f64e815,2021-03-28T13:13:02+03:00,2098,1533,1053,1329,0,0,0 +9d39f4ee90e5f8f4811a3a44c557a3aa10cfd8f6,2021-03-28T12:59:55+03:00,2098,1533,1053,1329,0,0,0 +e0fcb960ccaeef1fda6cb87f2f5476d87b8a4473,2021-03-28T12:56:53+03:00,2098,1533,1053,1329,0,0,0 +0eff8c56ac5ded25018f608b1018b95eb6b3912e,2021-03-28T12:21:15+03:00,2098,1533,1053,1113,0,0,0 +22d86a6c24e8593276f3d12d45517c7c4d3ab4bf,2021-03-28T11:14:59+03:00,2088,1530,1053,1063,0,0,0 +0e3b17edb685c91d6bbf7088e0f8cbaf762b831c,2021-03-27T21:54:12+03:00,2088,1530,1053,1063,0,0,0 +93a0573fc41f58c6c7f94ac5beb9d6c5222906a6,2021-03-27T17:35:21+03:00,2071,1517,1053,1063,0,0,0 +845e1a273963abbb19275c34fc92d0d2d708d8f0,2021-03-27T17:29:07+03:00,2069,1517,1053,1063,0,0,0 +d869192bf14ab2ee9d68c633bb4644588d357a27,2021-03-27T16:27:39+03:00,2069,1517,1053,536,0,0,0 +ef440cfb499ca873054350a53e821ad658cb6d35,2021-03-27T14:28:50+03:00,2069,1517,1053,538,0,0,0 +2c3dd0b0af7bbb6dd726c82fc44b149d3a350583,2021-03-27T12:47:05+03:00,2069,1517,1053,0,0,0,0 +7a992d21eb87e74c6f135e562e71e171d2590314,2021-03-27T12:46:42+03:00,2069,1517,1053,0,0,0,0 +c520a1387d0cabcb6f908e93d1316fde7b462af5,2021-03-27T12:46:14+03:00,2069,1517,1053,0,0,0,0 +cdbeaa1fffa1ce2e6d30ae0ceec97b39a87ca604,2021-03-24T10:21:49+03:00,2067,1505,1053,0,0,0,0 +67f69904c610757b5a7523ce027c36f5c79f7240,2021-03-24T10:18:46+03:00,2067,1505,1053,0,0,0,0 +ce14de2074b023c935cd1077a82797a9040c6d1b,2021-03-24T10:16:54+03:00,2067,1505,1053,0,0,0,0 +b6fb14b7054c3fa91b9c8cc482b50d4fd8463a70,2021-03-24T10:14:26+03:00,2067,1505,1053,0,0,0,0 +54e153d02dabc29ddc9ec553fa677725e674d047,2021-03-21T21:46:31+03:00,2067,1505,1053,0,0,0,0 +4d116f29495302e8970b0fa7d3494e598aaa995a,2021-03-21T21:27:56+03:00,2067,1505,1053,0,0,0,0 +47f8a13f8da87f7ff304f0095f65eba080ec14aa,2021-03-21T21:27:37+03:00,2067,1515,1053,0,0,0,0 +7f7afe5b68a97743152fddce32b879744541eab4,2021-03-16T13:01:56+03:00,2067,1505,1053,0,0,0,0 +e258ec45ffe7bd9813a846258eac2ecc379f0486,2021-03-16T13:01:49+03:00,2060,1522,1053,0,0,0,0 +67b6dc3d2c99caca93bb345c051a8bcd405eb451,2021-03-16T11:49:15+03:00,2067,1515,1053,0,0,0,0 +b3224f4eb6461f709a42a78b447f08d1eef491df,2021-03-16T07:30:26+03:00,2060,1532,1053,0,0,0,0 +24981a6c8e57063c83ee29247670c3d930a14958,2021-03-16T07:28:55+03:00,2060,1532,1053,0,0,0,0 +bce9a520f37f87e1f03f664ebe5391378f0c112e,2021-03-13T13:16:37+03:00,2060,1532,1053,0,0,0,0 +9eda3a739ceef8ff4f676be03738c7c10664a3d0,2021-03-09T08:55:44+03:00,2060,1532,1053,0,0,0,0 +9d1ef91caa5786d1d5c95ab0782dd83ee0f9dc95,2021-03-08T13:28:05+03:00,2060,1532,1053,0,0,0,0 +2c26a2116191b2366bb0e95791b3280443c7e2cf,2021-03-08T13:18:35+03:00,2060,1532,1053,0,0,0,0 +7e75f0d9340c57d5e3541dbe882ca7a129f77649,2021-03-07T16:03:28+03:00,2060,1532,1053,0,0,0,0 +3f9d86fe95083ba35e555971cdd09f07de8e2c6d,2021-03-07T16:02:27+03:00,2060,1532,1053,0,0,0,0 +fad031bcb92fdf419c577e5555504eef769e5901,2021-03-04T12:49:53+03:00,1998,1484,1053,0,0,0,0 +f39411a3cd079b0daae00383e2473aba39eb6953,2021-03-04T12:34:52+03:00,1995,1481,1053,0,0,0,0 +42276738dff3e3ea8dc69b831e70b9fc0bafde86,2021-03-04T11:38:01+03:00,1995,1481,1053,0,0,0,0 +fd5f3eb3ea8f6af19ad735e3f88baff34180060e,2021-03-04T10:28:32+03:00,1997,1483,1053,0,0,0,0 +708e3021479e4f8408a4ed68daa73269dff8cb09,2021-03-01T11:29:05+05:00,1983,1469,1053,0,0,0,0 +6d0217c49c3c83546cf11ee95c5d53484594d464,2021-02-28T15:01:49+03:00,1983,1469,1053,0,0,0,0 +0429ab2126e080435cafc77ccc1e9e86adef2510,2021-02-28T15:01:33+03:00,1983,1469,1053,0,0,0,0 +077391d793ef085cde93f83b70b5c760b1b6c6bf,2021-02-22T19:39:16+03:00,1959,1454,1053,0,0,0,0 +a5b8c27879cc18b2089a74f38c2207450ad12cd2,2021-02-22T19:37:10+03:00,1959,1454,1053,0,0,0,0 +e4edc119e69ae357403daf360430fe16800f1394,2021-02-15T12:24:20+03:00,1917,1425,1053,0,0,0,0 +483af5e3c4d56fb90a247527c38b528c78ceea20,2021-02-14T20:53:31+03:00,1876,1389,1053,0,0,0,0 +167f1d58ced56b7b3586b0650d9f85e74a58bacb,2021-02-14T20:53:00+03:00,1876,1389,1053,0,0,0,0 +22b6fc87325dad25baec84c9d89df3544dd87336,2021-02-12T21:39:01+03:00,1831,1348,1053,0,0,0,0 +ddcabd0b57affdcdc9b63f49cae239ced321fb43,2021-02-12T18:28:48+03:00,1831,1348,1053,0,0,0,0 +89c54713da960a18fdfdf7ce3a9ec6b13e32bbbc,2021-02-11T21:03:44+03:00,1831,1348,1053,0,0,0,0 +e7b0bbc58fa9c4d70027ce8a089a95db92e183f6,2021-02-11T21:02:52+03:00,1810,1329,1053,0,0,0,0 +b7a40a3b7c25673a8d7eb0dfd0a23f92e2534174,2021-02-10T11:05:44+03:00,1810,1329,1053,0,0,0,0 +2e3c0412b34ff51266da33cbb89c7b9fdf94b88a,2021-02-10T11:05:25+03:00,1810,1329,1053,0,0,0,0 +16326a010d26c1217fbec8ff42cdd299d0d39ae0,2021-02-06T21:28:00+03:00,1735,1341,1053,0,0,0,0 +5483eeb34eac68015a9a66def102bcf8db54c92c,2021-02-06T23:15:52+05:00,1735,1341,1053,0,0,0,0 +fbed354c68e3c4b466fb29f8726fc4a8c05fff6c,2021-02-04T20:48:12+05:00,1735,1341,1053,0,0,0,0 +133530c1c0763dccb9ba91b5f8d281ccff571190,2021-02-04T20:47:57+05:00,1730,1333,1053,0,0,0,0 +f3b697a935e1564ced0995be0f298d52c39ac719,2021-02-04T20:47:31+05:00,1730,1333,1053,0,0,0,0 +a533a06d061ddbe74f77fc7c66e5af2c2022c5e0,2021-02-01T11:16:37+05:00,1730,1333,1053,0,0,0,0 +1496e7ec0392cfea4eb424e1da2308878bcd300d,2021-02-01T11:15:44+05:00,1730,1333,1053,0,0,0,0 +55343c49a9ca3c49c9c6fa715cb215b66e66067f,2021-01-30T14:36:51+03:00,1730,1333,1053,0,0,0,0 +09fe035d6f5500147a1897d039d995e5ab627cc4,2021-01-29T21:59:37+03:00,1730,1331,1053,0,0,0,0 +27ce988287c518f798b926dda4efab0cf6e89c7f,2021-01-28T10:31:42+03:00,1728,1331,1053,0,0,0,0 +afcf8ef14c5a8187eae15142100704803f2980ec,2021-01-27T11:07:17+03:00,1728,1328,1053,0,0,0,0 +33b7ae403693d2df7628b8899b79da27e76498f6,2021-01-26T21:57:38+03:00,1726,1332,1053,0,0,0,0 +229dce2461ef05617cbc2b716a331a0bcbd15b56,2021-01-26T21:56:20+03:00,1688,1331,1053,0,0,0,0 +29f620f809a129b6e0ebe96247fe9d8c8afaee6c,2021-01-25T18:32:13+03:00,1688,1331,1053,0,0,0,0 +d5953c7dd0b4fbc89f930059322c4fb2aad64a8e,2021-01-25T18:06:11+03:00,1688,1331,1053,0,0,0,0 +54983088c0d82da49eaeb918ea1dfc2a1c506872,2021-01-25T18:05:33+03:00,1688,1331,1053,0,0,0,0 +dfa19d31418cece79ccb438297bc99c9402394fa,2021-01-25T12:39:18+03:00,1688,1331,1053,0,0,0,0 +c872a03c989bf9ce5453aa6903a58add9115eb4a,2021-01-25T12:39:00+03:00,1688,1331,1053,0,0,0,0 +63ebaff53cea4044089a39a0ec797eea727717e6,2021-01-22T21:00:24+03:00,1669,1329,1053,0,0,0,0 +29f9d3ee07376106a74670207fc0e7e01074923c,2021-01-22T20:59:43+03:00,1641,1302,1053,0,0,0,0 +7c4cc0a498f77c69b5f1b9bc5fa7d52602900bbc,2021-01-20T17:39:48+03:00,1641,1302,1053,0,0,0,0 +dfc9956cb8cd814221e3594c4a254be236c52f2a,2021-01-20T17:39:09+03:00,1638,1302,1053,0,0,0,0 +d578d31d6a60224793c6168ec9246b47ae36733a,2021-01-20T17:38:14+03:00,1638,1302,1053,0,0,0,0 +6fe3ba654de04250751f0762ac378eae6f8c7649,2021-01-14T12:41:37+03:00,1638,1302,1053,0,0,0,0 +e6167f6ac4c9cf26c16c95fe3ac0b02c783e0a0e,2021-01-14T12:33:22+03:00,1638,1302,1053,0,0,0,0 +1ab81470e4651a5d7945c8268d750cf88be136c4,2021-01-14T10:27:40+03:00,1638,1302,1053,0,0,0,0 +cba9ad4f2517396b31abecde1dabcbf582937180,2021-01-14T09:04:52+03:00,1632,1298,1053,0,0,0,0 +a0265b82e724a130e1d7181ddcd968dc1ae12a17,2021-01-14T09:04:05+03:00,1631,1297,1053,0,0,0,0 +7877dd1bc6ebe586e8c87b555471460d197524ec,2021-01-11T20:05:27+03:00,1619,1287,1053,0,0,0,0 +d2dad7072ac5aecc39d1c2bf4cb305c209fde4d5,2021-01-11T17:53:45+03:00,1618,1280,1053,0,0,0,0 +f5db6388432210a20210df5cd00dae1320369c9a,2021-01-10T12:36:32+03:00,1570,1294,1053,0,0,0,0 +5a3f3fa4d6bc1c65e96099ad6af2a2c26bead55c,2021-01-07T18:27:10+03:00,1550,1277,1053,0,0,0,0 +8b4424e4e392e3bda1f0e96dc289ff261ab7ab9e,2021-01-05T10:39:48+03:00,1534,1264,1053,0,0,0,0 +585ad0747660e3fd3fbff0261cf01b99ec3cbf03,2020-12-31T11:53:28+03:00,1503,1246,1053,0,0,0,0 +ac499424a9eb9b599443f4a4309b61eabe7c09e6,2020-12-31T09:48:31+03:00,1503,1246,1053,0,0,0,0 +e4bbb752a0cf80b325ae216e9ea81fc78bfdc857,2020-12-30T14:09:24+03:00,1491,1236,1053,0,0,0,0 +81fbfa7ab3e9862904ed99d62164474db6f91b80,2020-12-30T13:41:24+03:00,1491,1236,1053,0,0,0,0 +1fad2e5ebe70df29dedd5ffbd06c7447d9942b73,2020-12-30T13:28:23+03:00,1491,1236,1053,0,0,0,0 +4e0d2fb6e2681d53b160d676858e1cdb1e81fd95,2020-12-30T12:57:37+03:00,1491,1236,1053,0,0,0,0 +a3f3fd784eff39f3dac57789a3160e6ff3d32635,2020-12-30T12:28:30+03:00,1491,1236,0,0,0,0,0 +7abea5d6ceb3cf7356eea79b47f024ba4f05b076,2020-12-20T09:17:16+03:00,0,0,0,0,0,0,0 +e39bc85628ecaff84cded2f1e9bbe92a4d8c49d4,2020-12-20T08:17:16+03:00,1359,1143,1053,0,0,0,0 +bfd415a0dd77bb9ab5eef89a396329bb3e6c4cbd,2020-12-11T12:57:42+03:00,1345,1139,1053,0,0,0,0 +0cf54d68feb5253595f04f8e7434f2c6e298e20a,2020-11-28T11:47:18+03:00,1245,1051,1053,0,0,0,0 +3f3504ca33e79296357dfb0682eca09863beefbf,2020-11-25T20:19:24+03:00,1214,1023,1053,0,0,0,0 +707ddaddfea796478ac16d54185ddbd7a5f8c082,2020-11-24T18:47:13+03:00,1176,990,1053,0,0,0,0 +a83efdaec5386bee0c7ddc8093ec279bb1c4465b,2020-11-20T22:41:40+03:00,0,1036,1053,0,0,0,0 +30219f8ec1a08fa64a6f7f0bf32491a19130b9bb,2020-11-11T10:55:01+03:00,0,968,1053,0,0,0,0 +6ff999d23d7ce6393b49dbcded3279af9c3ae668,2020-10-27T17:18:29+03:00,0,905,1053,0,0,0,0 +a3271bb7a58760f49710329e68269ac588028391,2020-10-21T11:58:28+03:00,0,655,1053,0,0,0,0 +c42173d363499c5e073e51bdccc9d247e6421b18,2020-10-18T09:35:20+03:00,0,614,1053,0,0,0,0 +8cea88e9ea892c47daf54d0844e3f8e2bf69330a,2020-10-15T14:01:37+03:00,0,410,1053,0,0,0,0 +b3ab7d320771a826390995df660dacb6cbf773a4,2020-10-06T12:43:53+03:00,0,0,1053,0,0,0,0 +7d7208ad0384a8ebe2a4e9807b0f88bc214aeb85,2020-09-28T10:41:14+03:00,0,0,1053,0,0,0,0 +958f363ca70a092fbf636bc198a27a7f3511415e,2020-09-22T12:59:25+03:00,0,0,1053,0,0,0,0 +208f4553dc15c237df9dac00b8e115107d030263,2020-09-15T09:53:30+03:00,0,0,1041,0,0,0,0 +63f9a8c0345c0c276bb8d602d7afa740f4c09f95,2020-09-09T18:47:23+03:00,0,0,1041,0,0,0,0 +9e17ed451f30f88249a5236854974242bfa0bad1,2020-08-24T15:52:43+05:00,0,0,1041,0,0,0,0 +587d6edb6a999580d921d7feb4bb4b6fb27af7a2,2020-08-08T21:39:06+03:00,0,0,1038,0,0,0,0 +ab4aadffa7858deffadfc037d0c586ed61971d27,2020-08-08T16:02:42+03:00,0,0,1038,0,0,0,0 +44f15a73a342acc4f5a336d4afdaad55948f9969,2020-07-29T17:42:24+03:00,0,0,1038,0,0,0,0 +4fe9afc57b5e22537ddcef251a0ca12a7f7b4a55,2020-07-28T18:44:45+03:00,0,0,1038,0,0,0,0 +9c6ae2446ba4c62f94dc462d7cfca367e29a80a2,2020-07-28T18:43:54+03:00,0,0,1038,0,0,0,0 +835a98d398908cfc06594123bda22930bd496a5e,2020-07-26T15:49:48+03:00,0,0,1038,0,0,0,0 +45d65fa04392cebd6abc7f55319b46e11e097ed1,2020-07-26T15:48:34+03:00,0,0,1038,0,0,0,0 +983827586e37e8b7555e3079f85b2cc3317febca,2020-07-24T07:13:57+03:00,0,0,1038,0,0,0,0 +ba8b16fb05cd2a6382cbe64538562e69e54bfea8,2020-07-18T12:31:08+03:00,0,0,1038,0,0,0,0 +0212d5380e83d0d909a1beafede68382a48692a3,2020-07-18T12:24:30+03:00,0,0,1038,0,0,0,0 +f8e1ccfd17cc3a19ff8fcb9bc2a931bdd3cc4d2a,2020-07-16T18:49:21+03:00,0,0,1038,0,0,0,0 +281373a5f2a940dfe9dd088ab39ab9165c82b11f,2020-07-15T09:28:26+03:00,0,0,1038,0,0,0,0 +634ea50e9215d5eb5bb96a0a371897810de4bc9a,2020-07-15T09:21:35+03:00,0,0,1038,0,0,0,0 +19dbd1e74019486d7e6d01aa62a36fc34b9a5fb6,2020-07-15T09:20:53+03:00,0,0,1038,0,0,0,0 +2f67e73efaabe1f3f251d65e0ac0b3e123717d16,2020-06-09T21:39:27+03:00,0,0,1039,0,0,0,0 +6118624a167f6f554a1d87370583be5a2e9c8b20,2020-05-27T16:03:08+03:00,0,0,1013,0,0,0,0 +57d54e38d0a7536a0869e6a0942788963ee4ffee,2020-05-27T16:02:59+03:00,0,0,1013,0,0,0,0 +ffbb49576dc31133fad21a3ab3a57ff7723bfeaa,2020-05-22T14:26:14+03:00,0,0,1011,0,0,0,0 +c03481f21e52a2a165cbd16d53dc8a151e45c814,2020-05-19T21:39:54+03:00,0,0,1011,0,0,0,0 +d7418bdcbcde041b6461d54563ec0114ad48ae26,2020-05-19T21:39:51+03:00,0,0,1011,0,0,0,0 +1ce7bb3b7faf0f6abaeb22f74939b15f404035da,2020-05-13T19:00:35+03:00,0,0,1011,0,0,0,0 +25355ce8eeec1703e6c6e5c77c86c99b9d70d399,2020-05-13T18:05:05+03:00,0,0,1011,0,0,0,0 +a676fb74a9ddec73a6eed0c943adff22d82f86e9,2020-05-11T18:46:57+03:00,0,0,1009,0,0,0,0 +dba4c7051df1deb6bd3ce388fca91e18564c9f0e,2020-05-08T21:02:58+03:00,0,0,995,0,0,0,0 +35bc4fcd993f2abb906e4c126b46e6f6d4f495b8,2020-05-08T07:56:42+03:00,0,0,995,0,0,0,0 +db54f66d8c8323b63448a6bcac24c694b407a500,2020-04-27T18:18:10+03:00,0,0,995,0,0,0,0 +5051d4a9a93d6c53d08176e32de23ded500685e9,2020-04-11T19:58:49+03:00,0,0,968,0,0,0,0 +9c0374e0a3e26c21a4b94f58d0fce6ab748a1901,2020-04-08T20:35:04+03:00,0,0,968,0,0,0,0 +478e9d9bc505594ff39ad86dae80faba49639138,2020-04-07T08:52:31+03:00,0,0,967,0,0,0,0 +9b14b0bf4c4c2688d9bf0c8f507c2876c3e8c0fa,2020-03-27T08:25:41+03:00,0,0,894,0,0,0,0 +569544c81b9e1dffda20f6f6c3ccb8d8cd8183d8,2020-03-17T22:55:11+03:00,0,0,889,0,0,0,0 +068f6138b4d59258e854a889a51cb867b0fbef99,2020-03-15T21:44:00+03:00,0,0,889,0,0,0,0 +76e3b3f25f8cac86e5d16939535343979e600b93,2020-03-10T08:57:45+03:00,0,0,857,0,0,0,0 +e9585c86349037ed4a6abf3746b116662dc48ee4,2020-03-05T11:44:08+03:00,0,0,847,0,0,0,0 +cb059221310544f7931d0b08b5b22ae2acc9078e,2020-02-28T13:14:46+03:00,0,0,841,0,0,0,0 +2a78620d5dbdeac8928c70e46578900c8fae0350,2020-02-25T08:16:46+03:00,0,0,841,0,0,0,0 +ff00cc966fba6ada8402fc4d52544f064e8eb17d,2020-02-21T07:04:13+03:00,0,0,785,0,0,0,0 +367d7abd8bcfae477f70fd00bf6ba48bbce53d0b,2020-02-21T06:56:30+03:00,0,0,785,0,0,0,0 +25421d1454145e17b7e8196666f2f6e1af1f1e9f,2020-02-17T18:06:08+03:00,0,0,748,0,0,0,0 +39afeb939ef92a250823c8a0f60fc3c04db86d9f,2020-02-12T19:49:56+03:00,0,0,748,0,0,0,0 +6f181eb0e4ad99e4012340cd253c98734e7b6e87,2020-02-08T15:19:10+03:00,0,0,748,0,0,0,0 +bf887b0b4daa447cf80a155377345c39ff1645b1,2020-02-07T06:37:12+03:00,0,0,723,0,0,0,0 +ca75876e1c40d5ad47640d123b88c3ea02dfbd94,2020-02-06T10:25:39+03:00,0,0,717,0,0,0,0 +a620c11a68e9bc06d1d281e852b85d4124a58e5b,2020-02-04T22:05:24+03:00,0,0,717,0,0,0,0 +ef158ec872a6977b5b0d5443f41586aa8d639e07,2020-01-28T07:07:38+03:00,0,0,691,0,0,0,0 +040f24f12b6cdbfdd4f1fac431abc476de20b02c,2020-01-22T21:36:35+03:00,0,0,684,0,0,0,0 +c064a71918d3e17b26df80789da61e76507b83d2,2020-01-20T09:00:19+03:00,0,0,668,0,0,0,0 +97657355749ec681d2fcf41f422e077b69c1dc45,2020-01-15T17:53:26+03:00,0,0,644,0,0,0,0 +8d845533bccacf2e1a4bd9dc6052de8876935c96,2020-01-12T13:42:41+03:00,0,0,566,0,0,0,0 +36912a33427e29d480d6073e281b77bbffa50fa1,2020-01-05T13:20:36+03:00,0,0,484,0,0,0,0 +dd078552597b827c1ced12379bfdde5222654605,2019-12-31T16:56:49+03:00,0,0,418,0,0,0,0 +117176319fc584fd132865740b6d413c40f25edb,2019-12-25T07:53:39+03:00,0,0,411,0,0,0,0 +c17914fa4ffeb96cceaa59fed93f711f41869cc2,2019-11-30T13:34:57+03:00,0,0,398,0,0,0,0 +91983f536b450061c3b8931806dd1727364a4747,2019-11-21T08:25:37+03:00,0,0,388,0,0,0,0 +c217e480bfb2328d2ecb5d7bb822b002af6c4ff4,2019-11-21T08:25:19+03:00,0,0,388,0,0,0,0 +315e167fbd494bc1cc49b5e13410f67a5314de7f,2019-10-21T10:18:03+03:00,0,0,379,0,0,0,0 +87211c3e501388adf3e880154fc6d0fe30c1f02c,2019-10-21T08:31:34+03:00,0,0,379,0,0,0,0 +bfa5fb959a5ef7b5b8f362992414ff5e0380433d,2019-10-18T20:40:03+03:00,0,0,377,0,0,0,0 +26dc6f9f72a9ac76c4454146d4404c7ad018d1cb,2019-10-18T16:57:21+03:00,0,0,377,0,0,0,0 +f7ec83d186fc546c424c87b6b3394a2b5d6a6059,2019-10-16T22:06:02+03:00,0,0,377,0,0,0,0 +1e2550f7381f2506987f5e71380c43d28575bdfc,2019-10-14T10:48:32+03:00,0,0,377,0,0,0,0 +273b90172e8f451fcaa561bcdf682b287e4ee04b,2019-10-09T22:00:03+03:00,0,0,376,0,0,0,0 +474903d04ea3b7acc5d3c55f3b5d3283320ff4bb,2019-10-04T08:55:27+03:00,0,0,368,0,0,0,0 +2b82da4a18274de3ba82c99137083999b1df7e7a,2019-09-28T17:33:16+03:00,0,0,364,0,0,0,0 +ecc70effda3f7680864e5abc0ec9334c56288bb8,2019-09-18T20:18:25+03:00,0,0,354,0,0,0,0 +bd170af28494bcc3100fb9a98c2edbf5c9e4dcb3,2019-09-11T22:13:34+03:00,0,0,350,0,0,0,0 +4e13110bd4ee9007950a119c387cee53165209e7,2019-09-10T12:32:11+03:00,0,0,316,0,0,0,0 +69e6c77f0b382da16c2f704dee9f5c26a1033543,2019-06-21T20:19:08+03:00,0,0,304,0,0,0,0 +15f77e6947d4e6dc4a2c4eacc424436629e70535,2019-06-01T11:59:02+03:00,0,0,288,0,0,0,0 +b885ed7594f8f4e30e3396add6a9e5bb221cbe90,2019-05-23T18:12:27+03:00,0,0,264,0,0,0,0 +b866f7de55fb8e6383d4e7fc5446b73db08a0af5,2019-05-20T22:30:19+03:00,0,0,247,0,0,0,0 +e80709e371b9586a7cc104c908111f8c43b8cc6e,2019-05-20T10:31:15+03:00,0,0,229,0,0,0,0 +5587b1deb21e8b010f1e08ed7c54925e87b7ab7b,2019-05-20T10:30:51+03:00,0,0,229,0,0,0,0 +83450733e407d9d3988851086cc6a966b2e58302,2019-05-19T13:13:36+03:00,0,0,227,0,0,0,0 +5d3c243cbaef7e178f31d00b7d503aca2297af16,2019-05-18T23:38:16+03:00,0,0,227,0,0,0,0 +02e74e52f04758d0fbcca1531a45939bce2bc397,2019-05-17T14:25:10+03:00,0,0,218,0,0,0,0 +463db6e22059078ebbb42fcc4b8a2ac8815d42e2,2019-05-13T13:48:16+03:00,0,0,217,0,0,0,0 +e4a1a9e40a9eb00dc867d900f91cede36e415c38,2019-05-10T15:35:36+03:00,0,0,217,0,0,0,0 +c9727bf397a3941cdc98fc4e15f69dccbc29fc01,2019-05-08T21:07:58+03:00,0,0,203,0,0,0,0 +0b9731f31c6fb41921fd4bc0b89438dc509cbec4,2019-05-08T14:38:49+03:00,0,0,197,0,0,0,0 +18bd6fdf9d41ee5b56c4ae78c124c3d1fd5d87aa,2019-05-06T00:02:57+03:00,0,0,159,0,0,0,0 +2ed4d3a8ef86ef61b300412e28eb899635f657f3,2019-04-30T22:21:22+03:00,0,0,159,0,0,0,0 +0efdea9c6dcfbebafdd2c0477df04ca20fc27fb8,2019-04-22T13:39:06+03:00,0,0,145,0,0,0,0 +1a861308ba62c0ed7151de2ef177e9c4be9159f7,2019-04-22T11:51:31+03:00,0,0,145,0,0,0,0 +9c07ef14b5494720b850b4bd060d1deb088a95f6,2019-04-20T14:12:01+03:00,0,0,137,0,0,0,0 +6f0c52b7dbd8108638eeb7adc47736e1ed5d7649,2019-04-20T14:07:42+03:00,0,0,135,0,0,0,0 +5ce2dcd9fa929d3732230eac379073182eb56507,2019-04-18T18:24:31+03:00,0,0,134,0,0,0,0 +4bee614548d574c27202d7ed03895317e73df765,2019-04-17T23:07:21+03:00,0,0,132,0,0,0,0 +bed50d44db96ce0784539f4e7cd35c755e19bde8,2019-04-14T14:02:12+03:00,0,0,104,0,0,0,0 +aa45f576d4c2fbbb878af041495f7ee72781f49f,2019-04-12T23:42:06+03:00,0,0,99,0,0,0,0 +4d7fa920a40fdf3064fc71d16830cd6a4de046c4,2019-04-12T18:24:23+03:00,0,0,91,0,0,0,0 +1ff1714599ddf2c41e0ab75562be495e55bb35e2,2019-04-09T12:47:05+03:00,0,0,91,0,0,0,0 +f396584f72311246c3b52ed68d778745df5aea90,2019-04-03T10:36:35+03:00,0,0,91,0,0,0,0 +fa57d73f3597407223ff205439cfe84f338ec3bc,2019-04-02T17:52:05+03:00,0,0,91,0,0,0,0 +e4cc35e62e20104fec2dcdc1220de7ab1980cc3f,2019-03-31T20:06:29+03:00,0,0,62,0,0,0,0 +5044283019dc34c95d2836485ed492b34f49230e,2019-03-31T13:52:50+03:00,0,0,62,0,0,0,0 diff --git a/data/2023-03-13-emacs/roam-stats.csv b/data/2023-03-13-emacs/roam-stats.csv new file mode 100644 index 0000000..efb4e79 --- /dev/null +++ b/data/2023-03-13-emacs/roam-stats.csv @@ -0,0 +1,599 @@ +commit,date,nodes +7d2146ba5d0657b73eb68423727bea25311131d8,2023-04-10,782 +587b56bc6e9daf00cae2e6e68611a02480272349,2023-04-09,767 +fcc7be872eae173fced04193293b409687fdf348,2023-04-08,766 +d321c16721b6931a3d4e3964efaa6524b04f1740,2023-04-07,766 +5191644d9f54d51e74cd2a41e7293af1f369e525,2023-04-06,766 +9038b9dd39b98832cbdcf988a5bc1b84b23d9ae7,2023-04-05,766 +c313be402a76ab0908f6ebe0c0f4046ee2bf39cb,2023-04-04,761 +626c90f5262ecfbaa0bbb9c1fce15d7cdbfacdb5,2023-04-03,758 +63bbe29b3fb505aeb6165dd3024f911ef5dc21af,2023-04-02,758 +3b4a5cedeb9c3532b3032a5ae71142997dcf03c8,2023-04-01,755 +7ae3d9e9d1601efc1a936dc3dce05b08d769acbf,2023-03-31,755 +7331740d20329f50dc32278b4193f6b1c44c1d1f,2023-03-30,755 +d820d5e1107f1cbaf62e364d7220ae8c49e972fe,2023-03-29,755 +c1904342faac1cc033f9dbc31ebb3a17de43401a,2023-03-28,752 +ce1e015ef924afcabc7fedca6526269e6deb8739,2023-03-27,748 +996a6d4faff65a1e0c0a9feb4fe90a597e21b401,2023-03-26,744 +bdbd06b53e60270dc36c23df3adff5149a79f311,2023-03-25,728 +ddc0d3a57c7ec11a41142816b290c7d29420497b,2023-03-24,720 +8649b00592142da7b23f2a435586e9b693a33cce,2023-03-23,649 +611fd512295b30ea9a020ebe006335b099bc493f,2023-03-22,649 +0dc1e8f555b83e5bf66b9e55973b613a8a46e324,2023-03-21,644 +e13ec465361575256d7b2411ca1731ddb5113c86,2023-03-20,640 +7c709caebe1853cec9576410d04c1f97b8e90439,2023-03-19,640 +38d4421a645ccd0b0e67754678760af20646c58f,2023-03-18,640 +6a224aa648ecb0f2daf3a3cef1efd028e2b1a113,2023-03-17,640 +1a71c0b1f5cf1c0c7d9c63aaf1524386b1f6b922,2023-03-16,640 +3c5da73fd9cb2e58b4a423a8fcca9f562b1a7d2e,2023-03-15,640 +53c5b9810d66ce574fa0ba30422c2804910d2696,2023-03-14,640 +3816308a83090e0d14d48b8947bc3fb38d7e539a,2023-03-13,638 +02c8120a41f6eec194605e3c406117430c09de12,2023-03-12,638 +9eae91861501ec17c98d240dd39e079185898092,2023-03-11,635 +2cfd7cafb24bd91f6d4b0e6494177296d889f0aa,2023-03-10,635 +0dd579bedd9a5a5ea5c857f5937021052789c32d,2023-03-09,635 +6a960b83dc4aa61be58ac684055b72b5c6a898b6,2023-03-08,635 +96577929fe5c9984645c6e4a2b8ffadeec6203f3,2023-03-07,635 +0d1233ad24f80567f16fe68c47ec925de9f503bc,2023-03-06,635 +2bf72e7564e873c22e7319114a4312f7443f825d,2023-03-05,635 +ece45ab57d1d8573bd768a426ca0552155acbea0,2023-03-04,635 +c21e4bbf4ea16d124a8fd301b43ac91d1e1118fb,2023-03-03,635 +5dce76e69141c9b9b844da2101bd84162b7f83bf,2023-03-02,635 +71f0c44a73c495691d183de652fc4eeec68be48f,2023-03-01,634 +54082f6b8b87171bf01ffa349aea627c98ecd7e9,2023-02-28,634 +24155e199711dc1bfb03c632a8b3612a3688d6ec,2023-02-27,634 +10b626d45bd028ebd1744a99e773c9c93af630f2,2023-02-26,634 +bd45afb6a2450810732527187b859c23d20d3490,2023-02-25,625 +abb95acc6c90c773c3e9e06b2f94141be7e59433,2023-02-24,622 +e19679b51fdffc379c2aebe0bd80434e926a22ae,2023-02-23,622 +735b9ac1360451f4fad4f8bf017191960ee632db,2023-02-22,614 +f417f6fb5e7bc951c53b6658ca683eb4505bc781,2023-02-21,614 +4147dff4d5420826d2528b501ea96b789e160fe2,2023-02-20,614 +4146b1fa835bef59d2fe3ded09967f7004fc2608,2023-02-19,614 +e7915bad596085c381300c70dce5782633e0b72f,2023-02-18,611 +45d989f9fee9d45ee8600c1caf5d0546e05f58e9,2023-02-17,611 +67e4b48386053c036ef4bbe2a1beed0063e32d0e,2023-02-16,611 +a6cc6a82eef96a02861132a3f44913447e5fdab8,2023-02-15,611 +ace67c9d64efaba295eb5fee3969a805c52fa287,2023-02-14,611 +43a6a3a93e0b10c1644e8cc040c621f3924661a7,2023-02-13,611 +94dd819a281752a78aa92db018979dcd732f4f04,2023-02-12,611 +83cac83f6a9198a058b569c088ff5784b4a352db,2023-02-11,576 +b754ccdd7c603b8cacfa8edf83d45fff8758d456,2023-02-10,576 +03542592d57716e484f732f4a8f676dd941e6905,2023-02-09,576 +e87b4a6de153f32750240db68b020ea090d39ab9,2023-02-08,576 +063d0d26c92b99762cc9c1d8ff106c86df952a16,2023-02-07,575 +983bbb45af6142b4722505213ab5fd5a027468fb,2023-02-06,575 +f4363df6483f7e3177d1bec57773183508a832c4,2023-02-05,575 +0963686ca01479bee659416acf5320fdb2044e22,2023-02-04,574 +1c66246a44c7a60368bb9f8c5a67e3e932a745c0,2023-02-03,572 +a11387d4ed83d8833327b6c96a602f3dfb1f9708,2023-02-02,572 +beabc4253b3f1fccb600e9f61809de988d8ec58c,2023-02-01,572 +febe7bbde32ad8663525639efce506cbc8c45c3c,2023-01-31,572 +e76082b09b229e6259c929008225a11854a86ccf,2023-01-30,572 +a0481ebde5404f6aa3e753804f1f12474203c6e5,2023-01-29,571 +c39a78dcad99541598427a5656f78d78e78c7a1a,2023-01-28,571 +11b3d023561940c3da8a4e8208c56e16f13d6295,2023-01-27,571 +d90e0786d630e19e50118b0bc08dd1feac349338,2023-01-26,571 +36a42a99798d4a7ed4d42ea2296e3f0c5478a665,2023-01-25,571 +f6b3a7f0a0d9acb00d2e00130a980d0a00a03778,2023-01-24,571 +0b91db129dd827e7e80f2bbf59cccfbba19ee9fc,2023-01-23,571 +328c6daedd5f56c56ac0e662ed52d85b5ca78475,2023-01-22,571 +42f74c81d1c13947f01122a8b0278de4668d26e1,2023-01-21,571 +5b6750af58bdd7f3f97b984ba6a912dd583756c0,2023-01-20,571 +10ecd58c1c7da8d0b7a56305ce495e8e89db78dd,2023-01-19,571 +ec8dc2d671aec39acd3876b9f34dede563e33019,2023-01-18,571 +15f82de47dbdd1405f0af7e37c86dc24f885b5f7,2023-01-17,571 +3b6c956eb739f7961374c7496a81a445509696db,2023-01-16,571 +a2750287138c69f6153216a6001c013c13608dff,2023-01-15,571 +09da5b749b67369afd1957df7b22810620b4a8fd,2023-01-14,571 +42c1bd3838d5b636dd412d3f02d2d88b3232e7df,2023-01-13,570 +802812876d58c7ec669370acdab3cad940d59cbd,2023-01-12,570 +ee7118f5ba67c4ccb68d0d28c7534b83d5a1653b,2023-01-11,570 +73ebf5a1a39847a338fa6fd36d4a56f36ed89a74,2023-01-10,560 +71a6615b379992253501b19cce5b7a07611abf3e,2023-01-09,554 +7d8b0f93ea6ce549a6be9c69f055d714874e7440,2023-01-08,554 +5090a8249579b05fdfb38766f90741bbaebc1772,2023-01-07,554 +8ff01228477f77bfe049e731745490a5422f6bf8,2023-01-06,554 +ebf41880422e90b1e2af43d56d7661c1710d1edb,2023-01-05,546 +d701d6634ff643a9bb53820a2a0428e75f02c0e4,2023-01-04,546 +c41c1aa5945bf7a31a674ab3e666f63ee4d3e510,2023-01-03,546 +c9a7619d65e9435dc754ca57cf45c4f5b9e72fed,2023-01-02,492 +1b6ce52785b2839e5bae4dde1f997196a29f691f,2023-01-01,491 +b85cbb2b42f8ef2c6a21933fe0de711c7b2ab548,2022-12-31,491 +9c2d0adfc4773ab5bb2ad80be53ee2a52f776891,2022-12-30,491 +f7d5fa85e4d8fb2325d0f5240486ae6fed035d46,2022-12-29,491 +c1a2b14b471f5aa2057f996945f16cab0554b698,2022-12-28,491 +541e6d8012cde71123f582cdf317d5008205ce7a,2022-12-27,491 +d48bad04cd0de72cb52a7f3c95c4dbd9d0da9910,2022-12-25,491 +6b020eb46d9bbea33322f50b286ea734848020c5,2022-12-23,491 +54ce903b18bbf11018b87c05efb7ef9c8e4bb5a3,2022-12-22,491 +96d74247dd09871653ff6ebd9e39fd51668e0abc,2022-12-21,491 +716d7f904aea55d1f188510fec9a368641ed3682,2022-12-20,491 +95021c6f8531a9d3ec5ed2eb7cad452d8973e5f4,2022-12-19,481 +93f4d63413a4bd9abadce61df3af3d7c33a43150,2022-12-18,481 +0e565a9cb37141a8d111855b2a6a739da33dd7f2,2022-12-17,481 +9e9e4ed1cc6d6ce2aeedcf46b6e8218efada0a5b,2022-12-16,481 +75e9b54e1d32fcba951fa266ec2b10a7f75a0c22,2022-12-15,481 +df2482018d82ae6168bc5b0aaad7b23d12a2b652,2022-12-14,481 +04c7c1f2cfff75a053861b9047f60b5b512d1499,2022-12-13,481 +04a95cdb55d6e947f692c929b255f83ac618f2c6,2022-12-12,481 +0ca716683af7d0e43ad940e70a4eb51b90e7da38,2022-12-11,481 +d1cd3d313bafa3e39a8791d5aad1380f400e182b,2022-12-10,481 +94a1e2b91b0546eed6841ed10400a9435b2b1e0f,2022-12-09,474 +20f6585a0134efa2fdbf9cac258ede54b36cdfd7,2022-12-07,474 +f7beec5edb2ddd7620ac83de2b38f183d0b3a05e,2022-12-06,474 +daf12421d3656b508dd09f51906cf99b94546787,2022-12-05,474 +f5d5f4af8f5366e421b086912f697f16c826f88c,2022-12-04,458 +5554b9bb0d537aad38b9ad034104e94bccc11aac,2022-12-02,458 +557b474d2123100f1c7346a0a8335b4e41b0e80d,2022-12-01,458 +2dea686b87e1d88aac1aa32a3549ec94e1952e60,2022-11-30,433 +92ccda71e56707ad4fa43086f930b989c729efc4,2022-11-29,433 +48fdb394dc54f174e379374481fddea370a6978d,2022-11-28,433 +5a524ea021438e364b8a0b2a0b0dd0d9b207e60f,2022-11-27,433 +517f4df898b80febbe134ad54fac4752d7e19bb5,2022-11-26,433 +1cbdfb0c3adbfbdeaeb1298f1fcd3025c1db16a6,2022-11-25,423 +218034df9d72faf7b6ba68009ef8d41ca96d1989,2022-11-24,420 +5aebea4c597c3f3f2e8d2e7d4b76e450d1ddfe5b,2022-11-23,410 +a2e11724e8640ace7c085674e86d87f073d8ea05,2022-11-22,410 +ef0646a9be637daf65ac4db908eb96696f3894bf,2022-11-21,410 +16e80a12ce7a040de4d6e97efb8fdcde054280b2,2022-11-20,410 +8fc56a6be3af76d9fc273c90661a8165cb03a467,2022-11-19,410 +0503fe3685c68bd8191f8e35cbeb84e42ff8c831,2022-11-18,410 +944cbfa346d760b940dc8166c2a014afe4335d83,2022-11-17,410 +f697e4dc8dc83d9d583855167c8a126bc5c77d51,2022-11-16,410 +51a964210d1117a3372f9a3c2e7d2289afa3fd6d,2022-11-15,409 +1474187381cee1fe56f49b0236fbda9eb9ae352f,2022-11-14,409 +5b135e6083ab66b7c6fac06d5be44c87fb0a39b6,2022-11-13,400 +52b33e419c8034f2cdb49141fecd260163350a44,2022-11-12,398 +65ad217fe94b2274c47fa550c227a4fedb3e4407,2022-11-11,384 +2a23bed5749ce5e6fd69b873453c8530f4ce22f3,2022-11-10,384 +835a9bfa53f9180603096b82ea490a29a1b02fb4,2022-11-09,384 +539ee51b2c38688d4e94cc1e05aa140892ad2269,2022-11-08,384 +f270ef9dfe1e976cd27b9f020a9432d50c8c10cc,2022-11-07,384 +a093b45b7f318627354245b260e0dbea0e4e603e,2022-11-06,382 +8384c240655f20fe382ad5348662d87a70e2595e,2022-11-05,381 +60ea76995d1dfd96c72513954367fa7608acf7aa,2022-11-04,381 +67cbc40ee38091338bde12b9054786fcc038ffbe,2022-11-03,377 +06ff91651d6509bca253f5cc9c307193eb89bcb0,2022-11-02,377 +3db312af50fdb550bf6b14b87dc2b9724b9bd835,2022-11-01,377 +b3360a6da4b8b3f652e4aabefcf95843deb16912,2022-10-31,371 +8829c16b02f25e3f5b1c963075d29c6d69709f41,2022-10-30,371 +01185d0e3bf22db294ca75b2f63f9077f5ec77ba,2022-10-29,368 +3449d24a3e83b5bf5a2ec43cfaa861e55a3c8f72,2022-10-28,368 +93a3763e89fde8b341650834b5ab43356144c93e,2022-10-27,361 +983c6c1d0896a23c2294597aa46d95bbbe184d49,2022-10-26,361 +2c3d5410d8b12551211e36663569a085d108f34f,2022-10-25,361 +b644033ec7d0d967cce48681236d1120274f5705,2022-10-24,346 +1fd3205c62626ce368b8e197d03a38c4439607d0,2022-10-23,346 +810a15ed945daa96fd82655ed6584ec0331fab53,2022-10-22,331 +f2854af27ad1b4aa648565b20254a0e0536792d9,2022-10-21,331 +caade03be3adf65267e05aacb4839783936e5740,2022-10-20,322 +2347b8fba3d77d0074a8f03ff7d0e91497189722,2022-10-19,322 +205e4b150765b564e4cda9dff226e30cf965c742,2022-10-18,322 +c37102a49aedab3616165cd43424ddc2cea54437,2022-10-17,316 +49ce7bc2b1e6c33da16cf6b15cdeaffdc9bd549e,2022-10-16,316 +4dca5339bf43f60f5b7708b08074780d4f97337f,2022-10-15,311 +e23cecc3ecd6815a010ece192410b3234c584b6b,2022-10-14,311 +3d3d2ebd3b93462bfe2a7324f00774f5b9477d32,2022-10-13,301 +a6dca2f508264cbbf598bde6daac966c819e6f79,2022-10-12,301 +6cfa6b1fd0bd980d96aa49ce36fd434b85537c18,2022-10-11,301 +2f17f60037e2e23c6f08739506d443c95380dd9b,2022-10-10,301 +7c772b75f09c4575de915d2431c3b7bcd9b663fc,2022-10-09,301 +3a2c43e2b8b7648081813f6f719f877082c09e0a,2022-10-08,298 +f05273468f0f539267da93d91b34aae74b9e7621,2022-10-07,293 +418e10308d2e664c774d9b90b7eeb11c9923a02c,2022-10-06,293 +538e08eebd770b0a98e3ae7beec652af21a22c2d,2022-10-05,293 +93e73f373c5515725f2bc90fb94485be7d5acc78,2022-10-03,292 +a6a09e09d8892c4d9b2079744e08b836617d6fef,2022-10-02,290 +085e857f6abac4864079793a83866d90e77b17dc,2022-10-01,290 +fbcc03448e817337602a7236c1f19b039675a387,2022-09-30,290 +2785c689baa1698d1849082fb400be692cf5d5d7,2022-09-29,290 +162cdec1af7121e6bb0eafbf6bfd588bf615af97,2022-09-27,290 +7087c29251339e8aa3ba8fdfb69c7dbdc05f3b4d,2022-09-26,290 +7129ad92cfe5f1af675a3731ddc55bf8d036afd2,2022-09-25,288 +fb30f3a595b8e7136d864c72e8ebc56fd02f4065,2022-09-24,288 +0c3fb94fbcfb0e8b99dd63cc4c4db21e751a900a,2022-09-23,287 +9a2f831bdf100eb12a248d80ae1aa1c236f017af,2022-09-22,287 +07ccb94805c5c4dc8660b3297cbaf7a9f75ea196,2022-09-21,287 +325a02d02a0a2154c3692b821f68134db3e98011,2022-09-20,287 +73dd8430ae7e183f75e396f8ac3900739d11eeae,2022-09-19,285 +ac461b2e16c3ad14737d27b92c137f21776a03eb,2022-09-18,285 +4a7969820fe38062a1d796b8f8e036cb305a9e9e,2022-09-17,285 +101c9a0320550459cebde75fa8ca0782af9434f1,2022-09-16,283 +7cef09035cdc9aa27e03944df8df8fb6a1faa78b,2022-09-15,275 +44cea8eb1557bb36c92ec42500ccee1d55d88553,2022-09-14,275 +72fd1098d6da914b3131b7139b2a3574fabf0c94,2022-09-13,275 +6ab2ef94c8b39671e4bd5f0c1d46b204a8fd7fc9,2022-09-12,275 +d1fab225bd3964ab676a9c2126d925023942d3a6,2022-09-11,274 +119643ba2a4a007bd81ede293155e42eeebed646,2022-09-10,265 +48cafa8a2be437190cdf32b3adbe95a05a6c8f0e,2022-09-09,255 +38774fdaa3a2aca08738f39a24d69ba07dbf9e7a,2022-09-08,253 +43c656ddd5b4915718d78a623e1bc5c70e9fa286,2022-09-07,253 +a0c76ff22985c24ed39cefce1ac4e24f184b3878,2022-09-06,248 +8fe45cde534e57f8d2760936290f9cf34faaa9ce,2022-09-05,248 +d4b3b61376388b60a28e8507979699aedb2a9459,2022-09-04,245 +e52b6077be9afb11c95db553b2e8d6dfb0a56280,2022-09-03,244 +d8ee0e721379e621850321983fe58207938827e7,2022-09-02,233 +f343a3681659834916fc33ddf6b20e6beadc7fc0,2022-09-01,231 +841ce0c5e1ed273dfdd9017fd63902869f09f4fa,2022-08-31,231 +3c0ebef568c9ae7d3d1888b4106f0dc30ee09887,2022-08-30,212 +efa9ee4d116dc7ec4a29e16e9fed5b3cb3634252,2022-08-29,211 +2b080b832aecad6a1f5fbc89a0bccd2ff9aa1747,2022-08-28,208 +2f123edbf2525ba67361ecb0dd7510e4229808d2,2022-08-27,207 +d19c64ac096eb4495563346bcc445df465d613ec,2022-08-26,201 +8b40de811b668f8de97092da780ef402089f0079,2022-08-25,193 +a0529c2f1443f3d75990aa8e7a82d4bea22d7792,2022-08-24,193 +0d3236702288028eaf9fb0403ef4e486355f301f,2022-08-23,188 +1d32f3aad237d80a0c2171215a159e18a77d1e9e,2022-08-22,188 +26bee1cdf63cd5ec8eeee76ca0f0fc3ae823efa6,2022-08-21,183 +aa7a1eedbc6c414498e5489ee84474c17314134c,2022-08-20,183 +cf5f67c0fb14bc47666cabd10341851d114b8b19,2022-08-19,182 +d738dab01fc2d396004645093749e448ebdf4f9d,2022-08-18,179 +8e2858516d066263015cd3fe494bf4dcfec7cea8,2022-08-17,175 +2c597253b0168a6161cd77dd0ae17ec12b76caf4,2022-08-16,172 +b9f0e34aa96eb4797472dbdeba0d91e1135851ef,2022-08-15,172 +cbb8c34d3e29b6c0681ab51698c2ed67c0889f8a,2022-08-14,158 +107382aa8536339ae288a4103359755c0e760960,2022-08-13,158 +f82394576103d47d8485bdf871af1faf93ade795,2022-08-12,155 +988ebdf89f6f135997223beb1982060d87374fff,2022-08-11,117 +86b8aa54a40e7d92cbfab844295dbf49c6812ac2,2022-08-10,117 +e7ab61d234fbcfb942f62e7270218119ec68f3c1,2022-08-09,103 +bcc9f88ca12bd8a081154c062e648ca1b7f77abc,2022-08-08,99 +48611bde1d7dc11a6b2fb7982928b0c4ca0f35b2,2022-08-07,92 +e661b776c8d90e1ff61179392172026be40effa4,2022-08-06,92 +362d2e5af651d33ebc05d6c0b1b11d106de816df,2022-08-05,92 +ac7610faff813ef5173dce2b101d88d1fba3834b,2022-08-04,92 +47c00deef8ab63d42fa1f8a7668c86c4b21d6ea2,2022-08-03,92 +4243f108eb56bcd4b957235dfdfa742c05b68c03,2022-08-02,92 +0a2490c29de09ba73babe75f93a4ea8de63ef134,2022-08-01,92 +4729118405c64c84e2af01d3daa808d44093bfb0,2022-07-31,92 +7928338bbc652e5f81b2f0b7c46b4457be83832a,2022-07-30,92 +2b9346a2de7689fe72bd10afae8a8c07693875a4,2022-07-29,92 +6c7893fffca014c4d9c27e7875896dbf9da756ba,2022-07-28,92 +c753a9083e7d72cb74c376b8666db6da895f929c,2022-07-27,92 +0d36226b85ee9cbbf3a5d5233877976d2d8aeb92,2022-07-26,92 +add0b492b4f7c92c1cdf619f9b87111bc675559b,2022-07-25,92 +655f8d79f63323d85901f8927fe33253c5f26e71,2022-07-24,92 +f31cb791a15f775e605e3c65b2f3db7f8af6166d,2022-07-23,92 +044dd4b4677341a7ea66d91bcbc67c98588f5c9f,2022-07-22,92 +603e308fe8dd8959855ff77f92648114040e267d,2022-07-20,92 +286e81411aac76343d090da080e653c5bbb43cdc,2022-07-19,92 +0a79b4b58eeabdbe564f64e4a9f200da91593850,2022-07-18,92 +2fdad183d485d94aab5ac9b60d9c948b73285b76,2022-07-17,92 +eee585a505ae9020a78efb1d5391d2539da931eb,2022-07-15,92 +50a7f01308241ed7ed161ebdc6f45417ae32474f,2022-07-14,92 +1f109765f709a3e64dafa72b35777a6dab0ddb25,2022-07-13,92 +4899aee5e52feba57917365917332ab805cd857d,2022-07-12,92 +1a397e5b1ab95ddbe3f9ad2c417bdf7cebb0e0d8,2022-07-11,92 +da15c955ea857d36cad5d4b0f0376f64c1174b79,2022-07-10,92 +6f6de53aa6882109f7aece8af3f782d6c5b4d2d9,2022-07-09,92 +bf19671c1ad2796bb0bccf792e86024b7be499f7,2022-07-08,92 +44f0273dda80594bb2c0013edded9ec7b4c820dc,2022-07-07,92 +c051ca84f94b3d9f74d746e50f69bda71cd75705,2022-07-06,92 +5671a906fb057c7190a5f1d0b30d521cf3ae4bc5,2022-07-05,92 +1cc1ad4cc1e8697edefeffa18bcde175a2da2946,2022-07-04,92 +9ff0d25b1f971ca6b17ca5cc1ebdf47fec3903cb,2022-07-03,92 +dd62eddac517989169fafbf4d8bcb962c13e90cb,2022-07-02,92 +2c5f24ef890fbf8e41657f9ea6dc4f193066d01f,2022-07-01,92 +088adf6e18cea941219fd043a8e375e6b065a164,2022-06-30,92 +7e89bea327abdab506bb31649da75fcc7ce2e168,2022-06-29,92 +92d9f6511449ef59e7b8dc646b66e8401c96b474,2022-06-28,92 +f11213a2e98eef02965cd2fd2cf9e1932191e738,2022-06-27,92 +dc2d74f3d23f7208778b6dda20cc24a0e1712710,2022-06-26,92 +abbb0d386cfed405f58898904e00c67ce546df39,2022-06-25,92 +2a4aa0073854aebafab2e158325e4bebfc43f5d2,2022-06-23,92 +b1ee32e34df73d95f7e73adb24546a5d49e939e3,2022-06-22,92 +0bb4b7d8475efee404b1129122d42eef793b6df2,2022-06-21,92 +cfc638ceb21d456d385e290d26ac242591d5794e,2022-06-20,92 +2d9998b4788b85422806ae3032cb1c85861cd821,2022-06-18,92 +913d6a715289481bb749ce90ddcf322094e91f92,2022-06-17,92 +44ee273cfae97cd7008acdc513e08a557407b327,2022-06-16,92 +d315afb20be4acd8708c57eef7403f1afad2dcdd,2022-06-15,92 +f8ebbd134f17f5126ada65b90ac736c26f4bf6d5,2022-06-14,92 +d9a5a0f71ddec2c43266820677eb59f223ac9e01,2022-06-13,92 +253c9b6ae48d7f05c292a031b56a5b5527674db2,2022-06-11,92 +bb0a3e30c1b096d0424a93e7fd936ac2f35d76a4,2022-06-09,92 +2efb84b8f1929f0e2f89111afc4a65ee95b6827d,2022-06-08,92 +46f4d6c5312626bd3d720f3cd0895d84e3c02973,2022-06-06,92 +b4defeba3fc8e55505dee196c8f231e2026e1513,2022-06-04,92 +59ccfaaf2c16c825aaf0e0e11d9915d4854349dd,2022-06-02,92 +dd8a3dbf7f83ff8e2a6581eebbbf204cf0d7ab95,2022-06-01,92 +75b697fea4e313fb00160bf3bb0f52a272f8c24c,2022-05-31,92 +aae4141419b9520cd437de78a9ea96c68f305311,2022-05-30,92 +cd802bda7ad54481c6dda4ce708904cd4cf55b2f,2022-05-29,92 +7c6f0526c130086295fa83cfd356678ede65fd2e,2022-05-27,92 +7ff5a58fcc48cdbb83b5b13d62f06a3a508c0d78,2022-05-26,92 +5c846893c71f053e75d911e161f7b301c323172a,2022-05-25,92 +ee5fd72dae70118a22d753c0faa8016d87b03317,2022-05-24,92 +af12245bc084220ae45e5e3f60e8bbd45751aa63,2022-05-23,92 +30b7f93b0662f21cfbba349ca63ea3fd75f080a2,2022-05-22,92 +61a2e31ed6989024d1c3c9a71357e7c4f4b0ec58,2022-05-21,92 +649872bfa2b8c6ad26c881faf961f1488311a73d,2022-05-20,92 +5e352e47e9ee871b9861ecbcccc3dd387fa31bc9,2022-05-19,92 +336084ba84809a7eacadb24950dff28eaa6e03c8,2022-05-17,92 +318f0457829c84d5d4d05c806aa60280d27b2e60,2022-05-15,92 +f0e925fb1dd6ab08d4eb24ccbdfc23084ebbcc3c,2022-05-13,92 +f869e0ba8501c1caf4756c575b4f09add28aea56,2022-05-11,92 +24363782e0386258ff2499ebe0029eadd59f96a3,2022-05-10,92 +b7fb215304313fef3890060d1327f8cb46187dbd,2022-05-09,92 +a40aab0a48a08f6f5e25e34ae22f5a2e71b10b73,2022-05-08,92 +b8a52dbffc87faeec082136d42fb8c248f2bea77,2022-05-07,92 +0b792ab0e143a038529a2a03a077c14e9d09862b,2022-05-06,92 +fc00023be58fe15b093170a21a72aba5cb23be1f,2022-05-05,92 +bf5fcc72b99b01b02f13ba93227b1121a238a5dd,2022-05-04,92 +23acc274c96758fecabaee9dacac9357fcad43e8,2022-05-03,92 +d09965bd19a8932f931fbd27905b8178e85ddb23,2022-05-02,92 +a608c27e689ffd1364f1c4301c98c2b29a85cb0f,2022-05-01,92 +87c7626b66b0284a0fbe8c509f88abc7c8099293,2022-04-30,92 +481901b71dbaeeb90449a4b4ad1e0bfb3dc67c5d,2022-04-29,92 +5b4fbda3d12c7194d2048ebdef0cee51b0b311a1,2022-04-27,92 +4c85e9dcc269b3bda2b52ea992d07c1fcb5da3e1,2022-04-26,92 +03c24ded21651d691b1896d07ac2fecca1767495,2022-04-25,92 +f5580b30dc9fc1c7361c4f7a73fe5fc8d23759ab,2022-04-24,92 +a5a110a2604365e8f7259234bb0cdb5a1d2ed7df,2022-04-23,92 +2c74dbd0c19d2ece9c6f1fdfeef9071c7d72169c,2022-04-21,92 +1b703639b02d0dad31f511f23aa1eb6158873eec,2022-04-20,92 +c47115c44ff79ec92de273f8f58bb19ad75d1ac9,2022-04-19,92 +23461caf0f9306fcf0adadc28f0090ddf90ee919,2022-04-18,92 +8e98496d4e9915fc037f32fa29f8d9f6e1666992,2022-04-17,92 +a5529ded1a2682fc0213dca4619a66659ad0161a,2022-04-16,92 +dfa2e91d716e1599b87636b99fe663896d803ad4,2022-04-15,92 +c2cd81beb65a1234600955dfd3eaac59914553e6,2022-04-14,92 +03e25bf2b3a8e351f237bbf875afacecee828282,2022-04-13,92 +ffaa1ced8019fd4cab3d8c97703d00aaab908450,2022-04-12,92 +381ae3ae289fec7fade76a748a50506edf076a31,2022-04-11,92 +ff817038bae9e090de862f002e7c5d403d714361,2022-04-10,92 +affb7ef33b540dc8300fdab3e18bc70f22939a1e,2022-04-09,92 +9aa74d9e445d30f9456bf7f8f3aea938c12c3154,2022-04-08,92 +dbd610d1d8fd9d691c965a27703aac11a91e1cab,2022-04-07,92 +a5833324e45ddc21657cf6451e2e89af58451638,2022-04-06,92 +64bdbc893d103f7d869d953d9b14d0b0b542ae72,2022-04-05,92 +318b529356982864e270f97632755851374077fa,2022-04-04,92 +069c9b402a8a802fa1e5b056a1c8906d8bf0b965,2022-04-03,92 +9a368ab393f7027457a2cbbbccc1d61c825844f7,2022-04-02,92 +8336511a8d7a5b36f34db54f0c5f3e44d3662049,2022-04-01,92 +8eb8f124397d6f27a9c01ab8a702ed5750d00910,2022-03-30,92 +ec1f634978849669012c7aedcd03c96287002a9b,2022-03-29,92 +63d21980848db4b4c47d9e4cd70070f72c1642c9,2022-03-28,92 +98709c642dcbe1d8507fd7fb2b15d15da4d1a30d,2022-03-27,92 +af5e23d6cbe23ebed9c3242e35c5c2452981ff1f,2022-03-26,104 +08600794d788124d762c3129a50bf6f78b77d984,2022-03-25,104 +a2d8b6cb1bf24b231e661dfc62bf6e6f7af13294,2022-03-24,104 +bb8e0dcbcc88fef5b0850ca78989f9579b77bb60,2022-03-23,104 +4a1ce3559e8a780aa7d7ade87c501716a3f49c24,2022-03-22,104 +26d3ded0d633519c1208778b6203e8c3b7340791,2022-03-21,104 +faf630a54013ab0c7d38019622f38e1dab145c43,2022-03-20,104 +b12a789c977fc18fa77d674d044f42af00670174,2022-03-19,104 +9d972283f0b6aaffe72313ad793a46202a50d300,2022-03-18,104 +910000d4190a99537a6a4f72493ba243965eb414,2022-03-17,104 +ba4bd3340716821537aedbe54ef03a14ccba88ab,2022-03-16,104 +b766668dd162ea6bfbf696f722d29ebe5bfbfa11,2022-03-15,104 +818bbb89a76f2129ba26d067e561d6f1c19ba12a,2022-03-14,104 +361fcb01e2fed0587e033c7da6dfe0853e30921a,2022-03-13,104 +557a29f4ab54f6bc35074919f2b2b6426b745d0d,2022-03-12,104 +8d9db24ce820c0435021cf2203f885775eeddd5a,2022-03-11,104 +c678ffa46ca1158ae42dbd88294f56bd828c5837,2022-03-10,104 +48323c36d96fa35f8a08a65c8fae296c656984fe,2022-03-09,104 +8c83bb3087c1b569651baa21b45b853ac962c6e4,2022-03-08,104 +64f9f4fa7b12082512531719866965668d65d6ec,2022-03-07,104 +daea15b539438ea5369a7f98254c10951a22c7a9,2022-03-06,104 +db2fbe76bdd5699258099f82b08f9b3d353aa873,2022-03-05,104 +9e6bedf8caebd5246862e0da56fc1f21e1c479d5,2022-03-04,104 +fcc5624e213e10dc94be86c6030d5ea219fd8ae1,2022-03-03,104 +c85393b094bcdf5a82e334f456f356c356ebca1a,2022-03-02,104 +cdab7773199b5a00cf77180d4936afc9159a074c,2022-03-01,104 +340621c154e24d2f674ccea296791f2a2d00b660,2022-02-28,104 +92f1e36622d368f82fdcd42a457a373fe31cbacf,2022-02-27,104 +6c035edfe4181373875da6c4ce39fed4bf2e5be7,2022-02-26,104 +24929134d55e36fd757c90177f80ffdd0da800d7,2022-02-25,104 +b0ccc269628594828e193867eea7345f79730588,2022-02-24,104 +392a6c92394e4ffc6ee5129c7888225c15a68347,2022-02-23,104 +d60e4ccad6417ce2340d1c6bcda650158a09494b,2022-02-22,104 +a3237135c1ed5617a2bbaddd7e6bdfa93626d8f6,2022-02-21,104 +a22cf3def43405b9955d6858210982f25d56b0d1,2022-02-20,104 +8265f5b5f62a8b140e28195206bab3489074bd46,2022-02-19,104 +5af73e708b145f1eadb77880f128d26b9e7cd4c8,2022-02-18,104 +f85980512cb9a06dcb33d4ba2b45537efa728d06,2022-02-17,104 +7bf2fa58f6df083717c99f38c85ab7ee15a3f0fa,2022-02-16,104 +adda1eb482035036728c48672cddd2b8b11109e9,2022-02-15,104 +99877118258e9c18ddbd370461b92d6a46952d28,2022-02-14,104 +fd5c03cba5fadd2625ddee1ce5e4438f8aaa5a42,2022-02-13,104 +9369ecc9f56a3b08f38c2b8ab3f1c44917d4fe2e,2022-02-12,104 +89068e89c41419c39209ba263af217fb1dc91080,2022-02-11,104 +7758c681ed38139ac7157d5e3a9413bd8ecada5b,2022-02-10,104 +503797a245b77d82324ee4f81fe296633841efd1,2022-02-09,104 +f00a498886d6f81f7d3507ff635e778dda47cc92,2022-02-08,106 +7eff0cd5b2368c67ca25b86db71b6f00a7fe22ca,2022-02-07,104 +2e39274e93ea56ee08ae22d6e25cf2f0e732ae0b,2022-02-05,104 +a1f1ffc443d2ed7bcc02e62358e822c35f730217,2022-02-04,104 +54e91e0ee77af316d5879bea4bf08dcfd7ab15c0,2022-02-03,104 +96eda4198c8ab93c4ab2159b3e3d33b16d2c6d92,2022-02-02,104 +19d173da7b63272f45975218a47ed8b2083a6968,2022-02-01,104 +0018267b08633559b9390aa123b5db8412ec995e,2022-01-31,104 +d29e98cf96109d2131350d0456bfc93a988fe6aa,2022-01-30,104 +09bea5e7598345c9a8a9e57dbbdaf9a1446d0d99,2022-01-29,104 +ddddd3f57c48c4909e3433deaef089508e4d7a0f,2022-01-27,104 +3b38613adecd609f95897bf50cb87a838071eda2,2022-01-26,104 +6b49de990979707ebb6a5d10c20764cd57c7b52b,2022-01-25,104 +e0f45222e72bd580b349bbc176e92bb15d56416b,2022-01-24,104 +653756f69e56eec595411cd9d9f3c6ff8a3ad1ea,2022-01-23,104 +0643847c5c1527aba38f3d2cd1979c4eddf715ad,2022-01-22,104 +4017ba65ed2cf0c6b080fba4125b714f6acb5888,2022-01-21,104 +a24301e0fd06c1d91e986527d38957712d2d16a1,2022-01-20,104 +4e7df8c6b579e8cc2ef47ec98a6e288e95c27dbe,2022-01-19,103 +a9e0ce048ef859595fa7f6bbf08c031cd54f9531,2022-01-18,103 +16163f2beaffc011b378f3ec9674d0a7c6e1d132,2022-01-17,103 +2c1735b1282879fee2c2039074c8d0d173535887,2022-01-16,103 +220ee3c5f783b6624d2569bc447502b7efc490a1,2022-01-15,103 +284b200309fab58e293965aa5c9b60320035cbf0,2022-01-14,103 +2c132e6dabdce695f2189f27fa16a95ea3e7e5d1,2022-01-13,103 +0ba3aa89f5c7aa1012deac9b3f38f5dd425b8551,2022-01-12,103 +00308e161806a0a862f9fbe07d9bafc39f090929,2022-01-11,103 +12bcc35276d6fa58eee5f3dd0984f84adaa0fe15,2022-01-10,103 +749eec6aac3869952f6ac0cb44e561969d90242f,2022-01-09,103 +ea123c8c8e8a90fdc1410ea3239832874e3912d1,2022-01-08,103 +1a9cb863db07835c3aa54d6f1b66c33d9b5a72ec,2022-01-07,103 +6448fa6f9e8bd8487c5ea88717832c5662eb4c43,2022-01-06,103 +9c5e7ca89cd64e6e9a75468639aa80a321b92e3a,2022-01-05,103 +f87d12651c110a1abe2c2f5677e5037bb8cdfc43,2022-01-04,104 +a4b7b134fdeb53babc7c70807d77c529980a923e,2022-01-03,104 +c9d70b94855eff1bff7c24ded5dfba8da301af39,2022-01-02,104 +ebd591f39ed6fcf4e79bae8f0efa257b33c66333,2022-01-01,104 +64b6b5b18133cf70ff8ad3bddd590096a7a1ec7f,2021-12-31,104 +66bd5ebdae622761ac40569c7de16e842df4d3e6,2021-12-30,104 +634f3f627ca52654bde076932096a5ced040ee3d,2021-12-29,104 +e6a08f9e26f455b0a81aa0fa049f7a803a930b79,2021-12-28,104 +ef0c055ca0063842ca8700934d6a25f802cad367,2021-12-27,104 +ace56c83b3a642ac285bc7715e285bdafaf41c89,2021-12-26,104 +3a46acd81213ad2875355bb42514ca982fb2a181,2021-12-25,104 +17f5c67d3a69aa346b7301969407f05c5a410c7b,2021-12-24,104 +eace008d8beb01223a81e8af610ba9c583ec7918,2021-12-23,104 +86f86ce2559e33e55284851c8150c11c09d4dbe0,2021-12-22,104 +3bf7cd1d21d54de2b02245fc261c61e6c80d3752,2021-12-21,104 +1defc5dd7b702e330ff24d8d27de11ed177d1b53,2021-12-20,104 +8d76b4c76b43b955bed87cc15508bab29df9c427,2021-12-19,104 +8c0f141839cf964f7462a886a5825b0dd424ac30,2021-12-18,94 +bf5ba9836423e84cd806ca9374c4bc746a031b46,2021-12-16,94 +cc94c913f1f1df6b3800e6898e297b11803ed7e4,2021-12-15,93 +5158e4f0dffc6662e63e50b23ced6abfca8bf90a,2021-12-14,91 +ca8309dafe36042fb036f5891585de11e2edfc13,2021-12-13,91 +07474bc6b08d40c0848f7323bfb0f2496c52e48a,2021-12-12,91 +c595f8c0f4a233018a34cf938ea288aca388ea8d,2021-12-11,91 +665535214937c62040a3c6e05a6a24de6e11f670,2021-12-10,91 +0b4dc55f8909037088cd7748327f9b5054f73d4c,2021-12-09,91 +af575294d3ac814f2e46401259392eee3f450b32,2021-12-08,91 +2d11e4e624249edd57fba11beba6652664164a01,2021-12-07,91 +8f443b62910f595a4d2f2a5894faeeed6c7dd8ee,2021-12-06,91 +494d87eb5bc554ea4a7159fa1bade3186abacfa2,2021-12-05,91 +700464f4b4469d08ad3304ed11d0fab237ac3119,2021-12-04,91 +d025693d8b219892547e9591008263ac8302a28e,2021-12-03,91 +40da49ff88e93a08bd2883992576074acffb525d,2021-12-02,91 +6962346d9b0c2cc907f1cd7c488e2cfaa8a323ab,2021-12-01,91 +19e718178c0fb2e98bf443c5d78be9fe7c414296,2021-11-30,91 +f456cf7f5b1ab8fc05397ce3e90f68819073645f,2021-11-29,91 +31fcac5c6f29b97715ef9ad8824d851cccd39557,2021-11-28,91 +b37f05a3e69d4f615214bebe7e1b72d73d807689,2021-11-27,87 +89cda9c5a562a92eee43386b49b640a08b7ddc37,2021-11-26,86 +b80f7a3ff2026b627cb7df53dd69b31a77cf77c9,2021-11-25,86 +b9d6e3e6408097c81f592322a6715a0952d9006f,2021-11-24,86 +a313467b37e943c360ad02f439c431fa4ca78f5a,2021-11-22,81 +8024f901bbf97e35ea7e2e4eba3d97b19dbdbecf,2021-11-21,81 +dec614644b2cf0478300e3c4528ff245887854c3,2021-11-20,68 +0cb2b2248d280eccfe49a237366ece71d80332b2,2021-11-19,62 +cf38e75c24ff566c9fc20f84801565ba465aa8e2,2021-11-18,62 +2df8021174c2fe5dc7b03f939021473953f05fbd,2021-11-17,62 +8d5692fabc246d5b265d0a81c61292dd95ff053f,2021-11-16,62 +e2e88f803d73d6b18d883b5fbd8ef4c4da624997,2021-11-15,62 +de8e37fceee5add8a2e36143b58f39ac867868a0,2021-11-14,50 +2ff3a76ba8ce7052ba35f256b7f002ce3e43752b,2021-11-13,50 +986be47eda5447e31ee5b6489cc6dfe2bf4f18a3,2021-11-12,50 +e6b161a052c62a24537c9c5fdb7a39311ace3880,2021-11-11,50 +f315586bcb1c826c81fdf440c7c084d89547e773,2021-11-10,50 +6dd2580a4125df25b647755c85017e16e8f7f42e,2021-11-09,49 +596c67abb04d971a86bc0d6227f70ded7ebce60c,2021-11-08,49 +4a93363dbb7d634ccfb4322cb5d54676947aa146,2021-11-07,49 +5f24e04b17e6179bf0d0a5b0229aafbd878ca550,2021-11-06,39 +86fe8605410f9ce7f0c37499af8d4047165c1170,2021-11-05,28 +7797e0bba5cc933d14639876ed609be6420b13e7,2021-11-04,23 +18e6d5169b9f83769e6dc49a2b8937bf504b0576,2021-11-03,23 +c573f92853f6053650ac03335a16af931bbc4ba1,2021-11-02,23 +1d12ac108e4bc418999858e5d2f48f69d82bdef8,2021-11-01,22 +df19d1c72d461b41fa0087905fb82da9799ce318,2021-10-31,12 +3fb0a7630fba674415dcb35afd4eed4165e627ce,2021-10-30,16 +07da2e883248d8614eb030f71a774be0135ce784,2021-10-29,16 +22a37f7cf3eb35d1b7672016fb65f826940e367f,2021-10-28,16 +41c1210f0f4dcbc737c34fac8396e39552b58170,2021-10-27,16 +677620c5065a721ba6a16a0a2ad1bb6e5dc93a12,2021-10-26,16 +d3730f7df0292c2458eeaaa57cc449d22f7262be,2021-10-25,16 +04b2599cae62b46af26eabe8d5f5695565915052,2021-10-24,16 +767605772e70154bda85876b1519eb99b574fe9d,2021-10-23,16 +3bb09aff9cccd5bce37a599ac547a3c6b4c512b5,2021-10-22,16 +b27341b1984fb944eade211086c5f54388945c90,2021-10-20,16 +e11e155f42941b4e3d9738dc3cad4d3cd637b7f9,2021-10-19,16 +349bb0d18d4775db49c0d32cb4e82040e965c8ec,2021-10-18,16 +cfece9de32ec833adccaa7ddab807b3e3653d83b,2021-10-17,16 +a1b08c098d1d8febf49beba31fc3a454edbf40e5,2021-10-16,16 +715c994ea755d4fd92f95110c59b647f845d0539,2021-10-14,16 +9d1ffa7d012d873bf145aa45735b25e96fc17fae,2021-10-13,16 +b16a3fd2dc86163c9975bb504c980ed741c76b15,2021-10-11,16 +9af94490961fce3a83e93a7d0a92bd2ee4773210,2021-10-10,16 +4a57f6fdee3269394c4c4c060fa4aa3b611e262e,2021-10-09,16 +f8002dbb8e4fd8c74b72f00ac48472c84cfeb92a,2021-10-08,16 +ce19a3615b291cf28a669d7e1ed52db86d91e3d6,2021-10-07,16 +f931a9de82ae6e291c462ac76a7a6dadb3022738,2021-10-06,16 +40c65a331279ca4a2066d4dd746c898e0fc614d6,2021-10-04,16 +24ad29375cd273ac4b1b5d57673f1f30b8c07d0c,2021-10-02,16 +ecbe491ed50d27ade140a07014990b9a0269a064,2021-10-01,16 +bd94ccb1248138f34ac4f880a9d7a93904817756,2021-09-30,16 +7e9cdb83f83da7d3900664f1db73dbe8db7cf0cb,2021-09-29,16 +93de515166cb4a5d311d4a42753c7adc266cf288,2021-09-28,16 +6d10a037efa8b9f0ec19601140401f3f26f2445e,2021-09-27,16 +47b2729a646d4e7af3b2f8669ded71298ddc3b45,2021-09-26,16 +7368309795d81a1af6f9afbe108329fdb250156b,2021-09-25,16 +989261c6478348ba6beec21f61189b12f493105d,2021-09-24,16 +12dd7b5869435aad11002ffe11843adc2adac822,2021-09-23,16 +515444554ccc730e45078983327731a0d8ac553d,2021-09-22,16 +e61a2509eadfad2f2f499b88f1c1df63cce4120b,2021-09-21,16 +28418652709fa6abe9c3f7d096ac1c4baf49fe64,2021-09-19,16 +9f98839d1a60e8eee66aa34a51eff1f7e7009240,2021-09-18,16 +946eff61a46fb84f531588c9c75729f57fdcb15a,2021-09-17,14 +e3d8cf1bb3bdd0b48b8c65760b5c9cd6c96fc96e,2021-09-16,14 +7d68262892df9a9d6d24b2042ded7433b53c799b,2021-09-15,14 +149b1e1c0947af48fc3326718f1c511c34cac31b,2021-09-14,14 +6f9b5aa8c92d06e3120a71dbd22723b16e9869b9,2021-09-13,14 +81152599214ceaf6d40d6d683a7408480b47bad1,2021-09-12,14 +acb29080a5137a6ee38c7a6b3acf199391514131,2021-09-11,14 +2d20bdcea7083161fb9e88ca6f0ec0d9fd05aed5,2021-09-10,14 +014f8a7904402ef9ddf3ff28be744fc05771978e,2021-09-09,14 +b98c2cbf9373411b61cf2aeea18eb624919b7c5e,2021-09-08,14 +3263593f9eface7725e37d7f1916449d1aebafda,2021-09-07,14 +a5e76908b2c734df275366dfaa10464970222e42,2021-09-06,14 +abe95a378c55f5c6d00acb724812e0ab32e29cd6,2021-09-05,14 +1d6ecf3a8880a752a0fb3450644d84c8906ea06f,2021-09-03,14 +a3566d396f39e23f662c6a339abdfaf7ac99366c,2021-09-02,14 +3f10700e0c434b541708782c3c6d06f4569df889,2021-09-01,14 +fd8581b086bceba80ba0902ed38509b38b912a5f,2021-08-31,13 +78f55ca171e30423534539501865df425c063620,2021-08-30,13 +e47d52a7e95d6fd8b1b89149da67a94158b524cc,2021-08-29,13 +973c27d84bf30857547aa611985475b32df271d3,2021-08-28,13 +3a11199fea36c1a954b164039f39cd66ca2e1b25,2021-08-27,13 +9b6eea6569448c26940f755a5fdb42b52d253be2,2021-08-25,13 +5f58500187ef89038e88bbded8fbd6ac4ec665ce,2021-08-24,13 +d10ab7787ae0e20642f1915b458d0aa070421d83,2021-08-23,13 +d48cdeff341e926310b5b769845ef3427bfd3cbf,2021-08-22,13 +9b23d661ab7e2faf4348cae4fac92783aad7d3c9,2021-08-21,13 +416c719504ddcc5eaf631e1aef6c508e492c6edb,2021-08-20,13 +b2e4aeedf9def1dca92dc361528dc2e8d311ebab,2021-08-19,13 +4db5db006fad4c2edd6fe065622aac1f38acd8da,2021-08-18,13 +b14ad80d016dc334da9b9b39bac0cda4aced4ced,2021-08-17,13 +933cfffcb228706cca132e05a055f0dbd5d63b6c,2021-08-16,13 +ffef6749e73964a582aad380acb4055faf17ff13,2021-08-14,13 +a448f1d8a0b7cfbac92bc2c5007c0158c7eb7ab1,2021-08-13,12 +ed2067b34a126d68a65cdf99b9e8fd39fb412525,2021-08-12,12 +1e727bccf0a4f82e1b532b62491ce408a5e46612,2021-08-11,11 +e7d104e758da790607d92eb7b3ab3b9c1e99a28c,2021-08-10,11 +cfa7906d2f096a6ceacb0cf4e4187394ba26e687,2021-08-09,11 +df808f202ad3eeaffbf944c168c78f33fc6b5a58,2021-08-08,11 +4ce4148671d5fda665fe6d436ce4dfb31c0c0ddb,2021-08-07,8 +13c15048e8e49afc8e0dd1a8f76c24fed6b4b229,2021-08-06,8 +f8aa5e61a52079af81e4aedff34cbc5ad7f1a4f2,2021-08-05,8 +210f0f1e7e9cf0b4a37fa5d0ecb80ba46492edb2,2021-08-04,8 +4a452af8f0a4afd0c1e1957bf269ec40d41c3e06,2021-08-02,7 +a3e39d3b28a65828e862c300700eebddbe4ea2d7,2021-08-01,7 +a8a7061b9cd489dd3f291e5f92f9fc7c0af32d62,2021-07-31,7 +1701151827f67473067ff43450d11365095c9404,2021-07-30,5 +57aa39a3011216c72bea56e52d860e93b2b0054a,2021-07-29,4 +0d3f2cf312335cae4bfd4614750d602fb25d7c6d,2021-07-28,4 +4392d58b81f338ada9542668b42d97a4f76b8788,2021-07-27,4 +12400a485bdd947d69dbbdf8a389f214a685ba3c,2021-07-26,4 +feccc1d2cf05ad3e80b90d05be696152f8cdd974,2021-07-24,4 +60781f353f28dddb263e6ed876f21d11fec9305b,2021-07-23,4 +27699ee3c013372a7e3580c6109015e48f6844bb,2021-07-22,4 +8efc08a8df6748240c5ecc80fca02260bb340110,2021-07-21,4 +0f696eabaca269daac96d6c2e0624a3a3e31f43e,2021-07-20,4 +55e8ce91cbe8a326f64e71e50513b7b829aa1c3d,2021-07-19,3 +523b1d007bd5766d387d8d228f4cdb88c8fd0b1f,2021-07-18,3 +55dadc57d58e26cde19841d0c1ff83fdfbae1c54,2021-07-17,2 +2221e2dbe308a9eb3c7d3f8377b5b0a5f930361a,2021-07-16,1 +76db4cad3ff129753e6067013558cb5810cb7c45,2021-07-15,1 +1fbd90858dac580977409df66f439dfaeab8e1ba,2021-06-30,0 diff --git a/index.xml b/index.xml index 26551a9..b0bd27b 100644 --- a/index.xml +++ b/index.xml @@ -6,7 +6,106 @@ Recent content in Index on SqrtMinusOne Hugo -- gohugo.io en-us - Mon, 02 Jan 2023 00:00:00 +0000 + Thu, 13 Apr 2023 00:00:00 +0000 + + 916 days of Emacs + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + Thu, 13 Apr 2023 00:00:00 +0000 + + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + + <style> + .quote-title { + margin-left: 24px; + } +</style> +<blockquote> +<p>Poof I made my free-time disappear</p> +</blockquote> +<p class="quote-title">- <a href="https://elken.dev">Ellis Kenyő</a>, on being called an "elisp mage" +<p>Little did I know on the fateful day of <strong><span class="timestamp-wrapper"><span class="timestamp">[2020-10-09 Fri]</span></span></strong>, when I had installed <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>. I wasn&rsquo;t thinking about the <a href="https://www.gnu.org/philosophy/philosophy.html">ethical aspects</a> of free software, the <a href="https://www.webofstories.com/play/marvin.minsky/44">aesthetics of Lisp</a>, or these other things with which an occasional layperson might explain how an almost <a href="https://www.jwz.org/doc/emacs-timeline.html">half a century old</a> program can still be in <a href="https://emacsconf.org/2022/talks/survey/">active use</a>.</p> +<p>In fact, when considering using software X for anything, the most important question to me was: can X provide a better user experience? For Emacs, the answer to most of these questions turned out to be yes.</p> +<p>So over time, Emacs has become my programming environment, email client, window manager, knowledge base, <a href="https://sqrtminusone.xyz/configs/emacs/">and a lot more</a>. I think I ended up using Emacs for almost as many things as possible; I even authored a few packages that implement certain parts of my workflows that weren&rsquo;t readily available.</p> +<p>Among other things, the Emacs community is responsible for my introduction to <a href="https://zettelkasten.de/">Zettelkasten</a>, RSS, Lisps&hellip; Perhaps even my English became slightly less broken because Emacs is so text-centered. A lot has changed over the course of these short 2.5 years.</p> +<p>Anyway, this post is an attempt to quantify some aspects of that story. The numbers mostly come from projects called <a href="https://activitywatch.net/">ActivityWatch</a> and <a href="https://wakatime.com/">WakaTime</a>.</p> +<p>Mostly I&rsquo;m curious myself, but also every now and then I see Emacs people discussing their journeys through the Elisp-land, or a potential convert wondering whether this rabbit hole is worth investigating. If any of this applies to you, you might find something interesting in this document.</p> +<noscript> +Also, I use a lot of JavaScript here, but it's all open source. The only 3rd party library is the MIT-licensed <a href="https://www.chartjs.org/">chart.js</a>. So you need to enable JavaScript if you want to see the charts and some of the numbers that are dynamically calculated. +</noscript> +<h2 id="everything-goes-into-emacs">Everything goes into Emacs</h2> +<p>As I mentioned earlier, I use Emacs for a lot of things, which are described in my <a href="https://sqrtminusone.xyz/configs/emacs/#introduction">Emacs config</a>. Fig. 1 shows how Emacs replaced various programs over time.</p> +<canvas id="chart-emacs-history"> + <p>Also, unfortunately this post turned out to be rather inaccessible for those reading that with a screen-reader. I guess, if that applies to you, just mentally skip the figure references.</p> + <p>I did try to describe what's going on in these in the post body.</p> +</canvas> +<p>As you can see, I used Neovim for a little over a year. We&rsquo;ll get into some numbers on that later.</p> +<p>The process of moving from knowing nothing about Emacs to using EXWM took about 13 months.</p> +<p>Fig. 2 shows the dynamics of the direct screen time ratio spent in Emacs per month, i.e. the average number of non-AFK seconds in the Emacs window.</p> +<p><canvas id="chart-emacs-screen-time"></canvas></p> +<p>It&rsquo;s hard to discern any general trend here. It appears that the ratio started at 0.2 in October 2020, oscillated around 0.3 for about 7 months, then moved closer to 0.4 until January 2023, after which jumped to 0.45-0.5.</p> +<p>The three peaks in September 2021 (0.526), January 2022 (0.532), and August 2022 (0.568) may correspond to my vacations, during which I didn&rsquo;t have to spend time in Chrome DevTools (I do web development as my &ldquo;primary&rdquo; job), but I&rsquo;m not entirely sure.</p> +<p>The jump in January 2023 definitely matches my adoption of <a href="https://github.com/zevlg/telega.el">telega.el</a> instead of the official desktop client. The time redistributes rather cleanly in the detailed ActivityWatch data.</p> +<p>It&rsquo;s also interesting that switching from <a href="https://i3wm.org/">i3</a> to <a href="https://github.com/ch11ng/exwm">EXWM</a> didn&rsquo;t seem to have any distinguishable effects.</p> +<p>The mean Emacs screen time ratios are 0.39 since October 2020 and 0.47 since January 2023. So, as you might infer, Emacs is quite prominent in my PC usage.</p> +<h2 id="time-spent-in-emacs">Time spent in Emacs</h2> +<p>Now let&rsquo;s examine the structure of time spent in Emacs. Fig. 3 shows how many Emacs-hours per month I spent on different activities, and Fig. 4 shows the same in stacked form.</p> +<p>Unlike Fig. 2, the time here is calculated with a 15-minute timeout preference, as <a href="https://wakatime.com/faq#timeout">it&rsquo;s done in WakaTime</a>. For instance, if I work on a project in Emacs for 10 minutes, then switch to something else for 10 minutes (i.e. no <a href="https://wakatime.com/developers/#heartbeats">heartbeats</a> recorded during that time), then return to the project another 10 minutes, this will be counted as 30 minutes in that project.</p> +<p>This is mostly so because it&rsquo;s the default format for the <a href="https://wakatime.com/faq#exporting">WakaTime export</a>, but I also believe it&rsquo;s reasonable since I may open package documentation during configuration, experiment in scratch buffers while working on a package, and so on. This time really has to be included in the final tally.</p> +<p>Of course, this will also include all the times I was distracted by the <a href="https://wiki.systemcrafters.net/community/chat-with-us/">System Crafters</a> Discord server, <a href="https://emacs.ch/">emacs.ch</a> instance, or whatever else. Therefore, consider the numbers that follow as an upper bound.</p> +<p><canvas id="chart-emacs-time"></canvas></p> +<p><canvas id="chart-emacs-time-stacked"></canvas></p> +<p>The categories are as follows:</p> +<ul> +<li><strong>Config</strong> (<span data-num="config_hours_total">[REDACTED]</span> total hours, <span data-num="config_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent on actual Emacs configuration.</li> +<li><strong>Emacs Packages</strong> (<span data-num="package_hours_total">[REDACTED]</span> total hours, <span data-num="package_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent in other Emacs Lisp files, such as writing my packages or debugging other packages. See the <a href="#emacs-packages">packages</a> section.</li> +<li><strong>Org Mode</strong> (<span data-num="orgmode_hours_total">[REDACTED]</span> total hours, <span data-num="orgmode_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent in my <code>org-mode</code> project, which is mostly <a href="https://github.com/bastibe/org-journal">org-journal</a>, <a href="https://www.orgroam.com/">org-roam</a>, and project management. By the way, guess the month in which I read <a href="https://www.soenkeahrens.de/en/takesmartnotes">Sönke Ahrens&rsquo; book</a> about Zettelkasten.</li> +<li><strong>sqrtminusone.xyz</strong> (<span data-num="sqrt_hours_total">[REDACTED]</span> total hours, <span data-num="sqrt_hours_percent">[REDACTED]</span>% of all time)<br /> +Working on this strange little website.</li> +<li><strong>Other Code</strong> (<span data-num="other_code_hours_total">[REDACTED]</span> total hours, <span data-num="other_code_hours_percent">[REDACTED]</span>% of all time)<br /> +Doing something marginally useful in Emacs, which is mostly work, education, and a few personal projects unrelated to Emacs.</li> +<li><strong>Misc</strong> (<span data-num="misc_hours_total">[REDACTED]</span> total hours, <span data-num="misc_hours_percent">[REDACTED]</span>% of all time) +Time spent in Emacs but not in an actual project (i.e. accounted by the <a href="https://github.com/ActivityWatch/aw-watcher-window">window watcher</a> of ActivityWatch but not WakaTime, which watches for files). That includes reading RSS, writing emails, using messengers, doing some idle experimentation in scratch buffers, etc.</li> +</ul> +<p>The <span data-num="config_hours_percent">[REDACTED]</span>% of time spent on configuration is actually less than I expected. Unsurprisingly, the first month had the highest value of around 20% (I used Emacs without WakaTime for a few days).</p> +<p>By the way, I spent just 39.0 hours configuring Neovim, although the number is probably not representative anymore because Neovim has changed a lot over these 2 years.</p> +<h2 id="switching-from-neovim">Switching from Neovim</h2> +<p>The period of my transition from Neovim to Emacs seems particularly interesting. Fig 5 zooms in on that, with the switch represented by &ldquo;Other Code (Emacs)&rdquo; replacing &ldquo;Other Code (Vim)&rdquo;.</p> +<p><canvas id="chart-emacs-vim-switch"></canvas></p> +<p>It appears that getting from zero to somewhat productive took me about 11.1 hours over 4 days of just experimenting with Emacs, and one day with 3.8 hours on configuring and 4.4 hours on coding, apparently alternating between the two.</p> +<h2 id="configuration">Configuration</h2> +<p>Now, let&rsquo;s examine where these <span data-num="config_hours_total">[REDACTED]</span> config hours went.</p> +<p>Configuration sizes are a common topic of discussion among Emacs users. I&rsquo;d guess that mine falls into the category of the longest, although maybe I&rsquo;ll do some research on that someday. Fig. 6 shows how my configuration size changed over time.</p> +<p><canvas id="chart-emacs-config-size"></canvas></p> +<p>So, my Emacs.org is <span data-num="emacs_org_length">[REDACTED]</span> lines long, and the resulting init.el is <span data-num="init_el_length">[REDACTED]</span> lines long.</p> +<p>As you can see, I switched to <a href="https://leanpub.com/lit-config">literate configuration</a> pretty early on, and so far, I have not regretted it. It&rsquo;s also interesting to note how the two sizes diverged as I was writing more elaborate commentary.</p> +<p>Also, I never had any substantial issues with maintaining that configuration. Perhaps <a href="https://www.emacswiki.org/emacs/DotEmacsBankruptcy">Emacs Bankruptcies</a> are just not that common nowadays.</p> +<p>For the sake of completeness, let&rsquo;s compare that to my Neovim usage. Fig. 7 shows the dynamics of config size for the first 400 days of using both programs.</p> +<p><canvas id="chart-emacs-vim-config-size"></canvas></p> +<p>As I previously mentioned, Neovim (or rather its ecosystem) seems to have undergone significant changes since I last used it, so my number of <span data-num="init_vim_length">[REDACTED]</span> init.vim lines may no longer be relevant. Nonetheless, it&rsquo;s quite interesting.</p> +<h2 id="emacs-packages">Emacs packages</h2> +<p>Working with Emacs packages was an interesting experience, not least because it was my first experience with Lisp. Fig. 8 shows the breakdown of the <span data-num="package_hours_total">[REDACTED]</span> hours I spent on that.</p> +<p><canvas id="chart-emacs-packages"></canvas></p> +<p>As I expected, my <a href="https://github.com/SqrtMinusOne/org-journal-tags">org-journal-tags</a> tops the chart with <span data-num="org-journal-tags_total">[REDACTED]</span> hours. The most interesting part was implementing set logic on the <a href="https://github.com/bastibe/org-journal">org-journal</a> entities to create a query engine. I&rsquo;m fairly certain that I&rsquo;m the only user of this package, but I use it all the time.</p> +<p>The second place, &ldquo;Unknown project&rdquo;, stands for Emacs Lisp files that didn&rsquo;t belong to any project, which should be mostly built-in Emacs files.</p> +<p>My <a href="https://github.com/SqrtMinusOne/elfeed-summary">elfeed-summary</a> (<span data-num="elfeed-summary_total">[REDACTED]</span> hours), <a href="https://github.com/SqrtMinusOne/lyrics-fetcher.el">lyrics-fetcher</a> (<span data-num="lyrics-fetcher_total">[REDACTED]</span> hours), and <a href="https://github.com/SqrtMinusOne/reverso.el">reverso</a> (<span data-num="reverso_total">[REDACTED]</span> hours) are also among the packages that I use almost daily. Thus, I do not regret investing time in developing any of those.</p> +<h2 id="org-roam"><code>org-roam</code></h2> +<p>It&rsquo;s not directly related to Emacs, but I include it here because it&rsquo;s highly unlikely that I would have heard the term &ldquo;Zettelkasten&rdquo; outside the Emacs space.</p> +<p>I already mentioned <a href="https://www.soenkeahrens.de/en/takesmartnotes">Sönke Ahrens&rsquo; book</a>, but I believe the website <a href="https://zettelkasten.de/posts/overview/">zettelkasten.de</a> would be a better resource if you are curious about that. And I was initially made curious by <a href="https://www.youtube.com/watch?v=-TpWahIzueg">this stream</a> of David Wilson.</p> +<p>Anyway, Fig. 9 shows the dynamics of my <a href="https://github.com/org-roam/org-roam">org-roam</a> node count over time. A significant fraction of my <span data-num="orgmode_hours_total">[REDACTED]</span> hours spent on Org Mode went there. Although I don&rsquo;t have any particular goals in this regard.</p> +<p><canvas id="chart-roam-nodes"></canvas></p> +<h2 id="some-observations">Some observations</h2> +<p>Let&rsquo;s see where all of that leads us.</p> +<p>As I said, I started from the point of zero experience with Lisp. I had a degree in software engineering, but I don&rsquo;t feel like it has helped me in any direct sense. At most, it exposed me to different kinds and concepts of programming, but I am confident that it&rsquo;s anything but a prerequisite, as also shown by the story of <a href="https://protesilaos.com/">Protesilaos</a>.</p> +<p>The number of <span data-num="config_hours_total">[REDACTED]</span> total hours of configuration may seem huge, but I don&rsquo;t think it&rsquo;s that much over 2.5 years and in comparison to the alternatives. For instance, it would take 6th place from the top if placed among my job projects. Also, my <a href="https://antennapod.org/">AntennaPod</a> shows 196.9 hours of podcasts played since December 2021, and some of my friends report having spent thousands of hours on video games.</p> +<p>And keep in mind that I use Emacs almost as extensively as it gets. You might as well spend much less time figuring it out for a more minimal use case. So, at least in my view, this weighs against describing Emacs usage in terms of sunk cost fallacy.</p> +<p>However, my story is consistent with the perception of a <a href="https://stackoverflow.com/questions/10942008/what-does-emacs-learning-curve-actually-look-like">steep learning curve</a> in the Emacs community. 19.3 hours over 5 days to get started is definitely a lot.</p> + + + + Running Gource with Emacs https://sqrtminusone.xyz/posts/2023-01-02-gource/ diff --git a/js/2023-04-13-emacs.js b/js/2023-04-13-emacs.js new file mode 100644 index 0000000..08fd1b3 --- /dev/null +++ b/js/2023-04-13-emacs.js @@ -0,0 +1,957 @@ +const TODAY = new Date("2023-04-14"); +const TODAY_LOCALE = TODAY.toLocaleDateString("en-GB"); + +const EMACS_ITEM = { + backgroundColor: "#8261bb", + borderColor: "black", + borderWidth: 0, + borderSkipped: false, + borderRadius: 0, + datalabels: { + color: "white", + }, +}; + +const COLORS = [ + "#77bceb", + "#ff6384", + "#73d9d9", + "#ff9f40", + "#ffcd56", + "#c9cbcf", +]; + +let i = 0; + +const EMACS_DATA = { + labels: [ + "Editor/IDE", + "File manager", + "Email", + "RSS", + "Passwords", + "Multimedia", + "WM", + "Messenger", + ], + datasets: [ + { + label: "Jupyter", + data: [ + { + name: "Editor/IDE", + span: [new Date("2018-10-24"), new Date("2021-04-01")], + }, + ], + yAxisID: "yAxis1", + }, + { + label: "NeoVim", + data: [ + { + name: "Editor/IDE", + span: [new Date("2019-03-30"), new Date("2020-10-12")], + }, + ], + yAxisID: "yAxis1", + }, + { + label: "DataGrip", + data: [ + { + name: "Editor/IDE", + span: [new Date("2020-02-01"), TODAY], + }, + ], + yAxisID: "yAxis1", + }, + { + label: "Emacs", + data: [ + { + name: "Editor/IDE", + span: [new Date("2020-10-12"), TODAY], + }, + ], + yAxisID: "yAxis1", + ...EMACS_ITEM, + }, + { + label: "ranger", + data: [ + { + name: "File manager", + span: [new Date("2019-04-03"), new Date("2020-02-17")], + }, + ], + yAxisID: "yAxis2", + }, + { + label: "vifm", + data: [ + { + name: "File manager", + span: [new Date("2020-02-17"), new Date("2020-11-11")], + }, + ], + yAxisID: "yAxis2", + }, + { + label: "Dired", + data: [ + { + name: "File manager", + span: [new Date("2020-11-11"), TODAY], + }, + ], + yAxisID: "yAxis2", + ...EMACS_ITEM, + }, + { + label: "Mailspring", + data: [ + { + name: "Email", + span: [new Date("2019-01-28"), new Date("2021-01-29")], + }, + ], + yAxisID: "yAxis3", + }, + { + label: "notmuch", + data: [ + { + name: "Email", + span: [new Date("2021-01-29"), TODAY], + }, + ], + yAxisID: "yAxis3", + ...EMACS_ITEM, + }, + { + label: "newsboat", + data: [ + { + name: "RSS", + span: [new Date("2021-01-22"), new Date("2021-05-24")], + }, + ], + yAxisID: "yAxis4", + }, + { + label: "elfeed", + data: [ + { + name: "RSS", + span: [new Date("2021-05-24"), TODAY], + }, + ], + yAxisID: "yAxis4", + ...EMACS_ITEM, + }, + { + label: "Tiny Tiny RSS", + data: [ + { + name: "RSS", + span: [new Date("2022-05-28"), TODAY], + hint: "Sync with elfeed", + }, + ], + yAxisID: "yAxis4", + }, + { + label: "KeePassXC", + data: [ + { + name: "Passwords", + span: [new Date("2019-01-31"), new Date("2021-07-26")], + }, + ], + yAxisID: "yAxis5", + }, + { + label: "password-store & pass.el", + data: [ + { + name: "Passwords", + span: [new Date("2021-07-26"), TODAY], + }, + ], + yAxisID: "yAxis5", + ...EMACS_ITEM, + }, + { + label: "Google Play Music", + data: [ + { + name: "Multimedia", + span: [new Date("2019-05-12"), new Date("2020-07-26")], + }, + ], + yAxisID: "yAxis6", + }, + { + label: "MPD", + data: [ + { + name: "Multimedia", + span: [new Date("2020-07-26"), TODAY], + }, + ], + yAxisID: "yAxis6", + }, + { + label: "ncmpcpp", + data: [ + { + name: "Multimedia", + span: [new Date("2020-07-26"), new Date("2021-07-31")], + }, + ], + yAxisID: "yAxis6", + }, + { + label: "EMMS", + data: [ + { + name: "Multimedia", + span: [new Date("2021-07-31"), TODAY], + }, + ], + yAxisID: "yAxis6", + ...EMACS_ITEM, + }, + { + label: "MPV", + data: [ + { + name: "Multimedia", + span: [new Date("2021-09-07"), TODAY], + }, + ], + yAxisID: "yAxis6", + }, + { + label: "Cinnamon", + data: [ + { + name: "WM", + span: [new Date("2018-08-01"), new Date("2020-05-08")], + }, + ], + yAxisID: "yAxis7", + }, + { + label: "i3(-gaps)", + data: [ + { + name: "WM", + span: [new Date("2020-05-08"), new Date("2021-11-14")], + }, + ], + yAxisID: "yAxis7", + }, + { + label: "EXWM", + data: [ + { + name: "WM", + span: [new Date("2021-11-14"), TODAY], + }, + ], + yAxisID: "yAxis7", + ...EMACS_ITEM, + }, + { + label: "Telegram Desktop", + data: [ + { + name: "Messenger", + span: [new Date("2022-03-22"), new Date("2023-01-07")], + }, + ], + yAxisID: "yAxis8", + }, + { + label: "telega.el", + data: [ + { + name: "Messenger", + span: [new Date("2023-01-07"), TODAY], + }, + ], + yAxisID: "yAxis8", + ...EMACS_ITEM, + }, + ].map((d) => { + if (!d.backgroundColor) { + d.backgroundColor = COLORS[i]; + } + i = (i + 1) % COLORS.length; + return d; + }), +}; + +function replaceNumbers(data) { + for (const [key, value] of Object.entries(data)) { + const items = document.querySelectorAll(`[data-num="${key}"]`); + for (const item of items) { + item.innerHTML = value; + } + } +} + +function emacsChart() { + const ctx = document.getElementById("chart-emacs-history"); + new Chart(ctx, { + type: "bar", + data: EMACS_DATA, + plugins: [ChartDataLabels], + options: { + indexAxis: "y", + grouped: true, + aspectRatio: 1.1, + parsing: { + yAxisKey: "name", + xAxisKey: "span", + }, + layout: { + padding: 1, + }, + scales: { + x: { + type: "time", + min: new Date("2018-09"), + }, + ...Object.fromEntries( + [1, 2, 3, 4, 5, 6, 7].map((i) => [ + `yAxis${i}`, + { + display: false, + }, + ]) + ), + }, + plugins: { + legend: { + display: false, + }, + title: { + display: true, + text: "Figure 1. Everything goes into Emacs", + color: "black", + font: { + size: 15, + }, + }, + datalabels: { + formatter: function (value, context) { + return context.dataset.label; + }, + color: "black", + }, + tooltip: { + callbacks: { + label: function (context) { + const startDate = new Date( + context.parsed._custom.start + ).toLocaleDateString("en-GB"); + let endDate = new Date( + context.parsed._custom.end + ).toLocaleDateString("en-GB"); + if (endDate === TODAY_LOCALE) { + endDate = "Today"; + } + const label = context.dataset.label; + return `${label}: ${startDate} - ${endDate}`; + }, + }, + }, + }, + }, + }); +} + +async function emacsScreenTimeChart() { + const response = await fetch("/data/2023-03-13-emacs/emacs-screen-time.json"); + const rawData = await response.json(); + const data = { + labels: rawData.map((d) => new Date(d["date_trunc"])), + datasets: [ + { + data: rawData.map((d) => ({ + period: new Date(d["date_trunc"]), + value: d["percent"], + })), + }, + ], + }; + + const ctx = document.getElementById("chart-emacs-screen-time"); + new Chart(ctx, { + type: "bar", + data, + options: { + parsing: { + xAxisKey: "period", + yAxisKey: "value", + }, + scales: { + x: { + type: "time", + min: data.labels[0], + }, + y: { + title: { + display: true, + text: "Ratio of direct screen time", + }, + }, + }, + plugins: { + legend: { + display: false, + }, + title: { + display: true, + text: "Figure 2. Emacs direct screen time ratio over time", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); +} + +async function emacsTimeChart() { + const response = await fetch( + "/data/2023-03-13-emacs/emacs-related-time-per-month.json" + ); + const rawData = await response.json(); + const labels = [ + ["config_hours", "Config", "#A989C5"], + ["package_hours", "Emacs Packages", "#7172AD"], + ["orgmode_hours", "Org Mode", "#509EE3"], + ["sqrt_hours", "sqrtminusone.xyz", "#51528D"], + ["other_code_hours", "Other Code", "#F2A86F"], + ["misc_hours", "Misc", "#F9D45C"], + ]; + const data = { + labels: rawData.map((d) => new Date(d["period"])), + datasets: labels.map(([key, label, color]) => ({ + label, + data: rawData.map((d) => ({ + period: new Date(d["period"]), + value: d[key], + })), + backgroundColor: color, + })), + }; + const replaceData = {}; + for (const [key] of labels) { + replaceData[`${key}_total`] = 0; + replaceData[`${key}_percent`] = 0; + } + let total = 0; + for (const rawDatum of rawData) { + for (const [key] of labels) { + replaceData[`${key}_total`] += rawDatum[key] || 0; + total += rawDatum[key] || 0; + } + } + for (const [key] of labels) { + replaceData[`${key}_total`] = replaceData[`${key}_total`].toFixed(1); + replaceData[`${key}_percent`] = ( + (replaceData[`${key}_total`] / total) * + 100 + ).toFixed(1); + } + replaceNumbers(replaceData); + + const ctx = document.getElementById("chart-emacs-time"); + new Chart(ctx, { + type: "bar", + data, + options: { + parsing: { + xAxisKey: "period", + yAxisKey: "value", + }, + scales: { + x: { + type: "time", + min: data.labels[0], + stacked: true, + }, + y: { + stacked: true, + title: { + display: true, + text: "Hours", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 3. Structure of Emacs usage per month", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); + + const rawStackedData = rawData.map((d) => { + let sum = 0; + for (const [key] of labels) { + sum += d[key]; + } + for (const [key] of labels) { + d[key] /= sum; + } + return d; + }); + const stackedData = { + labels: rawData.map((d) => new Date(d["period"])), + datasets: labels.map(([key, label, color]) => ({ + label, + data: rawStackedData.map((d) => ({ + period: new Date(d["period"]), + value: d[key], + })), + backgroundColor: color, + })), + }; + + const stackedCtx = document.getElementById("chart-emacs-time-stacked"); + new Chart(stackedCtx, { + type: "bar", + data: stackedData, + options: { + parsing: { + xAxisKey: "period", + yAxisKey: "value", + }, + scales: { + x: { + type: "time", + min: data.labels[0], + stacked: true, + }, + y: { + stacked: true, + min: 0, + max: 1, + title: { + display: true, + text: "Hours (%)", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 4. Structure of Emacs usage per month (stacked)", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); +} + +async function configsChart() { + const response = await fetch("/data/2023-03-13-emacs/lengths.csv"); + const csv = await response.text(); + const lines = csv.split("\n"); + const labels = lines[0].split(","); + const rawData = lines + .slice(1) + .reverse() + .map((line) => { + const values = line.split(","); + return Object.fromEntries( + values.map((value, i) => { + const key = labels[i]; + switch (key) { + case "date": + value = new Date(value); + break; + case "commit": + break; + default: + value = Number(value); + break; + } + return [key, value]; + }) + ); + }); + const data = { + labels: rawData.map((d) => d.date), + datasets: [ + { + label: "Emacs.org", + data: rawData.map((d) => ({ + x: d.date, + y: d["Emacs.org"], + })), + }, + { + label: "init.el", + data: rawData.map((d) => ({ + x: d.date, + y: d["init.el"], + })), + }, + ], + }; + + const numbers = { + emacs_org_length: rawData[rawData.length - 1]["Emacs.org"], + init_el_length: rawData[rawData.length - 1]["init.el"], + init_vim_length: rawData[rawData.length - 1]["init.vim"], + }; + replaceNumbers(numbers); + + const ctx = document.getElementById("chart-emacs-config-size"); + new Chart(ctx, { + type: "line", + data, + options: { + pointRadius: 0, + tension: 0.1, + parsing: { + xAxisKey: "x", + yAxisKey: "y", + }, + scales: { + x: { + type: "time", + min: new Date("2020-10-01"), + max: TODAY, + }, + y: { + title: { + display: true, + text: "Lines of code", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 6. Emacs.org and init.el lengths", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); + + const emacsVimData = { + datasets: [ + { + label: "Emacs.org", + data: rawData.map((d) => ({ + x: d.date, + y: d["Emacs.org"], + })), + xAxisID: "xAxis1", + }, + { + label: "init.el", + data: rawData.map((d) => ({ + x: d.date, + y: d["init.el"], + })), + xAxisID: "xAxis1", + }, + { + label: "init.vim", + data: rawData.map((d) => ({ + x: d.date, + y: d["init.vim"], + })), + xAxisID: "xAxis2", + }, + ], + }; + const ctxEmacsVim = document.getElementById("chart-emacs-vim-config-size"); + new Chart(ctxEmacsVim, { + type: "line", + data: emacsVimData, + options: { + pointRadius: 0, + tension: 0.1, + parsing: { + xAxisKey: "x", + yAxisKey: "y", + }, + scales: { + xAxis1: { + type: "time", + min: new Date("2020-10-12"), + max: new Date( + new Date("2020-10-12").getTime() + 450 * (1000 * 60 * 60 * 24) + ), + display: false, + }, + xAxis2: { + type: "time", + min: new Date("2019-03-30"), + max: new Date( + new Date("2019-03-30").getTime() + 450 * (1000 * 60 * 60 * 24) + ), + title: { + display: true, + text: "Days into", + }, + ticks: { + display: false, + }, + }, + y: { + title: { + display: true, + text: "Lines of code", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 7. Emacs vs. Vim config size", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); +} + +async function packagesChart() { + const response = await fetch("/data/2023-03-13-emacs/emacs-packages.json"); + const rawData = await response.json(); + + const data = [ + ...rawData.slice(0, 15), + { + name: "Other", + hours: rawData.slice(15).reduce((acc, d) => acc + d.hours, 0), + }, + ]; + + const replaceData = {}; + for (const datum of data) { + replaceData[`${datum.name}_total`] = datum.hours.toFixed(1); + } + replaceNumbers(replaceData); + + const ctx = document.getElementById("chart-emacs-packages"); + new Chart(ctx, { + type: "bar", + data: { + labels: data.map((d) => d.name), + datasets: [ + { + data, + }, + ], + }, + options: { + aspectRatio: 1.3, + parsing: { + yAxisKey: "name", + xAxisKey: "hours", + }, + indexAxis: "y", + scales: { + x: { + title: { + display: true, + text: "Hours", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 8. Time spent on Emacs packages", + color: "black", + font: { + size: 15, + }, + }, + legend: { + display: false, + }, + }, + }, + }); +} + +async function emacsVimSwitchChart() { + const response = await fetch("/data/2023-03-13-emacs/emacs-vim-switch.json"); + const rawData = await response.json(); + const labels = [ + ["config_hours", "Config", "#A989C5"], + ["package_hours", "Emacs Packages", "#7172AD"], + ["orgmode_hours", "Org Mode", "#509EE3"], + ["emacs_other_code_hours", "Other Code (Emacs)", "#F2A86F"], + ["vim_other_code_hours", "Other Code (Vim)", "#59c26e"], + ["misc_emacs_hours", "Misc (Emacs)", "#F9D45C"], + ]; + const data = { + labels: rawData.map((d) => new Date(d["period"])), + datasets: labels.map(([key, label, color]) => ({ + label, + data: rawData.map((d) => ({ + period: new Date(d["period"]), + value: d[key], + })), + backgroundColor: color, + })), + }; + + const ctx = document.getElementById("chart-emacs-vim-switch"); + new Chart(ctx, { + type: "bar", + data, + options: { + parsing: { + xAxisKey: "period", + yAxisKey: "value", + }, + scales: { + x: { + type: "time", + min: data.labels[0], + stacked: true, + }, + y: { + stacked: true, + title: { + display: true, + text: "Hours", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 5. Switch from Neovim to Emacs", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); +} + +async function zkChart() { + const response = await fetch("/data/2023-03-13-emacs/roam-stats.csv"); + const csv = await response.text(); + const lines = csv.split("\n"); + const labels = lines[0].split(","); + const rawData = lines + .slice(1) + .reverse() + .map((line) => { + const values = line.split(","); + return Object.fromEntries( + values.map((value, i) => { + const key = labels[i]; + switch (key) { + case "date": + value = new Date(value); + break; + case "commit": + break; + default: + value = Number(value); + break; + } + return [key, value]; + }) + ); + }); + const data = { + labels: rawData.map((d) => d.date), + datasets: [ + { + label: "Roam Nodes", + data: rawData.map((d) => ({ + x: d.date, + y: d["nodes"], + })), + }, + ], + }; + console.log(data) + + const ctx = document.getElementById("chart-roam-nodes"); + new Chart(ctx, { + type: "line", + data, + options: { + pointRadius: 0, + tension: 0.1, + parsing: { + xAxisKey: "x", + yAxisKey: "y", + }, + scales: { + x: { + type: "time", + min: data.labels[1], + max: TODAY, + }, + y: { + title: { + display: true, + text: "Roam Nodes", + }, + }, + }, + plugins: { + title: { + display: true, + text: "Figure 9. Roam Nodes", + color: "black", + font: { + size: 15, + }, + }, + }, + }, + }); +} + +document.addEventListener( + "DOMContentLoaded", + async function () { + emacsChart(); + emacsScreenTimeChart(); + emacsTimeChart(); + configsChart(); + packagesChart(); + emacsVimSwitchChart(); + zkChart(); + }, + false +); diff --git a/js/chart.js b/js/chart.js new file mode 100644 index 0000000..d819689 --- /dev/null +++ b/js/chart.js @@ -0,0 +1,20 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/chart.js@4.2.1/dist/chart.umd.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +/*! + * Chart.js v4.2.1 + * https://www.chartjs.org + * (c) 2023 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return jo},get Decimation(){return Uo},get Filler(){return ha},get Legend(){return fa},get SubTitle(){return ba},get Title(){return pa},get Tooltip(){return La}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function W(t){return!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set;let i,s;for(i=0,s=t.length;i{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=J(Math.min(it(r,a.axis,h).lo,i?s:it(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?J(Math.max(it(r,a.axis,c,!0).hi+1,i?0:it(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class bt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var xt=new bt; +/*! + * @kurkle/color v0.3.0 + * https://github.com/kurkle/color#readme + * (c) 2022 Jukka Kurkela + * Released under the MIT License + */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Zt{constructor(t){if(t instanceof Zt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Zt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Jt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Jt(t)?t:new Zt(t)}function te(t){return Jt(t)?t:new Zt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function be(t,e){return me(t).getPropertyValue(e)}const xe=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=xe[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ye(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const ve=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=ve(Math.min(h,a,l.maxWidth)),c=ve(Math.min(c,r,l.maxHeight)),h&&!c&&(c=ve(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=ve(Math.floor(c*s))),{width:h,height:c}}function we(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const ke=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Se(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Pe(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function De(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Ce(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Ee(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);s(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){k(s)||(s=Qe("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>He([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Xe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Qe(Ye(o,t),i),k(n))return Ue(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ti(t).includes(e),ownKeys:t=>ti(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function je(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:$e(t,s),setContext:e=>je(t,e,i,s),override:n=>je(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Xe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),Ue(t,e)&&(e=Ze(n._scopes,n,t,e));return e}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(k(a.index)&&s(t))e=e[a.index%e.length];else if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push(je(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Ue(e,h)&&(h=je(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function $e(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ye=(t,e)=>t?t+w(e):e,Ue=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Xe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function qe(t,e,i){return S(t)?t(e,i):t}const Ke=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Ge(t,e,i,s,n){for(const o of e){const e=Ke(i,o);if(e){t.add(e);const o=qe(e._fallback,i,n);if(k(o)&&o!==i&&o!==s)return o}else if(!1===e&&k(s)&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=qe(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Je(h,l,i,r||i,s);return null!==c&&((!k(r)||r===i||(c=Je(h,l,r,c,s),null!==c))&&He(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Je(t,e,i,s,n){for(;i;)i=Ge(t,e,i,s,n);return i}function Qe(t,e){for(const i of e){if(!i)continue;const e=i[t];if(k(e))return e}}function ti(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ei(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function oi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ai(t,e="x"){const i=ni(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=si(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ai(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,ci=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,ui={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>hi(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>hi(t)?t:ci(t,.075,.3),easeOutElastic:t=>hi(t)?t:di(t,.075,.3),easeInOutElastic(t){const e=.1125;return hi(t)?t:t<.5?.5*ci(2*t,e,.45):.5+.5*di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-ui.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*ui.easeInBounce(2*t):.5*ui.easeOutBounce(2*t-1)+.5};function fi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function pi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=fi(t,n,i),r=fi(n,o,i),l=fi(o,e,i),h=fi(a,r,i),c=fi(r,l,i);return fi(h,c,i)}const mi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function xi(t,e){const i=(""+t).match(mi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function _i(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+a(t)||0;return i}function yi(t){return _i(t,{top:"y",right:"x",bottom:"y",left:"x"})}function vi(t){return _i(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Mi(t){const e=yi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function wi(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:xi(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=Pe(n),n}function ki(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Pi(t,e){return Object.assign(Object.create(t),e)}function Di(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ci(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Oi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ai(t){return"angle"===t?{between:Z,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ti({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Li(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Ai(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Ai(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hx||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ti({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(Ti({start:_,end:d,loop:u,count:a,style:f})),g}function Ei(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Ii(t,[{start:a,end:r,loop:o}],i,e);return Ii(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Yi={evaluateInteractionItems:Ni,modes:{index(t,e,i,s){const n=ye(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Wi(t,n,o,s,a):ji(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tWi(t,ye(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ye(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return ji(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>$i(t,ye(e,t),"x",i.intersect,s),y:(t,e,i,s)=>$i(t,ye(e,t),"y",i.intersect,s)}};const Ui=["left","top","right","bottom"];function Xi(t,e){return t.filter((t=>t.pos===e))}function qi(t,e){return t.filter((t=>-1===Ui.indexOf(t.pos)&&t.box.axis===e))}function Ki(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Gi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ui.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function es(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Ki(Xi(e,"left"),!0),n=Ki(Xi(e,"right")),o=Ki(Xi(e,"top"),!0),a=Ki(Xi(e,"bottom")),r=qi(e,"x"),l=qi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xi(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);Ji(f,Mi(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Gi(l.concat(h),d);es(r.fullSize,g,d,p),es(l,g,d,p),es(h,g,d,p)&&es(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),ss(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,ss(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class os{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class as extends os{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const rs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ls=t=>null===t||""===t;const hs=!!ke&&{passive:!0};function cs(t,e,i){t.canvas.removeEventListener(e,i,hs)}function ds(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function us(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.addedNodes,s),e=e&&!ds(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function fs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ds(i.removedNodes,s),e=e&&!ds(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const gs=new Map;let ps=0;function ms(){const t=window.devicePixelRatio;t!==ps&&(ps=t,gs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function bs(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){gs.size||window.addEventListener("resize",ms),gs.set(t,e)}(t,o),a}function xs(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){gs.delete(t),gs.size||window.removeEventListener("resize",ms)}(t)}function _s(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=rs[t.type]||t.type,{x:s,y:n}=ye(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t.addEventListener(e,i,hs)}(s,e,n),n}class ys extends os{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ls(n)){const e=Se(t,"width");void 0!==e&&(t.width=e)}if(ls(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Se(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:us,detach:fs,resize:bs}[e]||_s;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:xs,detach:xs,resize:xs}[e]||cs)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=ge(t);return!(!e||!e.isConnected)}}function vs(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?as:ys}var Ms=Object.freeze({__proto__:null,_detectPlatform:vs,BasePlatform:os,BasicPlatform:as,DomPlatform:ys});const ws="transparent",ks={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||ws),n=s.valid&&Qt(e||ws);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Ss{constructor(t,e,i,s){const n=e[i];s=ki([t.to,s,n,t.from]);const o=ki([t.from,n,s]);this._active=!0,this._fn=t.fn||ks[t.type||typeof o],this._easing=ui[t.easing]||ui.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=ki([t.to,e,s,t.from]),this._from=ki([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new Ss(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(xt.add(this._chart,i),!0):void 0}}function Ds(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Cs(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Es(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Is(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const zs=t=>"reset"===t||"none"===t,Fs=(t,e)=>e?t:Object.assign({},t);class Vs{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=As(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Is(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Rs(t,"x")),o=e.yAxisID=l(i.yAxisID,Rs(t,"y")),a=e.rAxisID=l(i.rAxisID,Rs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Is(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Cs(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Fs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ps(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||zs(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){zs(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!zs(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ns(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Ws(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,js=(t,e)=>Math.min(e||t,t);function $s(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Us(t){return t.drawTicks?t.tickLength:0}function Xs(t,e){if(!t.display)return 0;const i=wi(t.font,e),s=Mi(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function qs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Ks extends Bs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Si(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=J(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Us(t.grid)-e.padding-Xs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(J((h.highest.height+6)/o,-1,1)),Math.asin(J(a/r,-1,1))-Math.asin(J(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Xs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Us(n)+o):(t.height=this.maxHeight,t.width=Us(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Oe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Us(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(t){return Oe(i,t,p)};let x,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)x=b(this.bottom),w=this.bottom-u,S=x-m,D=b(t.top)+m,O=t.bottom;else if("bottom"===a)x=b(this.top),D=t.top,O=b(t.bottom)-m,w=x+m,S=this.top+u;else if("left"===a)x=b(this.right),M=this.right-u,k=x-m,P=b(t.left)+m,C=t.right;else if("right"===a)x=b(this.left),P=t.left,C=b(t.right)-m,M=x+m,k=this.left+u;else if("x"===e){if("center"===a)x=b((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=x+m,S=w+u}else if("y"===e){if("center"===a)x=b((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];x=b(this.chart.scales[t].getPixelForValue(e))}M=x-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class Zs{constructor(){this.controllers=new Gs(Vs,"datasets",!0),this.elements=new Gs(Bs,"elements"),this.plugins=new Gs(Object,"plugins"),this.scales=new Gs(Ks,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function tn(t,e){return e||!1!==t?!0===t?{}:t:null}function en(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function sn(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function nn(t,e){if("x"===t||"y"===t||"r"===t)return t;var i;if(t=e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&nn(t[0].toLowerCase(),e))return t;throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`)}function on(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=function(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=sn(t.type,e),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!o(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=nn(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};a[t]=x(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||sn(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),x(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];x(e,[ue.scales[e.type],ue.scale])})),a}(t,e)}function an(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const rn=new Map,ln=new Set;function hn(t,e){let i=rn.get(t);return i||(i=e(),rn.set(t,i),ln.add(i)),i}const cn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class dn{constructor(t){this._config=function(t){return(t=t||{}).data=an(t.data),on(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=an(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),on(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return hn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return hn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return hn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return hn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>cn(r,t,e)))),e.forEach((t=>cn(r,s,t))),e.forEach((t=>cn(r,re[n]||{},t))),e.forEach((t=>cn(r,ue,t))),e.forEach((t=>cn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),ln.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=un(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=$e(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||fn(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=je(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=un(this._resolverCache,t,i);return o(e)?je(n,e,void 0,s):n}}function un(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:He(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const fn=t=>o(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||S(t[i])),!1);const gn=["top","bottom","left","right","chartArea"];function pn(t,e){return"top"===t||"bottom"===t||-1===gn.indexOf(t)&&"x"===e}function mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function bn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function xn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function _n(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const yn={},vn=t=>{const e=_n(t);return Object.values(yn).filter((t=>t.canvas===e)).pop()};function Mn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class wn{static defaults=ue;static instances=yn;static overrides=re;static registry=Js;static version="4.2.1";static getChart=vn;static register(...t){Js.add(...t),kn()}static unregister(...t){Js.remove(...t),kn()}constructor(t,e){const s=this.config=new dn(e),n=_n(t),o=vn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||vs(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Qs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],yn[this.id]=this,r&&l?(xt.listen(this,"complete",bn),xt.listen(this,"progress",xn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Js}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():we(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Ae(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,we(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=nn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=nn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&pn(n.position,a)===pn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Js.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ns.configure(this,t,t.options),ns.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ns.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){Mn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ns.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t){const{xScale:e,yScale:i}=t;if(e&&i)return{left:e.left,right:e.right,top:i.top,bottom:i.bottom}}(t)||this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Re(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&Ie(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Ee(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Yi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Pi(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function kn(){return u(wn.instances,(t=>t._plugins.invalidate()))}function Sn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Pn{static override(t){Object.assign(Pn.prototype,t)}constructor(t){this.options=t||{}}init(){}formats(){return Sn()}parse(){return Sn()}format(){return Sn()}add(){return Sn()}diff(){return Sn()}startOf(){return Sn()}endOf(){return Sn()}}var Dn={_date:Pn};function Cn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function An(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nZ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Z(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),b=g(C,h,d),x=g(C+E,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Vn=Object.freeze({__proto__:null,BarController:class extends Vs{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return An(t,e,i,s)}parseArrayData(t,e,i,s){return An(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(b-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);b=Math.max(Math.min(b,h),o),d=b+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;b+=t,u-=t}return{size:u,base:b,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,l="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=b?g:{};if(i=x){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),b||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PolarAreaController:Fn,PieController:class extends zn{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},RadarController:class extends Vs{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ei.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>b,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Bn(t,e,i,s){const n=_i(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return J(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:J(n.innerStart,0,a),innerEnd:J(n.innerEnd,0,a)}}function Nn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Wn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Bn(e,u,d,b-m),M=d-x,w=d-_,k=m+x/M,S=b-_/w,P=u+y,D=u+v,O=m+y/P,A=b-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Nn(w,S,a,r);t.arc(e.x,e.y,_,S,b+E)}const i=Nn(D,b,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Nn(D,A,a,r);t.arc(e.x,e.y,v,b+E,A+Math.PI)}const s=(b-v/u+(m+y/u))/2;if(t.arc(a,r,u,b-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Nn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=Nn(M,m,a,r);if(t.lineTo(n.x,n.y),x>0){const e=Nn(M,k,a,r);t.arc(e.x,e.y,x,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Hn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d="inner"===l.borderAlign;if(!h)return;d?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let u=e.endAngle;if(o){Wn(t,e,i,s,u,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,u),o||(Wn(t,e,i,s,u,n),t.stroke())}function jn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function $n(t,e,i){t.lineTo(i.x,i.y)}function Yn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function qn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Xn:Un}const Kn="function"==typeof Path2D;function Gn(t,e,i,s){Kn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),jn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=qn(e);for(const r of n)jn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Zn extends Bs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;li(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ri(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ei(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?gi:t.tension||"monotone"===t.cubicInterpolationMode?pi:fi}(i);let l,h;for(l=0,h=o.length;l=O||Z(n,a,r),g=tt(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Wn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function ro(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!s(a),x=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),b&&x&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=b?a:M,w=x?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(b&&(u&&M!==a?(i.push({value:a}),MMath.floor(z(t)),fo=(t,e)=>Math.pow(10,uo(t)+e);function go(t){return 1===t/Math.pow(10,uo(t))}function po(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function mo(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=uo(e);let o=function(t,e){let i=uo(e-t);for(;po(t,e,i)>10;)i++;for(;po(t,e,i)<10;)i--;return Math.min(i,uo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:go(g),significand:u}),s}class bo extends Ks{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=ho.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===fo(this.min,0)?fo(this.min,-1):fo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(fo(i,-1)),o(fo(s,1)))),i<=0&&n(fo(s,-1)),s<=0&&o(fo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=mo({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function xo(t){const e=t.ticks;if(e.display&&t.display){const t=Mi(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function _o(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function yo(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Mo(t){return 0===t||180===t?"center":t<180?"left":"right"}function wo(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function ko(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function So(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Mi(xo(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/xo(this.options))}generateTickLabels(t){ho.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?yo(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;o--){const e=n.setContext(t.getPointLabelContext(o)),a=wi(e.font),{x:r,y:l,textAlign:h,left:c,top:d,right:u,bottom:f}=t._pointLabelItems[o],{backdropColor:g}=e;if(!s(g)){const t=vi(e.borderRadius),s=Mi(e.backdropPadding);i.fillStyle=g;const n=c-s.left,o=d-s.top,a=u-c+s.width,r=f-d+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),We(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}Ve(i,t._pointLabels[o],r,l+a.lineHeight/2,a,{color:e.color,textAlign:h,textBaseline:"middle"})}}(this,a),n.display&&this.ticks.forEach(((t,e)=>{if(0!==e){l=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),s=n.setContext(i),r=o.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash),o.lineDashOffset=n.dashOffset,o.beginPath(),So(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,s,l,a,r)}})),i.display){for(t.save(),r=a-1;r>=0;r--){const s=i.setContext(this.getPointLabelContext(r)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),h=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(h.x,h.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=wi(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Mi(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ve(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}const Do={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Co=Object.keys(Do);function Oo(t,e){return t-e}function Ao(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!W(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function To(t,e,i,s){const n=Co.length;for(let o=Co.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function Eo(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Ro extends Ks{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new Dn._date(t.adapters.date);s.init(e),x(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Ao(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?To(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=Co.length-1;o>=Co.indexOf(i);o--){const i=Co[o];if(Do[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Co[i?Co.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Co.indexOf(t)+1,i=Co.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=J(s,0,o),n=J(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||To(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=W(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;dt-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var zo=Object.freeze({__proto__:null,CategoryScale:class extends Ks{static id="category";static defaults={ticks:{callback:ro}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:J(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:ao(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return ro.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:co,LogarithmicScale:bo,RadialLinearScale:Po,TimeScale:Ro,TimeSeriesScale:class extends Ro{static id="timeseries";static defaults=Ro.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Io(e,this.min),this._tableRange=Io(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot.replace("rgb(","rgba(").replace(")",", 0.5)")));function Bo(t){return Fo[t%Fo.length]}function No(t){return Vo[t%Vo.length]}function Wo(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof zn?e=function(t,e){return t.backgroundColor=t.data.map((()=>Bo(e++))),e}(i,e):n instanceof Fn?e=function(t,e){return t.backgroundColor=t.data.map((()=>No(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Bo(e),t.backgroundColor=No(e),++e}(i,e))}}function Ho(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var jo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n;if(!i.forceOverride&&(Ho(s)||(a=n)&&(a.borderColor||a.backgroundColor)||o&&Ho(o)))return;var a;const r=Wo(t);s.forEach(r)}};function $o(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Yo(t){t.data.datasets.forEach((t=>{$o(t)}))}var Uo={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Yo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===ki([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=J(it(e,o.axis,a).lo,0,i-1)),s=h?J(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void $o(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+i-1,_=t[e].x,y=t[x].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&b.push({...t[e],x:p}),s!==u&&s!==i&&b.push({...t[s],x:p})}o>0&&i!==u&&b.push(t[i]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Yo(t)}};function Xo(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function qo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function Ko(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function Go(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=qo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Zn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function Zo(t){return t&&!1!==t.fill}function Jo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function Qo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function ta(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&na(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;Zo(i)&&na(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;Zo(s)&&"beforeDatasetDraw"===i.drawTime&&na(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const ca=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class da extends Bs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=wi(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=ca(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=ua(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Di(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Re(t,this),this._draw(),Ie(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Di(t.rtl,this.left,this.width),h=wi(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=ca(o,d),b=this.isHorizontal(),x=this._computeTitleHeight();f=b?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+x,line:0}:{x:this.left+c,y:ft(n,this.top+x+c,this.bottom-e[0].height),line:0},Ci(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),b?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+x+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Le(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=vi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?We(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,b?S+k:this.right,t.rtl),function(t,e,i){Ve(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),b)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=ua(y,t)}else f.y+=_})),Oi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=wi(e.font),s=Mi(e.padding);if(!e.display)return;const n=Di(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ve(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=wi(t.font),i=Mi(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=Mi(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ga extends Bs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=Mi(i.padding);const o=s*wi(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=wi(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ve(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var pa={id:"title",_element:ga,start(t,e,i){!function(t,e){const i=new ga({ctx:t.ctx,options:e,chart:t});ns.configure(t,i,e),ns.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ns.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ns.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ma=new WeakMap;var ba={id:"subtitle",start(t,e,i){const s=new ga({ctx:t.ctx,options:i,chart:t});ns.configure(t,s,i),ns.addBox(t,s),ma.set(t,s)},stop(t){ns.removeBox(t,ma.get(t)),ma.delete(t)},beforeUpdate(t,e,i){const s=ma.get(t);ns.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const xa={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function va(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ma(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=wi(e.bodyFont),h=wi(e.titleFont),c=wi(e.footerFont),d=o.length,f=n.length,g=s.length,p=Mi(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function wa(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function ka(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||wa(t,e,i,s),yAlign:s}}function Sa(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=vi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:J(g,0,s.width-e.width),y:J(p,0,s.height-e.height)}}function Pa(t,e,i){const s=Mi(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Da(t){return _a([],ya(t))}function Ca(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Oa={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Ca(i,t);_a(e.before,ya(Aa(n,"beforeLabel",this,t))),_a(e.lines,Aa(n,"label",this,t)),_a(e.after,ya(Aa(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return Da(Aa(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Aa(i,"beforeFooter",this,t),n=Aa(i,"footer",this,t),o=Aa(i,"afterFooter",this,t);let a=[];return a=_a(a,ya(s)),a=_a(a,ya(n)),a=_a(a,ya(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Ca(t.callbacks,e);s.push(Aa(i,"labelColor",this,e)),n.push(Aa(i,"labelPointStyle",this,e)),o.push(Aa(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=xa[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ma(this,i),a=Object.assign({},t,e),r=ka(this.chart,i,a),l=Sa(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=vi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Di(i.rtl,this.x,this.width);for(t.x=Pa(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=wi(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,We(t,{x:e,y:p,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),We(t,{x:i,y:p+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,p,h,l),t.strokeRect(e,p,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,p+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=wi(i.bodyFont);let d=c.lineHeight,f=0;const g=Di(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let b,x,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Pa(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=xa[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ma(this,t),a=Object.assign({},i,this._size),r=ka(e,t,a),l=Sa(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Mi(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ci(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Oi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=xa[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var La={id:"tooltip",_element:Ta,positioners:xa,afterInit(t,e,i){i&&(t.tooltip=new Ta({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Oa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return wn.register(Vn,zo,oo,t),wn.helpers={...Vi},wn._adapters=Dn,wn.Animation=Ss,wn.Animations=Ps,wn.animator=xt,wn.controllers=Js.controllers.items,wn.DatasetController=Vs,wn.Element=Bs,wn.elements=oo,wn.Interaction=Yi,wn.layouts=ns,wn.platforms=Ms,wn.Scale=Ks,wn.Ticks=ae,Object.assign(wn,Vn,zo,oo,t,Ms),wn.Chart=wn,"undefined"!=typeof window&&(window.Chart=wn),wn})); +//# sourceMappingURL=chart.umd.js.map diff --git a/js/chartjs-adapter-date-fns.bundle.min.js b/js/chartjs-adapter-date-fns.bundle.min.js new file mode 100644 index 0000000..37bffe6 --- /dev/null +++ b/js/chartjs-adapter-date-fns.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * chartjs-adapter-date-fns v3.0.0 + * https://www.chartjs.org + * (c) 2022 chartjs-adapter-date-fns Contributors + * Released under the MIT license + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("chart.js")):"function"==typeof define&&define.amd?define(["chart.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Chart)}(this,(function(t){"use strict";function e(t){if(null===t||!0===t||!1===t)return NaN;var e=Number(t);return isNaN(e)?e:e<0?Math.ceil(e):Math.floor(e)}function r(t,e){if(e.length1?"s":"")+" required, but only "+e.length+" present")}function n(t){r(1,arguments);var e=Object.prototype.toString.call(t);return t instanceof Date||"object"==typeof t&&"[object Date]"===e?new Date(t.getTime()):"number"==typeof t||"[object Number]"===e?new Date(t):("string"!=typeof t&&"[object String]"!==e||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function a(t,a){r(2,arguments);var i=n(t),o=e(a);return isNaN(o)?new Date(NaN):o?(i.setDate(i.getDate()+o),i):i}function i(t,a){r(2,arguments);var i=n(t),o=e(a);if(isNaN(o))return new Date(NaN);if(!o)return i;var u=i.getDate(),s=new Date(i.getTime());s.setMonth(i.getMonth()+o+1,0);var c=s.getDate();return u>=c?s:(i.setFullYear(s.getFullYear(),s.getMonth(),u),i)}function o(t,a){r(2,arguments);var i=n(t).getTime(),o=e(a);return new Date(i+o)}var u=36e5;function s(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getDay(),f=(l0?1:o}function m(t){r(1,arguments);var e=n(t);return!isNaN(e)}function w(t,e){r(2,arguments);var a=n(t),i=n(e),o=a.getFullYear()-i.getFullYear(),u=a.getMonth()-i.getMonth();return 12*o+u}function g(t,e){r(2,arguments);var a=n(t),i=n(e);return a.getFullYear()-i.getFullYear()}function v(t,e){var r=t.getFullYear()-e.getFullYear()||t.getMonth()-e.getMonth()||t.getDate()-e.getDate()||t.getHours()-e.getHours()||t.getMinutes()-e.getMinutes()||t.getSeconds()-e.getSeconds()||t.getMilliseconds()-e.getMilliseconds();return r<0?-1:r>0?1:r}function y(t,e){r(2,arguments);var a=n(t),i=n(e),o=v(a,i),u=Math.abs(f(a,i));a.setDate(a.getDate()-o*u);var s=v(a,i)===-o,c=o*(u-s);return 0===c?0:c}function b(t,e){r(2,arguments);var a=n(t),i=n(e);return a.getTime()-i.getTime()}var T=36e5;function p(t){r(1,arguments);var e=n(t);return e.setHours(23,59,59,999),e}function C(t){r(1,arguments);var e=n(t),a=e.getMonth();return e.setFullYear(e.getFullYear(),a+1,0),e.setHours(23,59,59,999),e}function M(t){r(1,arguments);var e=n(t);return p(e).getTime()===C(e).getTime()}function D(t,e){r(2,arguments);var a,i=n(t),o=n(e),u=h(i,o),s=Math.abs(w(i,o));if(s<1)a=0;else{1===i.getMonth()&&i.getDate()>27&&i.setDate(30),i.setMonth(i.getMonth()-u*s);var c=h(i,o)===-u;M(n(t))&&1===s&&1===h(t,o)&&(c=!1),a=u*(s-c)}return 0===a?0:a}var x={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function k(t){return function(e){var r=e||{},n=r.width?String(r.width):t.defaultWidth;return t.formats[n]||t.formats[t.defaultWidth]}}var U={date:k({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:k({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:k({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},Y={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function N(t){return function(e,r){var n,a=r||{};if("formatting"===(a.context?String(a.context):"standalone")&&t.formattingValues){var i=t.defaultFormattingWidth||t.defaultWidth,o=a.width?String(a.width):i;n=t.formattingValues[o]||t.formattingValues[i]}else{var u=t.defaultWidth,s=a.width?String(a.width):t.defaultWidth;n=t.values[s]||t.values[u]}return n[t.argumentCallback?t.argumentCallback(e):e]}}function S(t){return function(e,r){var n=String(e),a=r||{},i=a.width,o=i&&t.matchPatterns[i]||t.matchPatterns[t.defaultMatchWidth],u=n.match(o);if(!u)return null;var s,c=u[0],d=i&&t.parsePatterns[i]||t.parsePatterns[t.defaultParseWidth];return s="[object Array]"===Object.prototype.toString.call(d)?function(t,e){for(var r=0;r0?"in "+n:n+" ago":n},formatLong:U,formatRelative:function(t,e,r,n){return Y[t]},localize:{ordinalNumber:function(t,e){var r=Number(t),n=r%100;if(n>20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},era:N({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:N({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(t){return Number(t)-1}}),month:N({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:N({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:N({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(P={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(t){return parseInt(t,10)}},function(t,e){var r=String(t),n=e||{},a=r.match(P.matchPattern);if(!a)return null;var i=a[0],o=r.match(P.parsePattern);if(!o)return null;var u=P.valueCallback?P.valueCallback(o[0]):o[0];return{value:u=n.valueCallback?n.valueCallback(u):u,rest:r.slice(i.length)}}),era:S({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:S({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(t){return t+1}}),month:S({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:S({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:S({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function H(t,n){r(2,arguments);var a=e(n);return o(t,-a)}function E(t,e){for(var r=t<0?"-":"",n=Math.abs(t).toString();n.length0?r:1-r;return E("yy"===e?n%100:n,e.length)},M:function(t,e){var r=t.getUTCMonth();return"M"===e?String(r+1):E(r+1,2)},d:function(t,e){return E(t.getUTCDate(),e.length)},a:function(t,e){var r=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return"am"===r?"a.m.":"p.m."}},h:function(t,e){return E(t.getUTCHours()%12||12,e.length)},H:function(t,e){return E(t.getUTCHours(),e.length)},m:function(t,e){return E(t.getUTCMinutes(),e.length)},s:function(t,e){return E(t.getUTCSeconds(),e.length)},S:function(t,e){var r=e.length,n=t.getUTCMilliseconds();return E(Math.floor(n*Math.pow(10,r-3)),e.length)}},F=864e5;function W(t){r(1,arguments);var e=1,a=n(t),i=a.getUTCDay(),o=(i=o.getTime()?a+1:e.getTime()>=s.getTime()?a:a-1}function Q(t){r(1,arguments);var e=L(t),n=new Date(0);n.setUTCFullYear(e,0,4),n.setUTCHours(0,0,0,0);var a=W(n);return a}var R=6048e5;function I(t){r(1,arguments);var e=n(t),a=W(e).getTime()-Q(e).getTime();return Math.round(a/R)+1}function G(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getUTCDay(),f=(l=1&&l<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var f=new Date(0);f.setUTCFullYear(o+1,0,l),f.setUTCHours(0,0,0,0);var h=G(f,a),m=new Date(0);m.setUTCFullYear(o,0,l),m.setUTCHours(0,0,0,0);var w=G(m,a);return i.getTime()>=h.getTime()?o+1:i.getTime()>=w.getTime()?o:o-1}function j(t,n){r(1,arguments);var a=n||{},i=a.locale,o=i&&i.options&&i.options.firstWeekContainsDate,u=null==o?1:e(o),s=null==a.firstWeekContainsDate?u:e(a.firstWeekContainsDate),c=X(t,n),d=new Date(0);d.setUTCFullYear(c,0,s),d.setUTCHours(0,0,0,0);var l=G(d,n);return l}var B=6048e5;function z(t,e){r(1,arguments);var a=n(t),i=G(a,e).getTime()-j(a,e).getTime();return Math.round(i/B)+1}var A="midnight",Z="noon",K="morning",$="afternoon",_="evening",J="night",V={G:function(t,e,r){var n=t.getUTCFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});default:return r.era(n,{width:"wide"})}},y:function(t,e,r){if("yo"===e){var n=t.getUTCFullYear(),a=n>0?n:1-n;return r.ordinalNumber(a,{unit:"year"})}return O.y(t,e)},Y:function(t,e,r,n){var a=X(t,n),i=a>0?a:1-a;return"YY"===e?E(i%100,2):"Yo"===e?r.ordinalNumber(i,{unit:"year"}):E(i,e.length)},R:function(t,e){return E(L(t),e.length)},u:function(t,e){return E(t.getUTCFullYear(),e.length)},Q:function(t,e,r){var n=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"Q":return String(n);case"QQ":return E(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(t,e,r){var n=Math.ceil((t.getUTCMonth()+1)/3);switch(e){case"q":return String(n);case"qq":return E(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(t,e,r){var n=t.getUTCMonth();switch(e){case"M":case"MM":return O.M(t,e);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(t,e,r){var n=t.getUTCMonth();switch(e){case"L":return String(n+1);case"LL":return E(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(t,e,r,n){var a=z(t,n);return"wo"===e?r.ordinalNumber(a,{unit:"week"}):E(a,e.length)},I:function(t,e,r){var n=I(t);return"Io"===e?r.ordinalNumber(n,{unit:"week"}):E(n,e.length)},d:function(t,e,r){return"do"===e?r.ordinalNumber(t.getUTCDate(),{unit:"date"}):O.d(t,e)},D:function(t,e,a){var i=function(t){r(1,arguments);var e=n(t),a=e.getTime();e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0);var i=e.getTime(),o=a-i;return Math.floor(o/F)+1}(t);return"Do"===e?a.ordinalNumber(i,{unit:"dayOfYear"}):E(i,e.length)},E:function(t,e,r){var n=t.getUTCDay();switch(e){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(t,e,r,n){var a=t.getUTCDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return E(i,2);case"eo":return r.ordinalNumber(i,{unit:"day"});case"eee":return r.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(a,{width:"short",context:"formatting"});default:return r.day(a,{width:"wide",context:"formatting"})}},c:function(t,e,r,n){var a=t.getUTCDay(),i=(a-n.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return E(i,e.length);case"co":return r.ordinalNumber(i,{unit:"day"});case"ccc":return r.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(a,{width:"narrow",context:"standalone"});case"cccccc":return r.day(a,{width:"short",context:"standalone"});default:return r.day(a,{width:"wide",context:"standalone"})}},i:function(t,e,r){var n=t.getUTCDay(),a=0===n?7:n;switch(e){case"i":return String(a);case"ii":return E(a,e.length);case"io":return r.ordinalNumber(a,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(t,e,r){var n=t.getUTCHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(t,e,r){var n,a=t.getUTCHours();switch(n=12===a?Z:0===a?A:a/12>=1?"pm":"am",e){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(t,e,r){var n,a=t.getUTCHours();switch(n=a>=17?_:a>=12?$:a>=4?K:J,e){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(t,e,r){if("ho"===e){var n=t.getUTCHours()%12;return 0===n&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return O.h(t,e)},H:function(t,e,r){return"Ho"===e?r.ordinalNumber(t.getUTCHours(),{unit:"hour"}):O.H(t,e)},K:function(t,e,r){var n=t.getUTCHours()%12;return"Ko"===e?r.ordinalNumber(n,{unit:"hour"}):E(n,e.length)},k:function(t,e,r){var n=t.getUTCHours();return 0===n&&(n=24),"ko"===e?r.ordinalNumber(n,{unit:"hour"}):E(n,e.length)},m:function(t,e,r){return"mo"===e?r.ordinalNumber(t.getUTCMinutes(),{unit:"minute"}):O.m(t,e)},s:function(t,e,r){return"so"===e?r.ordinalNumber(t.getUTCSeconds(),{unit:"second"}):O.s(t,e)},S:function(t,e){return O.S(t,e)},X:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();if(0===a)return"Z";switch(e){case"X":return et(a);case"XXXX":case"XX":return rt(a);default:return rt(a,":")}},x:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"x":return et(a);case"xxxx":case"xx":return rt(a);default:return rt(a,":")}},O:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+tt(a,":");default:return"GMT"+rt(a,":")}},z:function(t,e,r,n){var a=(n._originalDate||t).getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+tt(a,":");default:return"GMT"+rt(a,":")}},t:function(t,e,r,n){var a=n._originalDate||t;return E(Math.floor(a.getTime()/1e3),e.length)},T:function(t,e,r,n){return E((n._originalDate||t).getTime(),e.length)}};function tt(t,e){var r=t>0?"-":"+",n=Math.abs(t),a=Math.floor(n/60),i=n%60;if(0===i)return r+String(a);var o=e||"";return r+String(a)+o+E(i,2)}function et(t,e){return t%60==0?(t>0?"-":"+")+E(Math.abs(t)/60,2):rt(t,e)}function rt(t,e){var r=e||"",n=t>0?"-":"+",a=Math.abs(t);return n+E(Math.floor(a/60),2)+r+E(a%60,2)}var nt=V;function at(t,e){switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}}function it(t,e){switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}}var ot={p:it,P:function(t,e){var r,n=t.match(/(P+)(p+)?/),a=n[1],i=n[2];if(!i)return at(t,e);switch(a){case"P":r=e.dateTime({width:"short"});break;case"PP":r=e.dateTime({width:"medium"});break;case"PPP":r=e.dateTime({width:"long"});break;default:r=e.dateTime({width:"full"})}return r.replace("{{date}}",at(a,e)).replace("{{time}}",it(i,e))}},ut=ot,st=["D","DD"],ct=["YY","YYYY"];function dt(t){return-1!==st.indexOf(t)}function lt(t){return-1!==ct.indexOf(t)}function ft(t,e,r){if("YYYY"===t)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(e,"`) for formatting years to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("YY"===t)throw new RangeError("Use `yy` instead of `YY` (in `".concat(e,"`) for formatting years to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("D"===t)throw new RangeError("Use `d` instead of `D` (in `".concat(e,"`) for formatting days of the month to the input `").concat(r,"`; see: https://git.io/fxCyr"));if("DD"===t)throw new RangeError("Use `dd` instead of `DD` (in `".concat(e,"`) for formatting days of the month to the input `").concat(r,"`; see: https://git.io/fxCyr"))}var ht=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,mt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,wt=/^'([^]*?)'?$/,gt=/''/g,vt=/[a-zA-Z]/;function yt(t){return t.match(wt)[1].replace(gt,"'")}function bt(t,e){if(null==t)throw new TypeError("assign requires that input parameter not be null or undefined");for(var r in e=e||{})e.hasOwnProperty(r)&&(t[r]=e[r]);return t}function Tt(t,a,i){r(2,arguments);var o=i||{},u=o.locale,s=u&&u.options&&u.options.weekStartsOn,c=null==s?0:e(s),d=null==o.weekStartsOn?c:e(o.weekStartsOn);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var l=n(t),f=e(a),h=l.getUTCDay(),m=f%7,w=(m+7)%7,g=(w0,a=n?e:1-e;if(a<=50)r=t||100;else{var i=a+50;r=t+100*Math.floor(i/100)-(t>=i%100?100:0)}return n?r:1-r}var Jt=[31,28,31,30,31,30,31,31,30,31,30,31],Vt=[31,29,31,30,31,30,31,31,30,31,30,31];function te(t){return t%400==0||t%4==0&&t%100!=0}var ee={G:{priority:140,parse:function(t,e,r,n){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}},set:function(t,e,r,n){return e.era=r,t.setUTCFullYear(r,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["R","u","t","T"]},y:{priority:130,parse:function(t,e,r,n){var a=function(t){return{year:t,isTwoDigitYear:"yy"===e}};switch(e){case"y":return Zt(4,t,a);case"yo":return r.ordinalNumber(t,{unit:"year",valueCallback:a});default:return Zt(e.length,t,a)}},validate:function(t,e,r){return e.isTwoDigitYear||e.year>0},set:function(t,e,r,n){var a=t.getUTCFullYear();if(r.isTwoDigitYear){var i=_t(r.year,a);return t.setUTCFullYear(i,0,1),t.setUTCHours(0,0,0,0),t}var o="era"in e&&1!==e.era?1-r.year:r.year;return t.setUTCFullYear(o,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","u","w","I","i","e","c","t","T"]},Y:{priority:130,parse:function(t,e,r,n){var a=function(t){return{year:t,isTwoDigitYear:"YY"===e}};switch(e){case"Y":return Zt(4,t,a);case"Yo":return r.ordinalNumber(t,{unit:"year",valueCallback:a});default:return Zt(e.length,t,a)}},validate:function(t,e,r){return e.isTwoDigitYear||e.year>0},set:function(t,e,r,n){var a=X(t,n);if(r.isTwoDigitYear){var i=_t(r.year,a);return t.setUTCFullYear(i,0,n.firstWeekContainsDate),t.setUTCHours(0,0,0,0),G(t,n)}var o="era"in e&&1!==e.era?1-r.year:r.year;return t.setUTCFullYear(o,0,n.firstWeekContainsDate),t.setUTCHours(0,0,0,0),G(t,n)},incompatibleTokens:["y","R","u","Q","q","M","L","I","d","D","i","t","T"]},R:{priority:130,parse:function(t,e,r,n){return Kt("R"===e?4:e.length,t)},set:function(t,e,r,n){var a=new Date(0);return a.setUTCFullYear(r,0,4),a.setUTCHours(0,0,0,0),W(a)},incompatibleTokens:["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]},u:{priority:130,parse:function(t,e,r,n){return Kt("u"===e?4:e.length,t)},set:function(t,e,r,n){return t.setUTCFullYear(r,0,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["G","y","Y","R","w","I","i","e","c","t","T"]},Q:{priority:120,parse:function(t,e,r,n){switch(e){case"Q":case"QQ":return Zt(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=1&&e<=4},set:function(t,e,r,n){return t.setUTCMonth(3*(r-1),1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]},q:{priority:120,parse:function(t,e,r,n){switch(e){case"q":case"qq":return Zt(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=1&&e<=4},set:function(t,e,r,n){return t.setUTCMonth(3*(r-1),1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]},M:{priority:110,parse:function(t,e,r,n){var a=function(t){return t-1};switch(e){case"M":return Bt(pt,t,a);case"MM":return Zt(2,t,a);case"Mo":return r.ordinalNumber(t,{unit:"month",valueCallback:a});case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.setUTCMonth(r,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]},L:{priority:110,parse:function(t,e,r,n){var a=function(t){return t-1};switch(e){case"L":return Bt(pt,t,a);case"LL":return Zt(2,t,a);case"Lo":return r.ordinalNumber(t,{unit:"month",valueCallback:a});case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.setUTCMonth(r,1),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]},w:{priority:100,parse:function(t,e,r,n){switch(e){case"w":return Bt(Dt,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=53},set:function(t,a,i,o){return G(function(t,a,i){r(2,arguments);var o=n(t),u=e(a),s=z(o,i)-u;return o.setUTCDate(o.getUTCDate()-7*s),o}(t,i,o),o)},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","i","t","T"]},I:{priority:100,parse:function(t,e,r,n){switch(e){case"I":return Bt(Dt,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=53},set:function(t,a,i,o){return W(function(t,a){r(2,arguments);var i=n(t),o=e(a),u=I(i)-o;return i.setUTCDate(i.getUTCDate()-7*u),i}(t,i,o),o)},incompatibleTokens:["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]},d:{priority:90,subPriority:1,parse:function(t,e,r,n){switch(e){case"d":return Bt(Ct,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return Zt(e.length,t)}},validate:function(t,e,r){var n=te(t.getUTCFullYear()),a=t.getUTCMonth();return n?e>=1&&e<=Vt[a]:e>=1&&e<=Jt[a]},set:function(t,e,r,n){return t.setUTCDate(r),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","w","I","D","i","e","c","t","T"]},D:{priority:90,subPriority:1,parse:function(t,e,r,n){switch(e){case"D":case"DD":return Bt(Mt,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return Zt(e.length,t)}},validate:function(t,e,r){return te(t.getUTCFullYear())?e>=1&&e<=366:e>=1&&e<=365},set:function(t,e,r,n){return t.setUTCMonth(0,r),t.setUTCHours(0,0,0,0),t},incompatibleTokens:["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]},E:{priority:90,parse:function(t,e,r,n){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["D","i","e","c","t","T"]},e:{priority:90,parse:function(t,e,r,n){var a=function(t){var e=7*Math.floor((t-1)/7);return(t+n.weekStartsOn+6)%7+e};switch(e){case"e":case"ee":return Zt(e.length,t,a);case"eo":return r.ordinalNumber(t,{unit:"day",valueCallback:a});case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]},c:{priority:90,parse:function(t,e,r,n){var a=function(t){var e=7*Math.floor((t-1)/7);return(t+n.weekStartsOn+6)%7+e};switch(e){case"c":case"cc":return Zt(e.length,t,a);case"co":return r.ordinalNumber(t,{unit:"day",valueCallback:a});case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}},validate:function(t,e,r){return e>=0&&e<=6},set:function(t,e,r,n){return(t=Tt(t,r,n)).setUTCHours(0,0,0,0),t},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]},i:{priority:90,parse:function(t,e,r,n){var a=function(t){return 0===t?7:t};switch(e){case"i":case"ii":return Zt(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return r.day(t,{width:"abbreviated",context:"formatting",valueCallback:a})||r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a});case"iiiii":return r.day(t,{width:"narrow",context:"formatting",valueCallback:a});case"iiiiii":return r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a});default:return r.day(t,{width:"wide",context:"formatting",valueCallback:a})||r.day(t,{width:"abbreviated",context:"formatting",valueCallback:a})||r.day(t,{width:"short",context:"formatting",valueCallback:a})||r.day(t,{width:"narrow",context:"formatting",valueCallback:a})}},validate:function(t,e,r){return e>=1&&e<=7},set:function(t,a,i,o){return t=function(t,a){r(2,arguments);var i=e(a);i%7==0&&(i-=7);var o=1,u=n(t),s=u.getUTCDay(),c=((i%7+7)%7=1&&e<=12},set:function(t,e,r,n){var a=t.getUTCHours()>=12;return a&&r<12?t.setUTCHours(r+12,0,0,0):a||12!==r?t.setUTCHours(r,0,0,0):t.setUTCHours(0,0,0,0),t},incompatibleTokens:["H","K","k","t","T"]},H:{priority:70,parse:function(t,e,r,n){switch(e){case"H":return Bt(xt,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=23},set:function(t,e,r,n){return t.setUTCHours(r,0,0,0),t},incompatibleTokens:["a","b","h","K","k","t","T"]},K:{priority:70,parse:function(t,e,r,n){switch(e){case"K":return Bt(Ut,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=11},set:function(t,e,r,n){return t.getUTCHours()>=12&&r<12?t.setUTCHours(r+12,0,0,0):t.setUTCHours(r,0,0,0),t},incompatibleTokens:["a","b","h","H","k","t","T"]},k:{priority:70,parse:function(t,e,r,n){switch(e){case"k":return Bt(kt,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=1&&e<=24},set:function(t,e,r,n){var a=r<=24?r%24:r;return t.setUTCHours(a,0,0,0),t},incompatibleTokens:["a","b","h","H","K","t","T"]},m:{priority:60,parse:function(t,e,r,n){switch(e){case"m":return Bt(Nt,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=59},set:function(t,e,r,n){return t.setUTCMinutes(r,0,0),t},incompatibleTokens:["t","T"]},s:{priority:50,parse:function(t,e,r,n){switch(e){case"s":return Bt(St,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return Zt(e.length,t)}},validate:function(t,e,r){return e>=0&&e<=59},set:function(t,e,r,n){return t.setUTCSeconds(r,0),t},incompatibleTokens:["t","T"]},S:{priority:30,parse:function(t,e,r,n){return Zt(e.length,t,(function(t){return Math.floor(t*Math.pow(10,3-e.length))}))},set:function(t,e,r,n){return t.setUTCMilliseconds(r),t},incompatibleTokens:["t","T"]},X:{priority:10,parse:function(t,e,r,n){switch(e){case"X":return zt(Rt,t);case"XX":return zt(It,t);case"XXXX":return zt(Gt,t);case"XXXXX":return zt(jt,t);default:return zt(Xt,t)}},set:function(t,e,r,n){return e.timestampIsSet?t:new Date(t.getTime()-r)},incompatibleTokens:["t","T","x"]},x:{priority:10,parse:function(t,e,r,n){switch(e){case"x":return zt(Rt,t);case"xx":return zt(It,t);case"xxxx":return zt(Gt,t);case"xxxxx":return zt(jt,t);default:return zt(Xt,t)}},set:function(t,e,r,n){return e.timestampIsSet?t:new Date(t.getTime()-r)},incompatibleTokens:["t","T","X"]},t:{priority:40,parse:function(t,e,r,n){return At(t)},set:function(t,e,r,n){return[new Date(1e3*r),{timestampIsSet:!0}]},incompatibleTokens:"*"},T:{priority:20,parse:function(t,e,r,n){return At(t)},set:function(t,e,r,n){return[new Date(r),{timestampIsSet:!0}]},incompatibleTokens:"*"}},re=ee,ne=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ae=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ie=/^'([^]*?)'?$/,oe=/''/g,ue=/\S/,se=/[a-zA-Z]/;function ce(t,e){if(e.timestampIsSet)return t;var r=new Date(0);return r.setFullYear(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()),r.setHours(t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()),r}function de(t){return t.match(ie)[1].replace(oe,"'")}var le=36e5,fe={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},he=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,me=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,we=/^([+-])(\d{2})(?::?(\d{2}))?$/;function ge(t){var e,r={},n=t.split(fe.dateTimeDelimiter);if(n.length>2)return r;if(/:/.test(n[0])?(r.date=null,e=n[0]):(r.date=n[0],e=n[1],fe.timeZoneDelimiter.test(r.date)&&(r.date=t.split(fe.timeZoneDelimiter)[0],e=t.substr(r.date.length,t.length))),e){var a=fe.timezone.exec(e);a?(r.time=e.replace(a[1],""),r.timezone=a[1]):r.time=e}return r}function ve(t,e){var r=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),n=t.match(r);if(!n)return{year:null};var a=n[1]&&parseInt(n[1]),i=n[2]&&parseInt(n[2]);return{year:null==i?a:100*i,restDateString:t.slice((n[1]||n[2]).length)}}function ye(t,e){if(null===e)return null;var r=t.match(he);if(!r)return null;var n=!!r[4],a=be(r[1]),i=be(r[2])-1,o=be(r[3]),u=be(r[4]),s=be(r[5])-1;if(n)return function(t,e,r){return e>=1&&e<=53&&r>=0&&r<=6}(0,u,s)?function(t,e,r){var n=new Date(0);n.setUTCFullYear(t,0,4);var a=n.getUTCDay()||7,i=7*(e-1)+r+1-a;return n.setUTCDate(n.getUTCDate()+i),n}(e,u,s):new Date(NaN);var c=new Date(0);return function(t,e,r){return e>=0&&e<=11&&r>=1&&r<=(Me[e]||(De(t)?29:28))}(e,i,o)&&function(t,e){return e>=1&&e<=(De(t)?366:365)}(e,a)?(c.setUTCFullYear(e,i,Math.max(a,o)),c):new Date(NaN)}function be(t){return t?parseInt(t):1}function Te(t){var e=t.match(me);if(!e)return null;var r=pe(e[1]),n=pe(e[2]),a=pe(e[3]);return function(t,e,r){if(24===t)return 0===e&&0===r;return r>=0&&r<60&&e>=0&&e<60&&t>=0&&t<25}(r,n,a)?r*le+6e4*n+1e3*a:NaN}function pe(t){return t&&parseFloat(t.replace(",","."))||0}function Ce(t){if("Z"===t)return 0;var e=t.match(we);if(!e)return 0;var r="+"===e[1]?-1:1,n=parseInt(e[2]),a=e[3]&&parseInt(e[3])||0;return function(t,e){return e>=0&&e<=59}(0,a)?r*(n*le+6e4*a):NaN}var Me=[31,null,31,30,31,30,31,31,30,31,30,31];function De(t){return t%400==0||t%4==0&&t%100}const xe={datetime:"MMM d, yyyy, h:mm:ss aaaa",millisecond:"h:mm:ss.SSS aaaa",second:"h:mm:ss aaaa",minute:"h:mm aaaa",hour:"ha",day:"MMM d",week:"PP",month:"MMM yyyy",quarter:"qqq - yyyy",year:"yyyy"};t._adapters._date.override({_id:"date-fns",formats:function(){return xe},parse:function(t,a){if(null==t)return null;const i=typeof t;return"number"===i||t instanceof Date?t=n(t):"string"===i&&(t="string"==typeof a?function(t,a,i,o){r(3,arguments);var u=String(t),s=String(a),d=o||{},l=d.locale||q;if(!l.match)throw new RangeError("locale must contain match property");var f=l.options&&l.options.firstWeekContainsDate,h=null==f?1:e(f),m=null==d.firstWeekContainsDate?h:e(d.firstWeekContainsDate);if(!(m>=1&&m<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var w=l.options&&l.options.weekStartsOn,g=null==w?0:e(w),v=null==d.weekStartsOn?g:e(d.weekStartsOn);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===s)return""===u?n(i):new Date(NaN);var y,b={firstWeekContainsDate:m,weekStartsOn:v,locale:l},T=[{priority:10,subPriority:-1,set:ce,index:0}],p=s.match(ae).map((function(t){var e=t[0];return"p"===e||"P"===e?(0,ut[e])(t,l.formatLong,b):t})).join("").match(ne),C=[];for(y=0;y0&&ue.test(u))return new Date(NaN);var P=T.map((function(t){return t.priority})).sort((function(t,e){return e-t})).filter((function(t,e,r){return r.indexOf(t)===e})).map((function(t){return T.filter((function(e){return e.priority===t})).sort((function(t,e){return e.subPriority-t.subPriority}))})).map((function(t){return t[0]})),E=n(i);if(isNaN(E))return new Date(NaN);var O=H(E,c(E)),F={};for(y=0;y=1&&f<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var h=s.options&&s.options.weekStartsOn,w=null==h?0:e(h),g=null==u.weekStartsOn?w:e(u.weekStartsOn);if(!(g>=0&&g<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!s.localize)throw new RangeError("locale must contain localize property");if(!s.formatLong)throw new RangeError("locale must contain formatLong property");var v=n(t);if(!m(v))throw new RangeError("Invalid time value");var y=c(v),b=H(v,y),T={firstWeekContainsDate:f,weekStartsOn:g,locale:s,_originalDate:v},p=o.match(mt).map((function(t){var e=t[0];return"p"===e||"P"===e?(0,ut[e])(t,s.formatLong,T):t})).join("").match(ht).map((function(e){if("''"===e)return"'";var r=e[0];if("'"===r)return yt(e);var n=nt[r];if(n)return!u.useAdditionalWeekYearTokens&<(e)&&ft(e,a,t),!u.useAdditionalDayOfYearTokens&&dt(e)&&ft(e,a,t),n(b,e,s.localize,T);if(r.match(vt))throw new RangeError("Format string contains an unescaped latin alphabet character `"+r+"`");return e})).join("");return p}(t,a,this.options)},add:function(t,n,s){switch(s){case"millisecond":return o(t,n);case"second":return function(t,n){r(2,arguments);var a=e(n);return o(t,1e3*a)}(t,n);case"minute":return function(t,n){r(2,arguments);var a=e(n);return o(t,6e4*a)}(t,n);case"hour":return function(t,n){r(2,arguments);var a=e(n);return o(t,a*u)}(t,n);case"day":return a(t,n);case"week":return function(t,n){r(2,arguments);var i=e(n),o=7*i;return a(t,o)}(t,n);case"month":return i(t,n);case"quarter":return function(t,n){r(2,arguments);var a=e(n),o=3*a;return i(t,o)}(t,n);case"year":return function(t,n){r(2,arguments);var a=e(n);return i(t,12*a)}(t,n);default:return t}},diff:function(t,e,a){switch(a){case"millisecond":return b(t,e);case"second":return function(t,e){r(2,arguments);var n=b(t,e)/1e3;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"minute":return function(t,e){r(2,arguments);var n=b(t,e)/6e4;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"hour":return function(t,e){r(2,arguments);var n=b(t,e)/T;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"day":return y(t,e);case"week":return function(t,e){r(2,arguments);var n=y(t,e)/7;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"month":return D(t,e);case"quarter":return function(t,e){r(2,arguments);var n=D(t,e)/3;return n>0?Math.floor(n):Math.ceil(n)}(t,e);case"year":return function(t,e){r(2,arguments);var a=n(t),i=n(e),o=h(a,i),u=Math.abs(g(a,i));a.setFullYear("1584"),i.setFullYear("1584");var s=h(a,i)===-o,c=o*(u-s);return 0===c?0:c}(t,e);default:return 0}},startOf:function(t,e,a){switch(e){case"second":return function(t){r(1,arguments);var e=n(t);return e.setMilliseconds(0),e}(t);case"minute":return function(t){r(1,arguments);var e=n(t);return e.setSeconds(0,0),e}(t);case"hour":return function(t){r(1,arguments);var e=n(t);return e.setMinutes(0,0,0),e}(t);case"day":return d(t);case"week":return s(t);case"isoWeek":return s(t,{weekStartsOn:+a});case"month":return function(t){r(1,arguments);var e=n(t);return e.setDate(1),e.setHours(0,0,0,0),e}(t);case"quarter":return function(t){r(1,arguments);var e=n(t),a=e.getMonth(),i=a-a%3;return e.setMonth(i,1),e.setHours(0,0,0,0),e}(t);case"year":return function(t){r(1,arguments);var e=n(t),a=new Date(0);return a.setFullYear(e.getFullYear(),0,1),a.setHours(0,0,0,0),a}(t);default:return t}},endOf:function(t,a){switch(a){case"second":return function(t){r(1,arguments);var e=n(t);return e.setMilliseconds(999),e}(t);case"minute":return function(t){r(1,arguments);var e=n(t);return e.setSeconds(59,999),e}(t);case"hour":return function(t){r(1,arguments);var e=n(t);return e.setMinutes(59,59,999),e}(t);case"day":return p(t);case"week":return function(t,a){r(1,arguments);var i=a||{},o=i.locale,u=o&&o.options&&o.options.weekStartsOn,s=null==u?0:e(u),c=null==i.weekStartsOn?s:e(i.weekStartsOn);if(!(c>=0&&c<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=n(t),l=d.getDay(),f=6+(lr.right&&(a|=2),er.bottom&&(a|=4),a}function u(t,e){var r,a,o=e.anchor,n=t;return e.clamp&&(n=function(t,e){for(var r,a,o,n=t.x0,i=t.y0,l=t.x1,u=t.y1,d=s(n,i,e),c=s(l,u,e);d|c&&!(d&c);)8&(r=d||c)?(a=n+(l-n)*(e.top-i)/(u-i),o=e.top):4&r?(a=n+(l-n)*(e.bottom-i)/(u-i),o=e.bottom):2&r?(o=i+(u-i)*(e.right-n)/(l-n),a=e.right):1&r&&(o=i+(u-i)*(e.left-n)/(l-n),a=e.left),r===d?d=s(n=a,i=o,e):c=s(l=a,u=o,e);return{x0:n,x1:l,y0:i,y1:u}}(n,e.area)),"start"===o?(r=n.x0,a=n.y0):"end"===o?(r=n.x1,a=n.y1):(r=(n.x0+n.x1)/2,a=(n.y0+n.y1)/2),function(t,e,r,a,o){switch(o){case"center":r=a=0;break;case"bottom":r=0,a=1;break;case"right":r=1,a=0;break;case"left":r=-1,a=0;break;case"top":r=0,a=-1;break;case"start":r=-r,a=-a;break;case"end":break;default:o*=Math.PI/180,r=Math.cos(o),a=Math.sin(o)}return{x:t,y:e,vx:r,vy:a}}(r,a,t.vx,t.vy,e.align)}var d=function(t,e){var r=(t.startAngle+t.endAngle)/2,a=Math.cos(r),o=Math.sin(r),n=t.innerRadius,i=t.outerRadius;return u({x0:t.x+a*n,y0:t.y+o*n,x1:t.x+a*i,y1:t.y+o*i,vx:a,vy:o},e)},c=function(t,e){var r=l(t,e.origin),a=r.x*t.options.radius,o=r.y*t.options.radius;return u({x0:t.x-a,y0:t.y-o,x1:t.x+a,y1:t.y+o,vx:r.x,vy:r.y},e)},h=function(t,e){var r=l(t,e.origin),a=t.x,o=t.y,n=0,i=0;return t.horizontal?(a=Math.min(t.x,t.base),n=Math.abs(t.base-t.x)):(o=Math.min(t.y,t.base),i=Math.abs(t.base-t.y)),u({x0:a,y0:o+i,x1:a+n,y1:o,vx:r.x,vy:r.y},e)},f=function(t,e){var r=l(t,e.origin);return u({x0:t.x,y0:t.y,x1:t.x,y1:t.y,vx:r.x,vy:r.y},e)},x=function(t){return Math.round(t*r)/r};function y(t,e){var r=e.chart.getDatasetMeta(e.datasetIndex).vScale;if(!r)return null;if(void 0!==r.xCenter&&void 0!==r.yCenter)return{x:r.xCenter,y:r.yCenter};var a=r.getBasePixel();return t.horizontal?{x:a,y:null}:{x:null,y:a}}function v(t,e,r){var a=r.backgroundColor,o=r.borderColor,n=r.borderWidth;(a||o&&n)&&(t.beginPath(),function(t,e,r,a,o,n){var i=Math.PI/2;if(n){var l=Math.min(n,o/2,a/2),s=e+l,u=r+l,d=e+a-l,c=r+o-l;t.moveTo(e,u),sr.x+r.w+2||t.y>r.y+r.h+2)},intersects:function(t){var e,r,a,o=this._points(),n=t._points(),i=[M(o[0],o[1]),M(o[0],o[3])];for(this._rotation!==t._rotation&&i.push(M(n[0],n[1]),M(n[0],n[3])),e=0;et.getProps([e],!0)[e]}),n=a.geometry(),i=$(l,a.model(),n),o._box.update(i,n,a.rotation()));(function(t,e){var r,a,o,n;for(r=t.length-1;r>=0;--r)for(o=t[r].$layout,a=r-1;a>=0&&o._visible;--a)(n=t[a].$layout)._visible&&o._box.intersects(n._box)&&e(o,n)})(t,(function(t,e){var r=t._hidable,a=e._hidable;r&&a||a?e._visible=!1:r&&(t._visible=!1)}))}(t)},lookup:function(t,e){var r,a;for(r=t.length-1;r>=0;--r)if((a=t[r].$layout)&&a._visible&&a._box.contains(e))return t[r];return null},draw:function(t,e){var r,a,o,n,i,l;for(r=0,a=e.length;r
+

Multiple Gmail accounts & labels with Emacs

diff --git a/posts/2021-05-01-org-python/index.html b/posts/2021-05-01-org-python/index.html index 681451c..3e73d6b 100644 --- a/posts/2021-05-01-org-python/index.html +++ b/posts/2021-05-01-org-python/index.html @@ -62,6 +62,7 @@
+

Replacing Jupyter Notebook with Org Mode

diff --git a/posts/2021-09-07-emms/index.html b/posts/2021-09-07-emms/index.html index 3ffa01a..9700b7f 100644 --- a/posts/2021-09-07-emms/index.html +++ b/posts/2021-09-07-emms/index.html @@ -62,6 +62,7 @@
+

My EMMS and elfeed setup

diff --git a/posts/2021-10-04-emacs-i3/index.html b/posts/2021-10-04-emacs-i3/index.html index c8e2c87..d4b9c11 100644 --- a/posts/2021-10-04-emacs-i3/index.html +++ b/posts/2021-10-04-emacs-i3/index.html @@ -62,6 +62,7 @@
+

Getting a consistent set of keybindings between i3 and Emacs

diff --git a/posts/2022-01-03-exwm/index.html b/posts/2022-01-03-exwm/index.html index 89a78dd..7115337 100644 --- a/posts/2022-01-03-exwm/index.html +++ b/posts/2022-01-03-exwm/index.html @@ -62,6 +62,7 @@
+

Using EXWM and perspective.el on multi-monitor setup

diff --git a/posts/2022-02-12-literate/index.html b/posts/2022-02-12-literate/index.html index 8e55379..782ffd6 100644 --- a/posts/2022-02-12-literate/index.html +++ b/posts/2022-02-12-literate/index.html @@ -62,6 +62,7 @@
+

A few cases of literate configuration

diff --git a/posts/2022-05-09-pdf/index.html b/posts/2022-05-09-pdf/index.html index 77c15f2..c4c8a44 100644 --- a/posts/2022-05-09-pdf/index.html +++ b/posts/2022-05-09-pdf/index.html @@ -62,6 +62,7 @@
+

Extending elfeed with PDF viewer and subtitles fetcher

diff --git a/posts/2022-09-16-vosk/index.html b/posts/2022-09-16-vosk/index.html index 282b25e..d287dfb 100644 --- a/posts/2022-09-16-vosk/index.html +++ b/posts/2022-09-16-vosk/index.html @@ -62,6 +62,7 @@
+

Podcast transcripts with elfeed & speech recognition engine

diff --git a/posts/2023-01-02-gource/index.html b/posts/2023-01-02-gource/index.html index d35b966..e080878 100644 --- a/posts/2023-01-02-gource/index.html +++ b/posts/2023-01-02-gource/index.html @@ -62,6 +62,7 @@
+

Running Gource with Emacs

diff --git a/posts/2023-04-13-emacs/index.html b/posts/2023-04-13-emacs/index.html new file mode 100644 index 0000000..a556ed2 --- /dev/null +++ b/posts/2023-04-13-emacs/index.html @@ -0,0 +1,212 @@ + + + + + + 916 days of Emacs + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + +
+

916 days of Emacs

+
+

916 days of Emacs

+ +
+

Poof I made my free-time disappear

+
+

- Ellis Kenyő, on being called an "elisp mage" +

Little did I know on the fateful day of [2020-10-09 Fri], when I had installed GNU Emacs. I wasn’t thinking about the ethical aspects of free software, the aesthetics of Lisp, or these other things with which an occasional layperson might explain how an almost half a century old program can still be in active use.

+

In fact, when considering using software X for anything, the most important question to me was: can X provide a better user experience? For Emacs, the answer to most of these questions turned out to be yes.

+

So over time, Emacs has become my programming environment, email client, window manager, knowledge base, and a lot more. I think I ended up using Emacs for almost as many things as possible; I even authored a few packages that implement certain parts of my workflows that weren’t readily available.

+

Among other things, the Emacs community is responsible for my introduction to Zettelkasten, RSS, Lisps… Perhaps even my English became slightly less broken because Emacs is so text-centered. A lot has changed over the course of these short 2.5 years.

+

Anyway, this post is an attempt to quantify some aspects of that story. The numbers mostly come from projects called ActivityWatch and WakaTime.

+

Mostly I’m curious myself, but also every now and then I see Emacs people discussing their journeys through the Elisp-land, or a potential convert wondering whether this rabbit hole is worth investigating. If any of this applies to you, you might find something interesting in this document.

+ +

Everything goes into Emacs

+

As I mentioned earlier, I use Emacs for a lot of things, which are described in my Emacs config. Fig. 1 shows how Emacs replaced various programs over time.

+ +

Also, unfortunately this post turned out to be rather inaccessible for those reading that with a screen-reader. I guess, if that applies to you, just mentally skip the figure references.

+

I did try to describe what's going on in these in the post body.

+
+

As you can see, I used Neovim for a little over a year. We’ll get into some numbers on that later.

+

The process of moving from knowing nothing about Emacs to using EXWM took about 13 months.

+

Fig. 2 shows the dynamics of the direct screen time ratio spent in Emacs per month, i.e. the average number of non-AFK seconds in the Emacs window.

+

+

It’s hard to discern any general trend here. It appears that the ratio started at 0.2 in October 2020, oscillated around 0.3 for about 7 months, then moved closer to 0.4 until January 2023, after which jumped to 0.45-0.5.

+

The three peaks in September 2021 (0.526), January 2022 (0.532), and August 2022 (0.568) may correspond to my vacations, during which I didn’t have to spend time in Chrome DevTools (I do web development as my “primary” job), but I’m not entirely sure.

+

The jump in January 2023 definitely matches my adoption of telega.el instead of the official desktop client. The time redistributes rather cleanly in the detailed ActivityWatch data.

+

It’s also interesting that switching from i3 to EXWM didn’t seem to have any distinguishable effects.

+

The mean Emacs screen time ratios are 0.39 since October 2020 and 0.47 since January 2023. So, as you might infer, Emacs is quite prominent in my PC usage.

+

Time spent in Emacs

+

Now let’s examine the structure of time spent in Emacs. Fig. 3 shows how many Emacs-hours per month I spent on different activities, and Fig. 4 shows the same in stacked form.

+

Unlike Fig. 2, the time here is calculated with a 15-minute timeout preference, as it’s done in WakaTime. For instance, if I work on a project in Emacs for 10 minutes, then switch to something else for 10 minutes (i.e. no heartbeats recorded during that time), then return to the project another 10 minutes, this will be counted as 30 minutes in that project.

+

This is mostly so because it’s the default format for the WakaTime export, but I also believe it’s reasonable since I may open package documentation during configuration, experiment in scratch buffers while working on a package, and so on. This time really has to be included in the final tally.

+

Of course, this will also include all the times I was distracted by the System Crafters Discord server, emacs.ch instance, or whatever else. Therefore, consider the numbers that follow as an upper bound.

+

+

+

The categories are as follows:

+
    +
  • Config ([REDACTED] total hours, [REDACTED]% of all time)
    +Time spent on actual Emacs configuration.
  • +
  • Emacs Packages ([REDACTED] total hours, [REDACTED]% of all time)
    +Time spent in other Emacs Lisp files, such as writing my packages or debugging other packages. See the packages section.
  • +
  • Org Mode ([REDACTED] total hours, [REDACTED]% of all time)
    +Time spent in my org-mode project, which is mostly org-journal, org-roam, and project management. By the way, guess the month in which I read Sönke Ahrens’ book about Zettelkasten.
  • +
  • sqrtminusone.xyz ([REDACTED] total hours, [REDACTED]% of all time)
    +Working on this strange little website.
  • +
  • Other Code ([REDACTED] total hours, [REDACTED]% of all time)
    +Doing something marginally useful in Emacs, which is mostly work, education, and a few personal projects unrelated to Emacs.
  • +
  • Misc ([REDACTED] total hours, [REDACTED]% of all time) +Time spent in Emacs but not in an actual project (i.e. accounted by the window watcher of ActivityWatch but not WakaTime, which watches for files). That includes reading RSS, writing emails, using messengers, doing some idle experimentation in scratch buffers, etc.
  • +
+

The [REDACTED]% of time spent on configuration is actually less than I expected. Unsurprisingly, the first month had the highest value of around 20% (I used Emacs without WakaTime for a few days).

+

By the way, I spent just 39.0 hours configuring Neovim, although the number is probably not representative anymore because Neovim has changed a lot over these 2 years.

+

Switching from Neovim

+

The period of my transition from Neovim to Emacs seems particularly interesting. Fig 5 zooms in on that, with the switch represented by “Other Code (Emacs)” replacing “Other Code (Vim)”.

+

+

It appears that getting from zero to somewhat productive took me about 11.1 hours over 4 days of just experimenting with Emacs, and one day with 3.8 hours on configuring and 4.4 hours on coding, apparently alternating between the two.

+

Configuration

+

Now, let’s examine where these [REDACTED] config hours went.

+

Configuration sizes are a common topic of discussion among Emacs users. I’d guess that mine falls into the category of the longest, although maybe I’ll do some research on that someday. Fig. 6 shows how my configuration size changed over time.

+

+

So, my Emacs.org is [REDACTED] lines long, and the resulting init.el is [REDACTED] lines long.

+

As you can see, I switched to literate configuration pretty early on, and so far, I have not regretted it. It’s also interesting to note how the two sizes diverged as I was writing more elaborate commentary.

+

Also, I never had any substantial issues with maintaining that configuration. Perhaps Emacs Bankruptcies are just not that common nowadays.

+

For the sake of completeness, let’s compare that to my Neovim usage. Fig. 7 shows the dynamics of config size for the first 400 days of using both programs.

+

+

As I previously mentioned, Neovim (or rather its ecosystem) seems to have undergone significant changes since I last used it, so my number of [REDACTED] init.vim lines may no longer be relevant. Nonetheless, it’s quite interesting.

+

Emacs packages

+

Working with Emacs packages was an interesting experience, not least because it was my first experience with Lisp. Fig. 8 shows the breakdown of the [REDACTED] hours I spent on that.

+

+

As I expected, my org-journal-tags tops the chart with [REDACTED] hours. The most interesting part was implementing set logic on the org-journal entities to create a query engine. I’m fairly certain that I’m the only user of this package, but I use it all the time.

+

The second place, “Unknown project”, stands for Emacs Lisp files that didn’t belong to any project, which should be mostly built-in Emacs files.

+

My elfeed-summary ([REDACTED] hours), lyrics-fetcher ([REDACTED] hours), and reverso ([REDACTED] hours) are also among the packages that I use almost daily. Thus, I do not regret investing time in developing any of those.

+

org-roam

+

It’s not directly related to Emacs, but I include it here because it’s highly unlikely that I would have heard the term “Zettelkasten” outside the Emacs space.

+

I already mentioned Sönke Ahrens’ book, but I believe the website zettelkasten.de would be a better resource if you are curious about that. And I was initially made curious by this stream of David Wilson.

+

Anyway, Fig. 9 shows the dynamics of my org-roam node count over time. A significant fraction of my [REDACTED] hours spent on Org Mode went there. Although I don’t have any particular goals in this regard.

+

+

Some observations

+

Let’s see where all of that leads us.

+

As I said, I started from the point of zero experience with Lisp. I had a degree in software engineering, but I don’t feel like it has helped me in any direct sense. At most, it exposed me to different kinds and concepts of programming, but I am confident that it’s anything but a prerequisite, as also shown by the story of Protesilaos.

+

The number of [REDACTED] total hours of configuration may seem huge, but I don’t think it’s that much over 2.5 years and in comparison to the alternatives. For instance, it would take 6th place from the top if placed among my job projects. Also, my AntennaPod shows 196.9 hours of podcasts played since December 2021, and some of my friends report having spent thousands of hours on video games.

+

And keep in mind that I use Emacs almost as extensively as it gets. You might as well spend much less time figuring it out for a more minimal use case. So, at least in my view, this weighs against describing Emacs usage in terms of sunk cost fallacy.

+

However, my story is consistent with the perception of a steep learning curve in the Emacs community. 19.3 hours over 5 days to get started is definitely a lot.

+ +
+ +
+ +
+ + diff --git a/posts/hello-world/index.html b/posts/hello-world/index.html index 367e41b..84fb1a6 100644 --- a/posts/hello-world/index.html +++ b/posts/hello-world/index.html @@ -62,6 +62,7 @@
+

Hello, world!

diff --git a/posts/index.html b/posts/index.html index c23d928..5a2b7d9 100644 --- a/posts/index.html +++ b/posts/index.html @@ -66,6 +66,8 @@

Posts

    +
  • 2023-04-13 | 916 days of Emacs
  • +
  • 2023-01-02 | Running Gource with Emacs
  • 2022-09-16 | Podcast transcripts with elfeed & speech recognition engine
  • diff --git a/posts/index.xml b/posts/index.xml index 1fdce5b..b48b18f 100644 --- a/posts/index.xml +++ b/posts/index.xml @@ -6,7 +6,106 @@ Recent content in Posts on SqrtMinusOne Hugo -- gohugo.io en-us - Mon, 02 Jan 2023 00:00:00 +0000 + Thu, 13 Apr 2023 00:00:00 +0000 + + 916 days of Emacs + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + Thu, 13 Apr 2023 00:00:00 +0000 + + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + + <style> + .quote-title { + margin-left: 24px; + } +</style> +<blockquote> +<p>Poof I made my free-time disappear</p> +</blockquote> +<p class="quote-title">- <a href="https://elken.dev">Ellis Kenyő</a>, on being called an "elisp mage" +<p>Little did I know on the fateful day of <strong><span class="timestamp-wrapper"><span class="timestamp">[2020-10-09 Fri]</span></span></strong>, when I had installed <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>. I wasn&rsquo;t thinking about the <a href="https://www.gnu.org/philosophy/philosophy.html">ethical aspects</a> of free software, the <a href="https://www.webofstories.com/play/marvin.minsky/44">aesthetics of Lisp</a>, or these other things with which an occasional layperson might explain how an almost <a href="https://www.jwz.org/doc/emacs-timeline.html">half a century old</a> program can still be in <a href="https://emacsconf.org/2022/talks/survey/">active use</a>.</p> +<p>In fact, when considering using software X for anything, the most important question to me was: can X provide a better user experience? For Emacs, the answer to most of these questions turned out to be yes.</p> +<p>So over time, Emacs has become my programming environment, email client, window manager, knowledge base, <a href="https://sqrtminusone.xyz/configs/emacs/">and a lot more</a>. I think I ended up using Emacs for almost as many things as possible; I even authored a few packages that implement certain parts of my workflows that weren&rsquo;t readily available.</p> +<p>Among other things, the Emacs community is responsible for my introduction to <a href="https://zettelkasten.de/">Zettelkasten</a>, RSS, Lisps&hellip; Perhaps even my English became slightly less broken because Emacs is so text-centered. A lot has changed over the course of these short 2.5 years.</p> +<p>Anyway, this post is an attempt to quantify some aspects of that story. The numbers mostly come from projects called <a href="https://activitywatch.net/">ActivityWatch</a> and <a href="https://wakatime.com/">WakaTime</a>.</p> +<p>Mostly I&rsquo;m curious myself, but also every now and then I see Emacs people discussing their journeys through the Elisp-land, or a potential convert wondering whether this rabbit hole is worth investigating. If any of this applies to you, you might find something interesting in this document.</p> +<noscript> +Also, I use a lot of JavaScript here, but it's all open source. The only 3rd party library is the MIT-licensed <a href="https://www.chartjs.org/">chart.js</a>. So you need to enable JavaScript if you want to see the charts and some of the numbers that are dynamically calculated. +</noscript> +<h2 id="everything-goes-into-emacs">Everything goes into Emacs</h2> +<p>As I mentioned earlier, I use Emacs for a lot of things, which are described in my <a href="https://sqrtminusone.xyz/configs/emacs/#introduction">Emacs config</a>. Fig. 1 shows how Emacs replaced various programs over time.</p> +<canvas id="chart-emacs-history"> + <p>Also, unfortunately this post turned out to be rather inaccessible for those reading that with a screen-reader. I guess, if that applies to you, just mentally skip the figure references.</p> + <p>I did try to describe what's going on in these in the post body.</p> +</canvas> +<p>As you can see, I used Neovim for a little over a year. We&rsquo;ll get into some numbers on that later.</p> +<p>The process of moving from knowing nothing about Emacs to using EXWM took about 13 months.</p> +<p>Fig. 2 shows the dynamics of the direct screen time ratio spent in Emacs per month, i.e. the average number of non-AFK seconds in the Emacs window.</p> +<p><canvas id="chart-emacs-screen-time"></canvas></p> +<p>It&rsquo;s hard to discern any general trend here. It appears that the ratio started at 0.2 in October 2020, oscillated around 0.3 for about 7 months, then moved closer to 0.4 until January 2023, after which jumped to 0.45-0.5.</p> +<p>The three peaks in September 2021 (0.526), January 2022 (0.532), and August 2022 (0.568) may correspond to my vacations, during which I didn&rsquo;t have to spend time in Chrome DevTools (I do web development as my &ldquo;primary&rdquo; job), but I&rsquo;m not entirely sure.</p> +<p>The jump in January 2023 definitely matches my adoption of <a href="https://github.com/zevlg/telega.el">telega.el</a> instead of the official desktop client. The time redistributes rather cleanly in the detailed ActivityWatch data.</p> +<p>It&rsquo;s also interesting that switching from <a href="https://i3wm.org/">i3</a> to <a href="https://github.com/ch11ng/exwm">EXWM</a> didn&rsquo;t seem to have any distinguishable effects.</p> +<p>The mean Emacs screen time ratios are 0.39 since October 2020 and 0.47 since January 2023. So, as you might infer, Emacs is quite prominent in my PC usage.</p> +<h2 id="time-spent-in-emacs">Time spent in Emacs</h2> +<p>Now let&rsquo;s examine the structure of time spent in Emacs. Fig. 3 shows how many Emacs-hours per month I spent on different activities, and Fig. 4 shows the same in stacked form.</p> +<p>Unlike Fig. 2, the time here is calculated with a 15-minute timeout preference, as <a href="https://wakatime.com/faq#timeout">it&rsquo;s done in WakaTime</a>. For instance, if I work on a project in Emacs for 10 minutes, then switch to something else for 10 minutes (i.e. no <a href="https://wakatime.com/developers/#heartbeats">heartbeats</a> recorded during that time), then return to the project another 10 minutes, this will be counted as 30 minutes in that project.</p> +<p>This is mostly so because it&rsquo;s the default format for the <a href="https://wakatime.com/faq#exporting">WakaTime export</a>, but I also believe it&rsquo;s reasonable since I may open package documentation during configuration, experiment in scratch buffers while working on a package, and so on. This time really has to be included in the final tally.</p> +<p>Of course, this will also include all the times I was distracted by the <a href="https://wiki.systemcrafters.net/community/chat-with-us/">System Crafters</a> Discord server, <a href="https://emacs.ch/">emacs.ch</a> instance, or whatever else. Therefore, consider the numbers that follow as an upper bound.</p> +<p><canvas id="chart-emacs-time"></canvas></p> +<p><canvas id="chart-emacs-time-stacked"></canvas></p> +<p>The categories are as follows:</p> +<ul> +<li><strong>Config</strong> (<span data-num="config_hours_total">[REDACTED]</span> total hours, <span data-num="config_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent on actual Emacs configuration.</li> +<li><strong>Emacs Packages</strong> (<span data-num="package_hours_total">[REDACTED]</span> total hours, <span data-num="package_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent in other Emacs Lisp files, such as writing my packages or debugging other packages. See the <a href="#emacs-packages">packages</a> section.</li> +<li><strong>Org Mode</strong> (<span data-num="orgmode_hours_total">[REDACTED]</span> total hours, <span data-num="orgmode_hours_percent">[REDACTED]</span>% of all time)<br /> +Time spent in my <code>org-mode</code> project, which is mostly <a href="https://github.com/bastibe/org-journal">org-journal</a>, <a href="https://www.orgroam.com/">org-roam</a>, and project management. By the way, guess the month in which I read <a href="https://www.soenkeahrens.de/en/takesmartnotes">Sönke Ahrens&rsquo; book</a> about Zettelkasten.</li> +<li><strong>sqrtminusone.xyz</strong> (<span data-num="sqrt_hours_total">[REDACTED]</span> total hours, <span data-num="sqrt_hours_percent">[REDACTED]</span>% of all time)<br /> +Working on this strange little website.</li> +<li><strong>Other Code</strong> (<span data-num="other_code_hours_total">[REDACTED]</span> total hours, <span data-num="other_code_hours_percent">[REDACTED]</span>% of all time)<br /> +Doing something marginally useful in Emacs, which is mostly work, education, and a few personal projects unrelated to Emacs.</li> +<li><strong>Misc</strong> (<span data-num="misc_hours_total">[REDACTED]</span> total hours, <span data-num="misc_hours_percent">[REDACTED]</span>% of all time) +Time spent in Emacs but not in an actual project (i.e. accounted by the <a href="https://github.com/ActivityWatch/aw-watcher-window">window watcher</a> of ActivityWatch but not WakaTime, which watches for files). That includes reading RSS, writing emails, using messengers, doing some idle experimentation in scratch buffers, etc.</li> +</ul> +<p>The <span data-num="config_hours_percent">[REDACTED]</span>% of time spent on configuration is actually less than I expected. Unsurprisingly, the first month had the highest value of around 20% (I used Emacs without WakaTime for a few days).</p> +<p>By the way, I spent just 39.0 hours configuring Neovim, although the number is probably not representative anymore because Neovim has changed a lot over these 2 years.</p> +<h2 id="switching-from-neovim">Switching from Neovim</h2> +<p>The period of my transition from Neovim to Emacs seems particularly interesting. Fig 5 zooms in on that, with the switch represented by &ldquo;Other Code (Emacs)&rdquo; replacing &ldquo;Other Code (Vim)&rdquo;.</p> +<p><canvas id="chart-emacs-vim-switch"></canvas></p> +<p>It appears that getting from zero to somewhat productive took me about 11.1 hours over 4 days of just experimenting with Emacs, and one day with 3.8 hours on configuring and 4.4 hours on coding, apparently alternating between the two.</p> +<h2 id="configuration">Configuration</h2> +<p>Now, let&rsquo;s examine where these <span data-num="config_hours_total">[REDACTED]</span> config hours went.</p> +<p>Configuration sizes are a common topic of discussion among Emacs users. I&rsquo;d guess that mine falls into the category of the longest, although maybe I&rsquo;ll do some research on that someday. Fig. 6 shows how my configuration size changed over time.</p> +<p><canvas id="chart-emacs-config-size"></canvas></p> +<p>So, my Emacs.org is <span data-num="emacs_org_length">[REDACTED]</span> lines long, and the resulting init.el is <span data-num="init_el_length">[REDACTED]</span> lines long.</p> +<p>As you can see, I switched to <a href="https://leanpub.com/lit-config">literate configuration</a> pretty early on, and so far, I have not regretted it. It&rsquo;s also interesting to note how the two sizes diverged as I was writing more elaborate commentary.</p> +<p>Also, I never had any substantial issues with maintaining that configuration. Perhaps <a href="https://www.emacswiki.org/emacs/DotEmacsBankruptcy">Emacs Bankruptcies</a> are just not that common nowadays.</p> +<p>For the sake of completeness, let&rsquo;s compare that to my Neovim usage. Fig. 7 shows the dynamics of config size for the first 400 days of using both programs.</p> +<p><canvas id="chart-emacs-vim-config-size"></canvas></p> +<p>As I previously mentioned, Neovim (or rather its ecosystem) seems to have undergone significant changes since I last used it, so my number of <span data-num="init_vim_length">[REDACTED]</span> init.vim lines may no longer be relevant. Nonetheless, it&rsquo;s quite interesting.</p> +<h2 id="emacs-packages">Emacs packages</h2> +<p>Working with Emacs packages was an interesting experience, not least because it was my first experience with Lisp. Fig. 8 shows the breakdown of the <span data-num="package_hours_total">[REDACTED]</span> hours I spent on that.</p> +<p><canvas id="chart-emacs-packages"></canvas></p> +<p>As I expected, my <a href="https://github.com/SqrtMinusOne/org-journal-tags">org-journal-tags</a> tops the chart with <span data-num="org-journal-tags_total">[REDACTED]</span> hours. The most interesting part was implementing set logic on the <a href="https://github.com/bastibe/org-journal">org-journal</a> entities to create a query engine. I&rsquo;m fairly certain that I&rsquo;m the only user of this package, but I use it all the time.</p> +<p>The second place, &ldquo;Unknown project&rdquo;, stands for Emacs Lisp files that didn&rsquo;t belong to any project, which should be mostly built-in Emacs files.</p> +<p>My <a href="https://github.com/SqrtMinusOne/elfeed-summary">elfeed-summary</a> (<span data-num="elfeed-summary_total">[REDACTED]</span> hours), <a href="https://github.com/SqrtMinusOne/lyrics-fetcher.el">lyrics-fetcher</a> (<span data-num="lyrics-fetcher_total">[REDACTED]</span> hours), and <a href="https://github.com/SqrtMinusOne/reverso.el">reverso</a> (<span data-num="reverso_total">[REDACTED]</span> hours) are also among the packages that I use almost daily. Thus, I do not regret investing time in developing any of those.</p> +<h2 id="org-roam"><code>org-roam</code></h2> +<p>It&rsquo;s not directly related to Emacs, but I include it here because it&rsquo;s highly unlikely that I would have heard the term &ldquo;Zettelkasten&rdquo; outside the Emacs space.</p> +<p>I already mentioned <a href="https://www.soenkeahrens.de/en/takesmartnotes">Sönke Ahrens&rsquo; book</a>, but I believe the website <a href="https://zettelkasten.de/posts/overview/">zettelkasten.de</a> would be a better resource if you are curious about that. And I was initially made curious by <a href="https://www.youtube.com/watch?v=-TpWahIzueg">this stream</a> of David Wilson.</p> +<p>Anyway, Fig. 9 shows the dynamics of my <a href="https://github.com/org-roam/org-roam">org-roam</a> node count over time. A significant fraction of my <span data-num="orgmode_hours_total">[REDACTED]</span> hours spent on Org Mode went there. Although I don&rsquo;t have any particular goals in this regard.</p> +<p><canvas id="chart-roam-nodes"></canvas></p> +<h2 id="some-observations">Some observations</h2> +<p>Let&rsquo;s see where all of that leads us.</p> +<p>As I said, I started from the point of zero experience with Lisp. I had a degree in software engineering, but I don&rsquo;t feel like it has helped me in any direct sense. At most, it exposed me to different kinds and concepts of programming, but I am confident that it&rsquo;s anything but a prerequisite, as also shown by the story of <a href="https://protesilaos.com/">Protesilaos</a>.</p> +<p>The number of <span data-num="config_hours_total">[REDACTED]</span> total hours of configuration may seem huge, but I don&rsquo;t think it&rsquo;s that much over 2.5 years and in comparison to the alternatives. For instance, it would take 6th place from the top if placed among my job projects. Also, my <a href="https://antennapod.org/">AntennaPod</a> shows 196.9 hours of podcasts played since December 2021, and some of my friends report having spent thousands of hours on video games.</p> +<p>And keep in mind that I use Emacs almost as extensively as it gets. You might as well spend much less time figuring it out for a more minimal use case. So, at least in my view, this weighs against describing Emacs usage in terms of sunk cost fallacy.</p> +<p>However, my story is consistent with the perception of a <a href="https://stackoverflow.com/questions/10942008/what-does-emacs-learning-curve-actually-look-like">steep learning curve</a> in the Emacs community. 19.3 hours over 5 days to get started is definitely a lot.</p> + + + + Running Gource with Emacs https://sqrtminusone.xyz/posts/2023-01-02-gource/ diff --git a/sitemap.xml b/sitemap.xml index 1031d2d..aaae688 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,19 +2,22 @@ + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + 2023-04-13T00:00:00+00:00 + https://sqrtminusone.xyz/tags/emacs/ - 2023-01-02T00:00:00+00:00 + 2023-04-13T00:00:00+00:00 https://sqrtminusone.xyz/ - 2023-01-02T00:00:00+00:00 + 2023-04-13T00:00:00+00:00 https://sqrtminusone.xyz/posts/ - 2023-01-02T00:00:00+00:00 - - https://sqrtminusone.xyz/posts/2023-01-02-gource/ - 2023-01-02T00:00:00+00:00 + 2023-04-13T00:00:00+00:00 https://sqrtminusone.xyz/tags/ + 2023-04-13T00:00:00+00:00 + + https://sqrtminusone.xyz/posts/2023-01-02-gource/ 2023-01-02T00:00:00+00:00 https://sqrtminusone.xyz/tags/elfeed/ diff --git a/stats/all.png b/stats/all.png index 172ff4b..53e19a9 100644 Binary files a/stats/all.png and b/stats/all.png differ diff --git a/stats/emacs-vim.png b/stats/emacs-vim.png index bfb94c4..41da092 100644 Binary files a/stats/emacs-vim.png and b/stats/emacs-vim.png differ diff --git a/stats/literate-config.png b/stats/literate-config.png index 4e98326..2b650e3 100644 Binary files a/stats/literate-config.png and b/stats/literate-config.png differ diff --git a/tags/emacs/index.html b/tags/emacs/index.html index f185b0f..762e17c 100644 --- a/tags/emacs/index.html +++ b/tags/emacs/index.html @@ -66,6 +66,8 @@

    emacs

      +
    • 2023-04-13 | 916 days of Emacs
    • +
    • 2023-01-02 | Running Gource with Emacs
    • 2022-09-16 | Podcast transcripts with elfeed & speech recognition engine
    • diff --git a/tags/emacs/index.xml b/tags/emacs/index.xml index e8f7caa..f4543fe 100644 --- a/tags/emacs/index.xml +++ b/tags/emacs/index.xml @@ -6,7 +6,17 @@ Recent content in emacs on SqrtMinusOne Hugo -- gohugo.io en-us - Mon, 02 Jan 2023 00:00:00 +0000 + Thu, 13 Apr 2023 00:00:00 +0000 + + 916 days of Emacs + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + Thu, 13 Apr 2023 00:00:00 +0000 + + https://sqrtminusone.xyz/posts/2023-04-13-emacs/ + Poof I made my free-time disappear +- Ellis Kenyő, on being called an "elisp mage" Little did I know on the fateful day of [2020-10-09 Fri], when I had installed GNU Emacs. I wasn&rsquo;t thinking about the ethical aspects of free software, the aesthetics of Lisp, or these other things with which an occasional layperson might explain how an almost half a century old program can still be in active use. + + Running Gource with Emacs https://sqrtminusone.xyz/posts/2023-01-02-gource/ diff --git a/tags/index.html b/tags/index.html index 39a36dd..8fde722 100644 --- a/tags/index.html +++ b/tags/index.html @@ -66,7 +66,7 @@

      Tags

        -
      • 2023-01-02 | emacs
      • +
      • 2023-04-13 | emacs
      • 2022-09-16 | elfeed
      • diff --git a/tags/index.xml b/tags/index.xml index 99cca11..460f5de 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -6,11 +6,11 @@ Recent content in Tags on SqrtMinusOne Hugo -- gohugo.io en-us - Mon, 02 Jan 2023 00:00:00 +0000 + Thu, 13 Apr 2023 00:00:00 +0000 emacs https://sqrtminusone.xyz/tags/emacs/ - Mon, 02 Jan 2023 00:00:00 +0000 + Thu, 13 Apr 2023 00:00:00 +0000 https://sqrtminusone.xyz/tags/emacs/